§
     @g=>  ã                  óð  — U d Z ddlmZ ddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZ dd	lmZ dNd„ZdOd„ZdPd„ZdQd„ZdRd„ZdSd„Z ej         de!e"¦  «        Z#dTd„Z$dUd!„Z%dVd#„Z&dWd%„Z'dXd'„Z(dYd)„Z)dZd+„Z*d[d-„Z+d\d/„Z,d]d2„Z-d^d4„Z.d_d6„Z/d`d8„Z0dad:„Z1dbd<„Z2dcd>„Z3ddd@„Z4dedD„Z5dfdF„Z6dgdH„Z7e.e/e0e1e2e3e4e6e7dIœ	Z8dJe9dK<   eeeeeeef         Z:ee%ee&ee'ee(ee)ee*iZ;dLe9dM<   dS )hz�Validator functions for standard library types.

Import of this module is deferred since it contains imports of many standard library modules.
é    )ÚannotationsN)ÚDecimal)ÚFraction)ÚIPv4AddressÚIPv4InterfaceÚIPv4NetworkÚIPv6AddressÚIPv6InterfaceÚIPv6Network)ÚAnyÚCallableÚUnion)ÚPydanticCustomErrorÚcore_schema)ÚPydanticKnownErrorÚ	validatorú(core_schema.ValidatorFunctionWrapHandlerÚinput_valueútyping.Sequence[Any]Úreturnc               óX  — t          | ¦  «        }t          |t          t          f¦  «        rt	          ddd|j        i¦  «        ‚|t          u rt          | ¦  «        }  || ¦  «        }|t          u r|S t          |t          ¦  «        r|S |t          u rt          |¦  «        S  ||¦  «        S )zPValidator for `Sequence` types, isinstance(v, Sequence) has already been called.Úsequence_strz;'{type_name}' instances are not allowed as a Sequence valueÚ	type_name)	ÚtypeÚ
issubclassÚstrÚbytesr   Ú__name__ÚtupleÚlistÚrange)r   r   Ú
value_typeÚv_lists       úR/var/www/piapp/venv/lib/python3.11/site-packages/pydantic/_internal/_validators.pyÚsequence_validatorr%      sÇ   € õ �kÑ"Ô"€Jõ �*�s¥E˜lÑ+Ô+ð 
Ý!ØØIØ˜*Ô-Ð.ñ
ô 
ð 	
ð •UÐÐÝ˜;Ñ'Ô'ˆàˆY�{Ñ#Ô#€Fð •TÐÐØˆÝ	�J¥Ñ	&Ô	&ð "àˆØ	•uÐ	Ð	Ý�V‰}Œ}Ðð ˆz˜&Ñ!Ô!Ð!ó    Úvaluer   c           	     ó¶   — t          | t          ¦  «        rC	 t          | ¦  «        S # t          $ r&}t	          dddt          |¦  «        i¦  «        |‚d }~ww xY w| S )NÚimport_errorzInvalid python path: {error}Úerror)Ú
isinstancer   Ú_import_string_logicÚImportErrorr   )r'   Úes     r$   Úimport_stringr/   <   sx   € Ý�%�ÑÔð ð	pÝ'¨Ñ.Ô.Ð.øÝð 	pð 	pð 	pÝ% nÐ6TÐW^Õ`cÐdeÑ`fÔ`fÐVgÑhÔhÐnoÐoøøøøð	pøøøð ˆs   —& ¦
A°!AÁAÚdotted_pathr   c                ó¤  — ddl m} |                      ¦   «                              d¦  «        }t	          |¦  «        dk    rt          d| ›�¦  «        ‚|d         }|st          d| ›�¦  «        ‚	  ||¦  «        }n€# t          $ rs}d|v rh|                      ¦   «                              dd¦  «        \  }}	 t          |› d|› �¦  «        cY d	}~S # t
          $ r Y nw xY wt          d
|›�¦  «        |‚|‚d	}~ww xY wt	          |¦  «        dk    rA|d         }	 t          ||¦  «        S # t          $ r}t          d|›d|›�¦  «        |‚d	}~ww xY w|S )uŒ  Inspired by uvicorn â€” dotted paths should include a colon before the final item if that item is not a module.
    (This is necessary to distinguish between a submodule and an attribute when there is a conflict.).

    If the dotted path does not include a colon and the final item is not a valid module, importing as an attribute
    rather than a submodule will be attempted automatically.

    So, for example, the following values of `dotted_path` result in the following returned values:
    * 'collections': <module 'collections'>
    * 'collections.abc': <module 'collections.abc'>
    * 'collections.abc:Mapping': <class 'collections.abc.Mapping'>
    * `collections.abc.Mapping`: <class 'collections.abc.Mapping'> (though this is a bit slower than the previous line)

    An error will be raised under any of the following scenarios:
    * `dotted_path` contains more than one colon (e.g., 'collections:abc:Mapping')
    * the substring of `dotted_path` before the colon is not a valid module in the environment (e.g., '123:Mapping')
    * the substring of `dotted_path` after the colon is not an attribute of the module (e.g., 'collections:abc123')
    r   )Úimport_moduleú:é   z5Import strings should have at most one ':'; received z<Import strings should have a nonempty module name; received ú.é   NzNo module named zcannot import name z from )Ú	importlibr2   ÚstripÚsplitÚlenr-   ÚModuleNotFoundErrorÚrsplitr,   ÚgetattrÚAttributeError)	r0   r2   Ú
componentsÚmodule_pathÚmoduler.   Úmaybe_module_pathÚmaybe_attributeÚ	attributes	            r$   r,   r,   G   sÝ  € ð$ (Ð'Ð'Ð'Ð'Ð'à×"Ò"Ñ$Ô$×*Ò*¨3Ñ/Ô/€JÝ
ˆ:�„˜ÒÐÝÐaÐR]ÐaÐaÑbÔbÐbà˜Q”-€KØð jÝÐhÐYdÐhÐhÑiÔiÐiðØ�˜{Ñ+Ô+ˆˆøÝð 	ð 	ð 	Ø�+ÐÐà1<×1BÒ1BÑ1DÔ1D×1KÒ1KÈCÐQRÑ1SÔ1SÑ.Ð˜ðÝ+Ð/@Ð,TÐ,TÀ?Ð,TÐ,TÑUÔUÐUÐUÐUÐUÐUÐUøÝð ð ð Ø�ðøøøåÐ@°Ð@Ð@ÑAÔAÀqÐHØˆøøøøð	øøøõ ˆ:�„˜ÒÐØ˜q”Mˆ	ð	_Ý˜6 9Ñ-Ô-Ð-øÝð 	_ð 	_ð 	_ÝÐV°IÐVÐVÀ{ÐVÐVÑWÔWÐ]^Ð^øøøøð	_øøøð ˆsT   Á0A< Á<
C9Â/C4Â6CÃ	C9Ã
CÃC4ÃCÃC4Ã4C9ÄD( Ä(
EÄ2EÅEútyping.Pattern[Any]c               ó°   — t          | t          j        ¦  «        r| S t          | t          t          f¦  «        rt          | ¦  «        S t          dd¦  «        ‚)NÚpattern_typeúInput should be a valid pattern)r+   ÚtypingÚPatternr   r   Úcompile_patternr   ©r   s    r$   Úpattern_either_validatorrM   z   sS   € Ý�+�vœ~Ñ.Ô.ð UØÐÝ	�K¥#¥u Ñ	.Ô	.ð Uå˜{Ñ+Ô+Ð+å! .Ð2SÑTÔTÐTr&   útyping.Pattern[str]c               ó@  — t          | t          j        ¦  «        r,t          | j        t          ¦  «        r| S t          dd¦  «        ‚t          | t          ¦  «        rt          | ¦  «        S t          | t          ¦  «        rt          dd¦  «        ‚t          dd¦  «        ‚)NÚpattern_str_typez Input should be a string patternrG   rH   )r+   rI   rJ   Úpatternr   r   rK   r   rL   s    r$   Úpattern_str_validatorrR   „   sœ   € Ý�+�vœ~Ñ.Ô.ð 
UÝ�kÔ)­3Ñ/Ô/ð 	^ØÐå%Ð&8Ð:\Ñ]Ô]Ð]Ý	�K¥Ñ	%Ô	%ð UÝ˜{Ñ+Ô+Ð+Ý	�K¥Ñ	'Ô	'ð UÝ!Ð"4Ð6XÑYÔYÐYå! .Ð2SÑTÔTÐTr&   útyping.Pattern[bytes]c               ó@  — t          | t          j        ¦  «        r,t          | j        t          ¦  «        r| S t          dd¦  «        ‚t          | t          ¦  «        rt          | ¦  «        S t          | t          ¦  «        rt          dd¦  «        ‚t          dd¦  «        ‚)NÚpattern_bytes_typezInput should be a bytes patternrG   rH   )r+   rI   rJ   rQ   r   r   rK   r   rL   s    r$   Úpattern_bytes_validatorrV   ’   sœ   € Ý�+�vœ~Ñ.Ô.ð 
UÝ�kÔ)­5Ñ1Ô1ð 	_ØÐå%Ð&:Ð<]Ñ^Ô^Ð^Ý	�K¥Ñ	'Ô	'ð UÝ˜{Ñ+Ô+Ð+Ý	�K¥Ñ	%Ô	%ð UÝ!Ð"6Ð8YÑZÔZÐZå! .Ð2SÑTÔTÐTr&   ÚPatternTyperQ   útyping.Pattern[PatternType]c                ór   — 	 t          j        | ¦  «        S # t           j        $ r t          dd¦  «        ‚w xY w)NÚpattern_regexz*Input should be a valid regular expression)ÚreÚcompiler*   r   )rQ   s    r$   rK   rK   £   sJ   € ðaÝŒz˜'Ñ"Ô"Ð"øÝŒ8ð að að aÝ! /Ð3_Ñ`Ô`Ð`ðaøøøs   ‚ – 6r   c               óŒ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r t          dd¦  «        ‚w xY w)NÚip_v4_addressz!Input is not a valid IPv4 address)r+   r   Ú
ValueErrorr   rL   s    r$   Úip_v4_address_validatorr`   ª   ó^   € Ý�+�{Ñ+Ô+ð ØÐðXÝ˜;Ñ'Ô'Ð'øÝð Xð Xð XÝ! /Ð3VÑWÔWÐWðXøøøó	   ™( ¨Ar	   c               óŒ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r t          dd¦  «        ‚w xY w)NÚip_v6_addressz!Input is not a valid IPv6 address)r+   r	   r_   r   rL   s    r$   Úip_v6_address_validatorre   ´   ra   rb   r   c               óŒ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r t          dd¦  «        ‚w xY w)z�Assume IPv4Network initialised with a default `strict` argument.

    See more:
    https://docs.python.org/library/ipaddress.html#ipaddress.IPv4Network
    Úip_v4_networkz!Input is not a valid IPv4 network)r+   r   r_   r   rL   s    r$   Úip_v4_network_validatorrh   ¾   ó`   € õ �+�{Ñ+Ô+ð ØÐðXÝ˜;Ñ'Ô'Ð'øÝð Xð Xð XÝ! /Ð3VÑWÔWÐWðXøøørb   r   c               óŒ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r t          dd¦  «        ‚w xY w)z�Assume IPv6Network initialised with a default `strict` argument.

    See more:
    https://docs.python.org/library/ipaddress.html#ipaddress.IPv6Network
    Úip_v6_networkz!Input is not a valid IPv6 network)r+   r   r_   r   rL   s    r$   Úip_v6_network_validatorrl   Í   ri   rb   r   c               óŒ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r t          dd¦  «        ‚w xY w)NÚip_v4_interfacez#Input is not a valid IPv4 interface)r+   r   r_   r   rL   s    r$   Úip_v4_interface_validatorro   Ü   ó_   € Ý�+�}Ñ-Ô-ð ØÐð\Ý˜[Ñ)Ô)Ð)øÝð \ð \ð \Ý!Ð"3Ð5ZÑ[Ô[Ð[ð\øøørb   r
   c               óŒ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r t          dd¦  «        ‚w xY w)NÚip_v6_interfacez#Input is not a valid IPv6 interface)r+   r
   r_   r   rL   s    r$   Úip_v6_interface_validatorrs   æ   rp   rb   r   c               óŒ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r t          dd¦  «        ‚w xY w)NÚfraction_parsingzInput is not a valid fraction)r+   r   r_   r   rL   s    r$   Úfraction_validatorrv   ð   s_   € Ý�+�xÑ(Ô(ð ØÐðWÝ˜Ñ$Ô$Ð$øÝð Wð Wð WÝ!Ð"4Ð6UÑVÔVÐVðWøøørb   Úxc                óL   — t          j        | ¦  «        st          d¦  «        ‚| S )NÚfinite_number)ÚmathÚisfiniter   )rw   s    r$   Úforbid_inf_nan_checkr|   ú   s'   € ÝŒ=˜ÑÔð 2Ý  Ñ1Ô1Ð1Ø€Hr&   Úvúint | float | strc                óh   — t          | t          t          t          f¦  «        r| S t	          | ¦  «        S )zßThe context argument for `PydanticKnownError` requires a number or str type, so we do a simple repr() coercion for types like timedelta.

    See tests/test_types.py::test_annotated_metadata_any_order for some context.
    )r+   ÚintÚfloatr   Úrepr)r}   s    r$   Ú
_safe_reprrƒ      s-   € õ
 �!•c�5¥#Ð&Ñ'Ô'ð ØˆÝ�‰7Œ7€Nr&   Úgtc                ó’   — 	 | |k    st          ddt          |¦  «        i¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚgreater_thanr„   z2Unable to apply constraint 'gt' to supplied value ©r   rƒ   Ú	TypeError)rw   r„   s     r$   Úgreater_than_validatorr‰   
  sg   € ðRØ�B’�Ý$ ^°d½JÀr¹N¼NÐ5KÑLÔLÐLØˆøÝð Rð Rð RÝÐPÈQÐPÐPÑQÔQÐQðRøøøó	   ‚&) ©AÚgec                ó’   — 	 | |k    st          ddt          |¦  «        i¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚgreater_than_equalr‹   z2Unable to apply constraint 'ge' to supplied value r‡   )rw   r‹   s     r$   Úgreater_than_or_equal_validatorrŽ     sh   € ðRØ�R’�Ý$Ð%9¸DÅ*ÈRÁ.Ä.Ð;QÑRÔRÐRØˆøÝð Rð Rð RÝÐPÈQÐPÐPÑQÔQÐQðRøøørŠ   Últc                ó’   — 	 | |k     st          ddt          |¦  «        i¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚ	less_thanr�   z2Unable to apply constraint 'lt' to supplied value r‡   )rw   r�   s     r$   Úless_than_validatorr’     sg   € ðRØ�B’�Ý$ [°4½ÀB¹¼Ð2HÑIÔIÐIØˆøÝð Rð Rð RÝÐPÈQÐPÐPÑQÔQÐQðRøøørŠ   Úlec                ó’   — 	 | |k    st          ddt          |¦  «        i¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚless_than_equalr“   z2Unable to apply constraint 'le' to supplied value r‡   )rw   r“   s     r$   Úless_than_or_equal_validatorr–   %  sh   € ðRØ�R’�Ý$Ð%6¸½zÈ"¹~¼~Ð8NÑOÔOÐOØˆøÝð Rð Rð RÝÐPÈQÐPÐPÑQÔQÐQðRøøørŠ   Úmultiple_ofc                ó�   — 	 | |z  rt          ddt          |¦  «        i¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)Nr—   z;Unable to apply constraint 'multiple_of' to supplied value r‡   )rw   r—   s     r$   Úmultiple_of_validatorr™   .  sn   € ð[Øˆ{‰?ð 	^Ý$ ]°]ÅJÈ{ÑD[ÔD[Ð4\Ñ]Ô]Ð]ØˆøÝð [ð [ð [ÝÐYÐVWÐYÐYÑZÔZÐZð[øøøs	   ‚%( ¨AÚ
min_lengthc                ó°   — 	 t          | ¦  «        |k    s!t          dd|t          | ¦  «        dœ¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚ	too_shortÚValue)Ú
field_typerš   Úactual_lengthz:Unable to apply constraint 'min_length' to supplied value ©r:   r   rˆ   )rw   rš   s     r$   Úmin_length_validatorr¡   7  s‚   € ðZÝ�A‘”˜*Ò$Ð$Ý$Ø¨GÀ:Õ`cÐdeÑ`fÔ`fÐgÐgñô ð ð ˆøÝð Zð Zð ZÝÐXÐUVÐXÐXÑYÔYÐYðZøøøó	   ‚58 ¸AÚ
max_lengthc                ó°   — 	 t          | ¦  «        |k    r!t          dd|t          | ¦  «        dœ¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚtoo_longr�   )rž   r£   rŸ   z:Unable to apply constraint 'max_length' to supplied value r    )rw   r£   s     r$   Úmax_length_validatorr¦   B  sƒ   € ðZÝˆq‰6Œ6�JÒÐÝ$ØØ&°jÕSVÐWXÑSYÔSYÐZÐZñô ð ð ˆøÝð Zð Zð ZÝÐXÐUVÐXÐXÑYÔYÐYðZøøør¢   Údecimalr   útuple[int, int]c                ó  — |                       ¦   «         }t          |j        t          ¦  «        st	          d| › �¦  «        ‚|j        }t          |j        ¦  «        }|dk    r||z  }d}nt          |¦  «        }t          ||¦  «        }||fS )aU  Compute the total number of digits and decimal places for a given [`Decimal`][decimal.Decimal] instance.

    This function handles both normalized and non-normalized Decimal instances.
    Example: Decimal('1.230') -> 4 digits, 3 decimal places

    Args:
        decimal (Decimal): The decimal number to analyze.

    Returns:
        tuple[int, int]: A tuple containing the number of decimal places and total digits.

    Though this could be divided into two separate functions, the logic is easier to follow if we couple the computation
    of the number of decimals and digits together.
    z:Unable to extract decimal digits info from supplied value r   )	Úas_tupler+   Úexponentr€   rˆ   r:   ÚdigitsÚabsÚmax)r§   Údecimal_tupler«   Ú
num_digitsÚdecimal_placess        r$   Ú_extract_decimal_digits_infor²   N  sž   € ð ×$Ò$Ñ&Ô&€MÝ�mÔ,­cÑ2Ô2ð `ÝÐ^ÐU\Ð^Ð^Ñ_Ô_Ð_ØÔ%€HÝ�]Ô)Ñ*Ô*€Jà�1‚}€}ð 	�hÑˆ
Øˆˆõ ˜X™œˆÝ˜ ^Ñ4Ô4ˆ
à˜:Ð%Ð%r&   Ú
max_digitsc                óð   — t          | ¦  «        \  }}t          |                      ¦   «         ¦  «        \  }}	 ||k    r||k    rt          dd|i¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚdecimal_max_digitsr³   z:Unable to apply constraint 'max_digits' to supplied value ©r²   Ú	normalizer   rˆ   )rw   r³   Ú_r°   Únormalized_num_digitss        r$   Úmax_digits_validatorrº   u  s¥   € Ý0°Ñ3Ô3�M€A€zÝ;¸A¿KºK¹M¼MÑJÔJÑ€AÐðZØ˜Ò#Ð#Ð*?À*Ò*LÐ*LÝ$Ø$Ø˜zÐ*ñô ð ð ˆøÝð Zð Zð ZÝÐXÐUVÐXÐXÑYÔYÐYðZøøøó   ¸A ÁA5r±   c                óð   — t          | ¦  «        \  }}t          |                      ¦   «         ¦  «        \  }}	 ||k    r||k    rt          dd|i¦  «        ‚| S # t          $ r t          d| › �¦  «        ‚w xY w)NÚdecimal_max_placesr±   z>Unable to apply constraint 'decimal_places' to supplied value r¶   )rw   r±   Údecimal_places_r¸   Únormalized_decimal_placess        r$   Údecimal_places_validatorrÀ   „  s¦   € Ý5°aÑ8Ô8Ñ€O�QÝ#?ÀÇÂÁÄÑ#NÔ#NÑ Ð˜qð^Ø˜nÒ,Ð,Ð3LÈ~Ò3]Ð3]Ý$Ø$Ø! >Ð2ñô ð ð ˆøÝð ^ð ^ð ^ÝÐ\ÐYZÐ\Ð\Ñ]Ô]Ð]ð^øøør»   )	r„   r‹   r�   r“   r—   rš   r£   r³   r±   zdict[str, Callable]ÚNUMERIC_VALIDATOR_LOOKUPzdict[type[IpType], Callable]ÚIP_VALIDATOR_LOOKUP)r   r   r   r   r   r   )r'   r   r   r   )r0   r   r   r   )r   r   r   rE   )r   r   r   rN   )r   r   r   rS   )rQ   rW   r   rX   )r   r   r   r   )r   r   r   r	   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r
   )r   r   r   r   )rw   r   r   r   )r}   r   r   r~   )rw   r   r„   r   r   r   )rw   r   r‹   r   r   r   )rw   r   r�   r   r   r   )rw   r   r“   r   r   r   )rw   r   r—   r   r   r   )rw   r   rš   r   r   r   )rw   r   r£   r   r   r   )r§   r   r   r¨   )rw   r   r³   r   r   r   )rw   r   r±   r   r   r   )<Ú__doc__Ú
__future__r   Ú_annotationsrz   r[   rI   r§   r   Ú	fractionsr   Ú	ipaddressr   r   r   r	   r
   r   r   r   r   Úpydantic_corer   r   Úpydantic_core._pydantic_corer   r%   r/   r,   rM   rR   rV   ÚTypeVarr   r   rW   rK   r`   re   rh   rl   ro   rs   rv   r|   rƒ   r‰   rŽ   r’   r–   r™   r¡   r¦   r²   rº   rÀ   rÁ   Ú__annotations__ÚIpTyperÂ   © r&   r$   ú<module>rÎ      sõ  ððð ð ð
 3Ð 2Ð 2Ð 2Ð 2Ð 2à €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;ð%"ð %"ð %"ð %"ðPð ð ð ð0ð 0ð 0ð 0ðfUð Uð Uð UðUð Uð Uð UðUð Uð Uð Uð ˆfŒn˜]¨C°Ñ7Ô7€ðað að að aðXð Xð Xð XðXð Xð Xð XðXð Xð Xð XðXð Xð Xð Xð\ð \ð \ð \ð\ð \ð \ð \ðWð Wð Wð Wðð ð ð ðð ð ð ðRð Rð Rð RðRð Rð Rð RðRð Rð Rð RðRð Rð Rð Rð[ð [ð [ð [ðZð Zð Zð Zð	Zð 	Zð 	Zð 	Zð$&ð $&ð $&ð $&ðNZð Zð Zð Zð^ð ^ð ^ð ^ð  !Ø
)Ø
Ø
&Ø(Ø&Ø&Ø&Ø.ð
1ð 
1Ð ð 
ð 
ð 
ñ 
ð 
ˆ{˜K¨°kÀ=ÐR_Ð_Ô	`€ð Ð(ØÐ(ØÐ(ØÐ(ØÐ,ØÐ,ð5Ð ð ð ð ñ ð ð r&   