a
    ç´«jcw  ã                   @   sX  d Z ddlmZ ej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 ddlT g d	¢Zg Zi ai Zd
d
d
dddddddddddddddœZdddddddddddddddddd d d!œZd"d#d$d%d&d%d'd(d)d*d+d,d-d.d/d0d1d2d3d!œZd"d#d%d%d'd)d+d,d4d4d4d5d3d6œZd
d
d7d8d8d9œdd:d;dd<d=d>d?d@dAœ	dBdBdCdDdDdEœdBdBdCdDdDd9œddFd;dd<dGœdHdCidHd7idHdFidIœae e¡ e e¡ eteeƒ\aZe t¡Zg adJdK„ ZdLdLdMdNdNdOdPdQdNdRdSdTdSdUdUdVdWdXdYœZ dZd[„ Z!d\d]„ Z"d^d_„ Z#dvd`da„Z$dbdc„ Z%ddde„ Z&dfdg„ Z'dhdi„ Z(djdk„ Z)dldm„ Z*dndo„ Z+dwdpdq„Z,drds„ Z-dtdu„ Z.dS )xa  
Copyright 1999 -- 2011 Pearu Peterson all rights reserved.
Copyright 2011 -- present NumPy Developers.
Permission to use, modify, and distribute this software is given under the
terms of the NumPy License.

NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
é   )Ú__version__é    N)Úmarkoutercomma)Úcb_rules)Úiso_c_binding_mapÚisoc_c2pycode_mapÚiso_c2py_map)Ú*)ÚgetctypeÚgetstrlengthÚ
getarrdimsÚgetpydocsignÚgetarrdocsignÚgetinitÚsign2mapÚroutsign2mapÚmodsign2mapÚcb_sign2mapÚcb_routsign2mapÚcommon_sign2mapÚprocess_f2cmap_dictÚfloatÚintÚlongÚcomplexÚstringÚbytes)Údoubler   Úlong_doubleÚcharÚsigned_charÚunsigned_charÚshortÚunsigned_shortr   r   Ú	long_longÚunsignedÚcomplex_floatÚcomplex_doubleÚcomplex_long_doubler   Ú	characterZ
NPY_DOUBLEZ	NPY_FLOATZNPY_LONGDOUBLEZNPY_BYTEZ	NPY_UBYTEZ	NPY_SHORTZ
NPY_USHORTZNPY_INTZNPY_UINTZNPY_LONGZ	NPY_ULONGZNPY_LONGLONGZNPY_ULONGLONGZ
NPY_CFLOATZNPY_CDOUBLEZ
NPY_STRING)r   r   r   r   r!   r    r"   r#   r   r%   r   Úunsigned_longr$   Úunsigned_long_longr&   r'   r(   r   r)   ÚdÚfÚgÚbÚBÚhÚHÚiÚIÚlÚLÚqÚQÚFÚDÚGÚSÚcÚNÚy)r   r   r   r    r"   r   r   r$   r&   r'   r(   r   r)   r   r   )Ú Ú4Ú8Z12Ú16r    r"   r$   r!   r#   r%   r+   )	r@   Ú1Ú2rA   rB   ú-1z-2z-4z-8r&   r'   r(   )r@   rB   rC   Z24Z32r   )r@   rD   rE   rA   rB   r@   )ÚrealÚintegerr   ZcomplexkindÚlogicalzdouble complexzdouble precisionÚbytec              
   C   sÄ   t  t¡a| d u r&d} tj | ¡s&d S zhtd | ¡ƒ t	| ƒ�$}t
| ¡  ¡ i i ƒ}W d   ƒ n1 sh0    Y  tt|tdƒ\aatdƒ W n0 ty¾ } ztd| ƒ W Y d }~n
d }~0 0 d S )Nz.f2py_f2cmapzReading f2cmap from {!r} ...
Tz1Successfully applied user defined f2cmap changes
z;Failed to apply user defined f2cmap changes: %s. Skipping.
)ÚcopyÚdeepcopyÚf2cmap_defaultÚ
f2cmap_allÚosÚpathÚisfileÚoutmessÚformatÚopenÚevalÚreadÚlowerr   Úc2py_mapÚf2cmap_mappedÚ	ExceptionÚerrmess)Zf2cmap_filer-   r,   Úmsg© r]   úS/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/numpy/f2py/capi_maps.pyÚload_f2cmap_fileŠ   s    

2r_   z%gz%Lgz%dz%hhuz%hdz%huz%uz%ldz%luz(%g,%g)z	(%Lg,%Lg)z\"%s\"z'%c')r   r   r   r   r    r!   r"   r#   r   r%   r   r*   r$   r&   r'   r(   r   r)   c                 C   sê  d}t | ƒrRd| v r| d }n| d }|| d v rBt| d | ƒS td| ƒ �n”t| ƒr^|S t| ƒrjdS t| ƒrvdS d| v �rÐ| d  ¡ tv �rÐ| d  ¡ }t| }|d	 }d
| v �ræd| d
 v �rz|| d
 d  }W n2 t�y   td| d d| d
 d f ƒ Y n0 n¾d| d
 v �ræ|d tv �r8t|d  }z|| d
 d  }W n€ t�yÌ   |tv �rnt| }z|t	| d
 d ƒ }W n@ t�yÆ   td|| d
 d ||| d
 d t
 ¡ f ƒ Y n0 Y n0 nt| ƒ�sætd|  ƒ |S )z
    Determines C type
    ÚvoidÚresultÚnameÚvarsú,getctype: function %s has no return value?!
r)   r   Útypespecr@   Zkindselectorr	   z$getctype: "%s %s %s" not supported.
Úkindz}getctype: "%s(kind=%s)" is mapped to C "%s" (to override define dict(%s = dict(%s="<C typespec>")) in %s/.f2py_f2cmap file).
z2getctype: No C-type found in "%s", assuming void.
)Ú
isfunctionr
   r[   ZissubroutineZischaracter_or_characterarrayZisstring_or_stringarrayrW   rN   ÚKeyErrorÚstrrO   ÚgetcwdÚ
isexternal)ÚvarÚctypeÚare   Zf2cmapr]   r]   r^   r
   »   sZ    

ÿ
ÿÿ
r
   c                 C   s   t  dd| ¡} | S )a^  Rewrite Fortran expression as f2py supported C expression.

    Due to the lack of a proper expression parser in f2py, this
    function uses a heuristic approach that assumes that Fortran
    arithmetic expressions are valid C arithmetic expressions when
    mapping Fortran function calls to the corresponding C function/CPP
    macros calls.

    z\blen\bZ	f2py_slen)ÚreÚsub)Úexprr]   r]   r^   Úf2cexprî   s    rr   c                 C   sÔ   t | ƒrJd| v r| d }n| d }|| d v r>t| d | ƒS td| ƒ t| ƒsbtdt| ƒ ƒ d}d| v rœ| d }d|v rˆ|d }nd	|v rœt|d	 ƒ}t d
|¡s´t d|¡rÐt| ƒrÌtdt| ƒ ƒ d}|S )Nra   rb   rc   z0getstrlength: function %s has no return value?!
z;getstrlength: expected a signature of a string but got: %s
rD   Úcharselectorr	   Úlenz\(\s*(\*|:)\s*\)z(\*|:)zMgetstrlength:intent(hide): expected a string with defined length but got: %s
rF   )	Úisstringfunctionr   r[   ÚisstringÚreprrr   ro   ÚmatchÚisintent_hide)rl   rn   rt   r]   r]   r^   r   ý   s2    

ÿ
ÿr   c           	      C   s‚  i }t |ƒr4t|ƒs4t|ƒ|d< d|d< d|d< �nJt|ƒrXd|d< d|d< d|d< �n&t|ƒ�r~t |d ¡}d |¡|d< ztt|d ƒƒ|d< W n ty¨   Y n0 d	 |¡|d< tt	|ƒƒ|d< tt	|ƒd
g ƒdd
… |d< t
t	|ƒƒD ]|}g }|| tv �r|| g}n,tD ]&}t d| || ¡�r| |¡ �q|D ](}t |¡t | ¡k�rDd||<  qò�qDqòd\|d< }|D ].}|d }|dv�r€d|d ||f |d< �q€|d �rÎ|d d d
… |d< d\|d< }|d D ]|}|d }|dv�rd|d ||f |d< nLt|ƒ�r>td| ƒ d|d |df |d< n|�râtdt| ƒt|ƒf ƒ �qâ|d �r~|d d d
… |d< |S )NÚsizeÚ0Úrankr@   ÚdimsrD   Ú	dimensionr	   ú,éÿÿÿÿr   z	rank*[-1]z.*?\b%s\b.*)r@   r€   Zsetdims)r	   ú:z(*)z(:)z%s#varname#_Dims[%d]=%s,Z	cbsetdimsz?getarrdims:warning: assumed shape array, using 0 instead of %r
r   z]getarrdims: If in call-back function: array argument %s must have bounded dimensions: got %s
)rv   Úisarrayr   ÚisscalarrK   Újoinrw   rU   rZ   rt   ÚrangeÚdepargsro   rx   ÚappendÚindexÚisintent_inrR   r[   )	rn   rl   ÚverboseÚretÚdimr3   ÚvÚvar,   r]   r]   r^   r     sx    



ÿ


ÿ
ÿ
ÿÿ
r   c                 C   sŠ  t |ƒrPd|v r|d }n|d }||d v r@t||d | ƒS td| ƒ dS | |  }}d}t|ƒrld}nt|ƒrxd}| }t|ƒr²|d	 D ]$}|d d
… dkrŒ|d
d … } q²qŒd}t|ƒ}	t|ƒrÜt| |ƒ\}}
d|
 }t	|ƒ�r4t|ƒ�rd| |t
|	 t|	 |f }nd| |t
|	 |f }d|t
|	 f }�nNt|ƒ�r„t|ƒ�r^d| |t|ƒ|f }nd| |t|ƒ|f }d|t|ƒf }nþt|ƒ�r|d }tt|ƒƒ}d| ||t|	 d |¡|f }| |k�ræd| |t|	 d |¡f }nd||t|	 d |¡| f }n~t|ƒ�rvd}| tv �rdt|  tv �rddtt|   v �rdtt|   d }|| k�s`d| }nd}d| |f }|}ntd|  ƒ ||fS )Nra   rb   rc   rd   ©r@   r@   r@   Úinputz	in/outputÚintenté   úout=z, optional\n    Default: %sz%s : %s rank-0 array(%s,'%s')%sz%s : %s %s%sz%s : %sz*%s : %s rank-0 array(string(len=%s),'c')%sz%s : %s string(len=%s)%sz%s : string(len=%s)r~   z.%s : %s rank-%s array('%s') with bounds (%s)%sr   ú)%s : rank-%s array('%s') with bounds (%s)z8%s : rank-%s array('%s') with bounds (%s) and %s storageÚargnamez => %sz%s : call-back function%sz7getpydocsign: Could not resolve docsignature for "%s".
)rg   r   r[   r‰   Úisintent_inoutÚisintent_outr
   Úhasinitvaluer   rƒ   rX   Úc2pycode_maprv   r   r‚   rw   rt   r„   rk   Úlcb_mapÚlcb2_map)rn   rl   ÚafÚsigZsigoutÚoptÚout_aÚkÚinitrm   ÚshowinitrŒ   r|   Zuar]   r]   r^   r   V  sŒ    



ÿ

ÿÿ
ÿ
ý
ÿÿ
*

ÿr   c                 C   s„   t |ƒ}t|ƒr*t|ƒs*d| t|ƒf }nVt|ƒrJd| t| t| f }n6t|ƒr€|d }tt|ƒƒ}d| |t| d 	|¡f }|S )Nz%%s : rank-0 array(string(len=%s),'c')z%s : rank-0 array(%s,'%s')r~   r”   r   )
r
   rv   r‚   r   rƒ   rX   r™   rw   rt   r„   )rn   rl   rm   r�   rŒ   r|   r]   r]   r^   r      s&    ÿ
ÿÿýr   c                 C   sL  t |ƒrd\}}nd\}}t|ƒ�rD|d }|}t|ƒs@t|ƒrèi }zb|d }d|v rzt|dd… ƒ d¡\|d< |d	< n*t|i i ƒ}t|jƒt|j	ƒ |d< |d	< W n" t
yÈ   td
|| f ƒ‚Y n0 t|ƒræd|d |d	 f }n\t |ƒ�rD|�s d\}}|d dk�r&d|dd…  dd¡ }|d dk�rDd|dd…  }||fS )N)z""z''r�   ú=r   r   r€   ú@,@úinit.rúinit.izMgetinit: expected complex number `(r,i)' but got `%s' as initial value of %r.z (capi_c.r=%s,capi_c.i=%s,capi_c)r   ú'z"%s"ú"z\"z'%s')rv   r˜   Ú	iscomplexÚiscomplexarrayr   ÚsplitrU   ri   rG   ÚimagrZ   Ú
ValueErrorr‚   Úreplace)rn   rl   r¡   r¢   r‹   r�   r]   r]   r^   r   ²  sD    


ÿÿ"
ÿ
ÿ
r   c                 C   sD   t | ƒst| ƒr,t| ƒ}| d  d|¡}|S t| ƒs<t| ƒr@dS dS )Nrs   Zf2py_lenrD   )rv   Úisstringarrayr   ÚgetZischaracterZischaracterarray)rl   Úelsizer]   r]   r^   Ú
get_elsizeÕ  s    r²   c              "   C   sH  | }t |ƒr:|d D ]$}|dd… dkr|dd… } q:q| |t|ƒdœ}g }t ¡ D ]\}}||ƒrV| d| ¡ qV|rŠd |¡|d< nd|d< t|ƒr¤d	|d
< n&|d tv rÂt|d  |d
< nd|d
< t| |ƒ\|d< |d< t	|ƒ�r$t
|ƒ�r$t|ƒ�s$t|d dd… ƒ d¡\|d< |d< t|ƒ�r¾| |d< | tv �ržt|  |d< tt|   d |d< tt|   d |d< tt|   d |d< tt|   d |d< n | |d< td| tt ¡ ƒf ƒ t|ƒ�rÔt|ƒ|d< t|ƒ�rüt|t| |ƒƒ}t |d ¡}|d tv �r&t|d  |d< t|ƒ|d < t|ƒ�rÄtd!t d"td#td$td%td&t
d't t!t"t
ƒƒd(td)td*t#d+t$d,t%d-t t&t"t%ƒƒd.td/t'd/t(d0g"}	g }
t)d1t*|	ƒd2ƒD ]&}|	| |ƒ�r |
 |	|d  ¡ �q t|ƒ�rè|
 d3| |d f ¡ t|ƒ�rd4 t+d5d6„ |d |ƒ¡}|
 d7| ¡ t|ƒ�rBd8| |d d4 |
¡f |d9< n"d:|d | |d d4 |
¡f |d9< t!|ƒ�r”|d t,v �r”d;| t,|d  f |d<< t|ƒ�r®d=| | f |d<< t|ƒ�rÄd>|  |d<< |d t,v �rþd?| t,|d  f |d@< dAt,|d   |dB< t|ƒ�rdC| | f |d@< t-| |ƒ\|dD< |dE< t.|ƒ�rD|dF |dF< |S )Gz†
    varname,ctype,atype
    init,init.r,init.i,pytype
    vardebuginfo,vardebugshowvalue,varshowvalue
    varrformat

    intent
    r‘   Nr’   r“   )ÚvarnameZ
outvarnamerm   zF2PY_%sú|ZF2PY_INTENT_INr>   Z
varrformatrm   ÚOr¡   r¢   r   r€   r¤   r¥   r¦   Z	cbnamekeyZcbnameÚ
maxnofargsÚ
nofoptargsZdocstrZcbdocstrZlatexdocstrZcblatexdocstrz5sign2map: Confused: external %s is not in lcb_map%s.
Úlengthr~   Úatyper±   r�   ÚoutputZinoutputÚrequiredÚoptionalÚhiddenzcomplex scalarZscalarr   Úarrayzcomplex arrayzstring arrayzcomplex functionÚfunctionÚcallbackZ	auxiliaryr   é   zslen(%s)=%sr   c                 S   s   d| |f S )Nz%s|%sr]   )Úxr?   r]   r]   r^   Ú<lambda>1  ó    zsign2map.<locals>.<lambda>zdims(%s)zdebug-capi:%s=>%s:%sZvardebuginfozdebug-capi:%s %s=%s:%súdebug-capi:%s=%sZvardebugshowvalueú"debug-capi:slen(%s)=%%d %s=\"%%s\"zdebug-capi:%s=%%pz#name#:%s=%sZvarshowvalueú%sÚshowvalueformatz#name#:slen(%s)=%%d %s=\"%%s\"Ú	pydocsignÚpydocsignoutÚnote)/r—   r
   Zisintent_dictÚitemsr‡   r„   r‚   Úc2buildvalue_mapr   r˜   r©   r   r«   rk   rš   r›   r[   ÚlistÚkeysrv   r   Ú
dictappendr   rK   Ú
c2capi_mapr²   Ú	debugcapir‰   r–   Z
isrequiredÚ
isoptionalry   Zl_andrƒ   Zl_notrª   r¯   Úiscomplexfunctionrg   Úisintent_callbackZisintent_auxr…   rt   ÚmapÚcformat_mapr   Úhasnote)rn   rl   rŸ   r    r‹   Zintent_flagsr-   ÚsrŒ   ÚilZrlr3   Zddimr]   r]   r^   r   ã  sÄ    	
ÿÿ

ÿ


õ

ÿ
ÿÿ

ÿ

ÿ



r   c           	      C   sø  | d }t | ƒ}|| dd¡| ¡ | ¡ t|ƒtd| ƒ|| ¡ t| ƒpJdt| ƒpTdt| ƒp^ddœ}d|v rvd|d< nd|d< d|v r�d	|d
< nd
|d
< i ad| v �r:| d  	¡ D ]„}|t
jv r²t
j| D ]j}|d }d| d | v �r(| d | d  	¡ D ]*}| d | d | |d krü|} �q(qü|d t|< qÊq²n0d| v �rj| d �rjtd|d t| d ƒf ƒ t| tƒ�pxd|d< t| ƒ�rÔd| v �rœ| d }n| d }||d< t|| ƒ\|d< |d< t| d | ƒ|d< t| ƒ�r| d | d |d< dg| d | d< |d tv �r&t|d  |d< nd|d< tdt|d ƒ ƒ t| ƒ�rŒ|d tv �rrd|t|d  f |d< t| ƒ�rŒd ||f |d< t| ƒ�rÔt| d | ƒ|d!< |d! d"k�rÔtd#t| d ƒ ƒ d$|d!< t| ƒ�rô| d |d< dg| d< |S )%zV
    name,NAME,begintitle,endtitle
    rname,ctype,rformat
    routdebugshowvalue
    rb   Ú_ú\_ú	end of %sr@   )rb   ZtexnameZ
name_lowerÚNAMEÚ
begintitleÚendtitleZfortrannameZFORTRANNAMEZcallstatementÚusercodeÚ	usercode1Ú	F_FUNC_USÚF_FUNCZF_WRAPPEDFUNC_USZF_WRAPPEDFUNCZuser   rÖ   r   Z	externalszMroutsign2map: Confused: function %s has externals %s but no "use" statement.
Zcallprotoargumentra   ÚrnamerÉ   rÊ   rc   rm   rË   Z
resultnoteúSee elsewhere.Zrformatrµ   z.routsign2map: no c2buildvalue key for type %s
rÅ   ZroutdebugshowvaluerÆ   ZrlengthrF   zzroutsign2map: expected explicit specification of the length of the string returned by the fortran function %s; taking 10.
Ú10)Zgetfortrannamer®   rW   ÚupperÚgentitleZgetcallstatementÚgetusercodeÚgetusercode1rš   rÏ   r   Zcb_mapr[   rw   Zgetcallprotoargumentrg   r   r
   ZhasresultnoterÍ   rÒ   r×   ru   r   rØ   )	Úroutrb   Úfnamer‹   ÚuÚunÚlnr    rn   r]   r]   r^   r   M  s’    




ö



ÿ




ÿ
ÿ

ÿ


ÿ

r   c                 C   sü   t | ƒr.| d | d  ¡ | d  dd¡dœ}n$| d | d  ¡ | d  dd¡dœ}t| ƒp\g |d< t| ƒrv| d |d< t| ƒp€d|d	< t| ƒp�d|d
< | d r¸t| d d ƒp°d|d< nd|d< t| ƒpÊd|d< d| v rä| d |d< d| v rø| d |d< |S )z
    modulename
    rb   rÛ   rÜ   )Zf90modulenameZF90MODULENAMEZtexf90modulename)Ú
modulenameZ
MODULENAMEZtexmodulenameZrestdocrË   r@   rá   râ   Úbodyr   Zinterface_usercodeZpymethoddefZcoutputZf2py_wrapper_output)Úismodulerè   r®   Z
getrestdocrØ   rê   rë   Zgetpymethoddef)Úmr‹   r]   r]   r^   r   ž  s.    
þ
þr   c                 C   s¸   d| i}|d |d< t |ƒ|d< |d tv rHt|d  |d< t|ƒ|d< |d tv rhdt|d   |d< t|ƒr€t|t| |ƒƒ}t| |ƒ\|d< |d	< t|ƒr´|d
 |d
< dg|d
< |S )Nr³   Z	varname_irm   r¹   r±   rÇ   rÈ   rÉ   rÊ   rË   ræ   )	r
   rÑ   r²   r×   r‚   rÐ   r   r   rØ   )rn   rl   rˆ   r‹   r]   r]   r^   r   »  s    
r   c                 C   sœ  d| d |f ddœ}t | ƒr`d| d v r0d}nd}d|| d  ¡ | d  ¡ f |d	< d
|d< n|d |d	< d|d< | d |d< t|d ƒ|d< td|d  ƒ|d< t| ƒ|d< d|d< |d dkrÎd|d< n|d |d< |d dk�rt| ƒrúd|d< nd|d< |d tv �r$dt|d   |d< t| ƒ�r:t| ƒ|d< t	| ƒ�rÊd| v �rX| d }n| d }t
| d | ƒ�r˜| d | d |d< dg| d | d< ||d< t|| ƒ\|d< |d < t| ƒ�rêd!|d< n t
| ƒ�rê| d |d< dg| d< d"}d"}d#| v �rLd| v �rL| d# D ]<}| d | }tttƒ|ƒ�r|d$ }t|ƒ�r|d$ }�qt|ƒ|d%< t|ƒ|d&< t
| ƒ�r˜t	| ƒ�r˜d| v �r˜| d |d'< dg| d< |S )(z\
    name,begintitle,endtitle,argname
    ctype,rctype,maxnofargs,nofoptargs,returncptr
    zcb_%s_in_%srb   r@   )rb   Ú
returncptrrÛ   rã   rä   z	%s(%s,%s)ZcallbacknameZexternZstaticr•   rß   rÝ   rà   rm   r`   Zrctyper   z3
#ifdef F2PY_CB_RETURNCOMPLEX
return_value=
#endif
rõ   zreturn_value=rÇ   rÈ   Z	strlengthra   rc   rË   ræ   rå   rÉ   rÊ   z8
#ifdef F2PY_CB_RETURNCOMPLEX
#ctype#
#else
void
#endif
r   Úargsr   r¶   r·   Zroutnote)rÕ   rW   rè   ré   r
   rÔ   r×   ru   r   rg   rØ   r   Zl_orr‰   r–   rÓ   rw   )rì   Zumr‹   rä   rn   Znofargsr·   rl   r]   r]   r^   r   Í  sz    ÿ

þÿ












r   c                 C   sâ   | t |ƒdœ}t|ƒrd|d< |d tv rFt|d  |d< t|ƒ|d< |d tv rfdt|d   |d< t|ƒr€t|t| |ƒƒ}nt|ƒrœt	|ƒ|d< d	|d
< t
| |ƒ\|d< |d< t|ƒrÐ|d |d< dg|d< t| |ƒ|d< |S )N)r³   rm   r   rm   r¹   r±   rÇ   rÈ   rz   rD   r|   rÉ   rÊ   rË   ræ   Z	arrdocstr)r
   r¯   rÑ   r²   r×   r‚   rÐ   r   rv   r   r   rØ   r   )rn   rl   r‹   r]   r]   r^   r     s&    
r   )r   )N)/Ú__doc__r@   r   ÚversionZf2py_versionrK   ro   rO   Zcrackfortranr   r   Z	_isocbindr   r   r   ZauxfuncsÚ__all__r†   rš   r›   rX   rÑ   r™   rÍ   rN   Úupdater   rÛ   rL   rM   rY   r_   r×   r
   rr   r   r   r   r   r   r²   r   r   r   r   r   r   r]   r]   r]   r^   Ú<module>   s&  ðîîôÿýþþÿð


ï3
=J#jQ
R