
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a#, ã                   @   s  d dddddddgZ dd	lZdd	lZdd	lZdd	lZdd	lZdd	lZdd	lZdd	l	Z
dd	lZdd
lmZ dZd	add„ ZeejjƒZdZdd„ ZdZdd„ ZdddddddgZdddddd d!d"d#d$d%d&gZg ZeD ]Ze e ¡ ¡ qÒdtd'd(„Z dud)d*„Z!d	d	d	d	d+œZ"e #d,ej$¡Z%d-d.„ Z&d/d0„ Z'e #d1ej$¡Z(e #d2ej)ej$B ¡Z*e #d3ej+ej$B ¡Z,d4d5„ Z-e #d6ej+ej$B ¡Z.d7d8„ Z/d9d:„ Z0e #d;¡Z1e #d<¡Z2e #d=¡Z3e #d>¡Z4d?d@„ Z5e #dA¡Z6dBdC„ Z7dDdE„ Z8dFdG„ Z9e #dHej$¡Z:dIdJ„ Z;dKdL„ Z<dMdN„ Z=dOdP„ Z>e #dQej$¡Z?dRdS„ Z@dTdU„ ZAdVdW„ ZBdXdY„ ZCdZZDe #d[¡ZEd\d]„ ZFd^d_„ ZGd`da„ ZHdbdc„ ZIG ddd „ d ƒZJG ded„ dƒZKG dfd„ deKƒZLdgdh„ ZMdidj„ ZNG dkdl„ dlƒZOG dmd„ dƒZPG dnd„ deQƒZRG dod„ dePƒZSdpdq„ ZTG drd„ deSƒZUG dsd„ deSƒZVd	S )vÚCookieÚ	CookieJarÚCookiePolicyÚDefaultCookiePolicyÚFileCookieJarÚLWPCookieJarÚ	LoadErrorÚMozillaCookieJaré    N)ÚtimegmFc                  G   s(   t sd S tsdd l}| d¡atj | Ž S )Nr	   zhttp.cookiejar)ÚdebugÚloggerÚloggingZ	getLogger)Úargsr   © r   ú3/opt/alt/python38/lib64/python3.8/http/cookiejar.pyÚ_debug,   s    
r   zQa filename was not supplied (nor was the CookieJar instance initialised with one)c                  C   sJ   dd l } dd l}dd l}|  ¡ }| d |¡ | ¡ }|jd| dd� d S )Nr	   zhttp.cookiejar bug!
%sé   )Ú
stacklevel)ÚioÚwarningsÚ	tracebackÚStringIOÚ	print_excÚgetvalueÚwarn)r   r   r   ÚfÚmsgr   r   r   Ú_warn_unhandled_exception:   s
    r   i²  c                 C   s¨   | d d… \}}}}}}|t kr d|  kr4dkr n nhd|  krLdkr n nPd|  krddkr n n8d|  kr|dkr n n d|  kr”dkr n nt| ƒS d S d S )	Né   é   é   é   r	   é   é;   é=   )Ú
EPOCH_YEARr
   )ÚttÚyearÚmonthZmdayÚhourÚminÚsecr   r   r   Ú_timegmI   s&    8 ÿÿ
 ÿÿ
 ÿÿ
r,   ZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc                 C   s@   | d krt j  ¡ }nt j  | ¡}d|j|j|j|j|j|jf S )Nz%04d-%02d-%02d %02d:%02d:%02dZ)	ÚdatetimeÚutcnowÚutcfromtimestampr'   r(   Údayr)   ÚminuteÚsecond©ÚtZdtr   r   r   Ú	time2isozW   s         ÿr5   c                 C   sR   | d krt j  ¡ }nt j  | ¡}dt| ¡  |jt|jd  |j|j	|j
|jf S )Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr   )r-   r.   r/   ÚDAYSZweekdayr0   ÚMONTHSr(   r'   r)   r1   r2   r3   r   r   r   Útime2netscapej   s    
     þr8   )ZGMTÚUTCZUTÚZz^([-+])?(\d\d?):?(\d\d)?$c                 C   sj   d }| t krd}nTt | ¡}|rfdt| d¡ƒ }| d¡rR|dt| d¡ƒ  }| d¡dkrf| }|S )Nr	   i  r   é   é<   r   ú-)Ú	UTC_ZONESÚTIMEZONE_REÚsearchÚintÚgroup)ÚtzÚoffsetÚmr   r   r   Úoffset_from_tz_string�   s    

rF   c                 C   sŽ  t |ƒ}|tjkrd S zt | ¡ ¡d }W n^ tk
rŠ   zt |ƒ}W n tk
r`   Y Y d S X d|  krvdkr€n n|}nY d S Y nX |d kr˜d}|d kr¤d}|d kr°d}t | ƒ} t |ƒ}t |ƒ}t |ƒ}|dk �r6t t ¡ ¡d }|d }	|}
|| |	 }|	|
 }	t	|	ƒdk�r6|	dk�r.|d }n|d }t
||| ||||fƒ}|d k	�rŠ|d k�rdd}| ¡ }t|ƒ}|d k�r‚d S || }|S )Nr   r    r	   iè  éd   é2   r9   )rA   r-   ZMAXYEARÚMONTHS_LOWERÚindexÚlowerÚ
ValueErrorÚtimeÚ	localtimeÚabsr,   ÚupperrF   )r0   ÚmonÚyrÚhrr*   r+   rC   ZimonZcur_yrrE   Ztmpr4   rD   r   r   r   Ú	_str2time�   sV    

   

 



rT   zV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*aò  ^
    (\d\d?)            # day
       (?:\s+|[-\/])
    (\w+)              # month
        (?:\s+|[-\/])
    (\d+)              # year
    (?:
          (?:\s+|:)    # separator before clock
       (\d\d?):(\d\d)  # hour:min
       (?::(\d\d))?    # optional seconds
    )?                 # optional clock
       \s*
    (?:
       ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone
       \s*
    )?
    (?:
       \(\w+\)         # ASCII representation of timezone in parens.
       \s*
    )?$c                 C   sÜ   t  | ¡}|rl| ¡ }t |d  ¡ ¡d }t|d ƒ|t|d ƒt|d ƒt|d ƒt|d ƒf}t|ƒS |  	¡ } t
 d| d¡} d gd \}}}}}}	}
t | ¡}|d k	rÄ| ¡ \}}}}}}	}
nd S t||||||	|
ƒS )	Nr   r   r	   r;   é   é   Ú é   )ÚSTRICT_DATE_REr@   ÚgroupsrI   rJ   rK   rA   Úfloatr,   ÚlstripÚ
WEEKDAY_REÚsubÚLOOSE_HTTP_DATE_RErT   )ÚtextrE   ÚgrQ   r&   r0   rR   rS   r*   r+   rC   r   r   r   Ú	http2timeá   s$    

 
 
ÿ
rb   aÖ  ^
    (\d{4})              # year
       [-\/]?
    (\d\d?)              # numerical month
       [-\/]?
    (\d\d?)              # day
   (?:
         (?:\s+|[-:Tt])  # separator before clock
      (\d\d?):?(\d\d)    # hour:min
      (?::?(\d\d(?:\.\d*)?))?  # optional seconds (and fractional)
   )?                    # optional clock
      \s*
   (?:
      ([-+]?\d\d?:?(:?\d\d)?
       |Z|z)             # timezone  (Z is "zero meridian", i.e. GMT)
      \s*
   )?$c           
      C   sd   |   ¡ } d gd \}}}}}}}t | ¡}|d k	rL| ¡ \}}}}}}}}	nd S t|||||||ƒS )NrX   )r\   ÚISO_DATE_REr@   rZ   rT   )
r`   r0   rQ   rR   rS   r*   r+   rC   rE   Ú_r   r   r   Úiso2time+  s    
re   c                 C   s*   |   d¡\}}| jd |… | j|d …  S )Nr	   )ÚspanÚstring)ÚmatchÚstartÚendr   r   r   Ú	unmatchedL  s    rk   z^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c           
      C   s  g }| D ]ô}|}g }|rît  |¡}|r¤t|ƒ}| d¡}t |¡}|rft|ƒ}| d¡}t d|¡}n.t |¡}|r�t|ƒ}| d¡}| ¡ }nd }| 	||f¡ q| 
¡  d¡rÖ| 
¡ dd … }|rÐ| 	|¡ g }qt dd|¡\}}	|}q|r| 	|¡ q|S )Nr   z\1ú,z^[=\s;]*rW   )ÚHEADER_TOKEN_REr@   rk   rB   ÚHEADER_QUOTED_VALUE_REÚHEADER_ESCAPE_REr^   ÚHEADER_VALUE_REÚrstripÚappendr\   Ú
startswithÚreÚsubn)
Zheader_valuesÚresultr`   Z	orig_textÚpairsrE   ÚnameÚvalueZnon_junkZnr_junk_charsr   r   r   Úsplit_header_wordsU  s>    .






 
 rz   ú([\"\\])c                 C   s|   g }| D ]h}g }|D ]F\}}|d k	rPt  d|¡sDt d|¡}d| }d||f }| |¡ q|r| d |¡¡ qd |¡S )Nz^\w+$ú\\\1z"%s"ú%s=%sú; ú, )rt   r@   ÚHEADER_JOIN_ESCAPE_REr^   rr   Újoin)ZlistsÚheadersrw   ÚattrÚkÚvr   r   r   Újoin_header_words«  s     r†   c                 C   s0   |   d¡r| dd … } |  d¡r,| d d… } | S )Nú"r   éÿÿÿÿ)rs   Úendswith©r`   r   r   r   Ústrip_quotesÄ  s
    

r‹   c                 C   sú   d}g }| D ]è}g }d}t | d¡ƒD ]°\}}| ¡ }| d¡\}}	}
| ¡ }|sb|dkr& qØnq&|	rn|
 ¡ nd }
|dkrÈ| ¡ }||krŽ|}|dkr¬|
d k	r¦t|
ƒ}
d}n|dkrÈ|
d k	rÈtt|
ƒƒ}
| ||
f¡ q&|r|sê| d	¡ | |¡ q|S )
N)ÚexpiresÚdomainÚpathÚsecureÚversionÚportúmax-ageFú;ú=r	   r�   TrŒ   )r�   Ú0)Ú	enumerateÚsplitÚstripÚ	partitionrK   r‹   rb   rr   )Z
ns_headersZknown_attrsrv   Z	ns_headerrw   Úversion_setZiiZparamÚkeyÚsepÚvalÚlcr   r   r   Úparse_ns_headersË  s>    
rŸ   z\.\d+$c                 C   s:   t  | ¡rdS | dkrdS | d dks2| d dkr6dS dS )NFrW   r	   Ú.rˆ   T©ÚIPV4_REr@   rŠ   r   r   r   Úis_HDN  s    
r£   c                 C   sl   |   ¡ } |  ¡ }| |krdS t| ƒs(dS |  |¡}|dksB|dkrFdS | d¡sTdS t|dd … ƒshdS dS )NTFrˆ   r	   r    r   )rK   r£   Úrfindrs   )ÚAÚBÚir   r   r   Údomain_match  s    

r¨   c                 C   s   t  | ¡rdS dS ©NFTr¡   rŠ   r   r   r   Úliberal_is_HDNF  s    
rª   c                 C   s`   |   ¡ } |  ¡ }t| ƒr t|ƒs0| |kr,dS dS | d¡}|rL|  |¡rLdS |s\| |kr\dS dS )NTFr    )rK   rª   rs   r‰   )r¥   r¦   Úinitial_dotr   r   r   Úuser_domain_matchP  s    
r¬   z:\d+$c                 C   sB   |   ¡ }tj |¡d }|dkr,|  dd¡}t d|d¡}| ¡ S )Nr   rW   ZHost)Úget_full_urlÚurllibÚparseZurlparseZ
get_headerÚcut_port_rer^   rK   )ÚrequestÚurlÚhostr   r   r   Úrequest_hoste  s    r´   c                 C   s4   t | ƒ }}| d¡dkr,t |¡s,|d }||fS )Nr    rˆ   ú.local)r´   Úfindr¢   r@   )r±   ÚerhnÚreq_hostr   r   r   Úeff_request_hostu  s    r¹   c                 C   s4   |   ¡ }tj |¡}t|jƒ}| d¡s0d| }|S )Nú/)r­   r®   r¯   ZurlsplitÚescape_pathrŽ   rs   )r±   r²   ÚpartsrŽ   r   r   r   Úrequest_path€  s    

r½   c                 C   s`   | j }| d¡}|dkrX||d d … }zt|ƒ W q\ tk
rT   td|ƒ Y d S X nt}|S )Nú:r	   r   znonnumeric port: '%s')r³   r¶   rA   rL   r   ÚDEFAULT_HTTP_PORT)r±   r³   r§   r‘   r   r   r   Úrequest_portŠ  s    


rÀ   z%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])c                 C   s   d|   d¡ ¡  S )Nz%%%sr   )rB   rP   )rh   r   r   r   Úuppercase_escaped_charœ  s    rÁ   c                 C   s   t j | t¡} t t| ¡} | S ©N)r®   r¯   ZquoteÚHTTP_PATH_SAFEÚESCAPED_CHAR_REr^   rÁ   )rŽ   r   r   r   r»   ž  s    
r»   c                 C   sP   |   d¡}|dkrL| |d d … }|  d¡}t| ƒrL|dksD|dkrLd| S | S )Nr    r	   r   Zlocal)r¶   r£   )Úhr§   Úbr   r   r   Úreach¬  s    

rÇ   c                 C   s$   t | ƒ}t|t| jƒƒsdS dS d S ©NTF)r´   r¨   rÇ   Zorigin_req_host)r±   r¸   r   r   r   Úis_third_partyÏ  s    
rÉ   c                   @   sJ   e Zd Zddd„Zdd„ Zddd„Zd	d
„ Zddd„Zdd„ Zdd„ Z	dS )r   Fc                 C   s°   |d k	rt |ƒ}|d k	r$t t|ƒƒ}|d kr<|dkr<tdƒ‚|| _|| _|| _|| _|| _| ¡ | _	|| _
|| _|	| _|
| _|| _|| _|| _|| _|| _|| _t |¡| _d S )NTz-if port is None, port_specified must be false)rA   r[   rL   r�   rx   ry   r‘   Úport_specifiedrK   r�   Údomain_specifiedÚdomain_initial_dotrŽ   Úpath_specifiedr�   rŒ   ÚdiscardÚcommentÚcomment_urlÚrfc2109ÚcopyÚ_rest)Úselfr�   rx   ry   r‘   rÊ   r�   rË   rÌ   rŽ   rÍ   r�   rŒ   rÎ   rÏ   rÐ   ÚrestrÑ   r   r   r   Ú__init__ò  s.      
zCookie.__init__c                 C   s
   || j kS rÂ   ©rÓ   )rÔ   rx   r   r   r   Úhas_nonstandard_attr  s    zCookie.has_nonstandard_attrNc                 C   s   | j  ||¡S rÂ   )rÓ   Úget)rÔ   rx   Údefaultr   r   r   Úget_nonstandard_attr  s    zCookie.get_nonstandard_attrc                 C   s   || j |< d S rÂ   r×   )rÔ   rx   ry   r   r   r   Úset_nonstandard_attr   s    zCookie.set_nonstandard_attrc                 C   s,   |d krt   ¡ }| jd k	r(| j|kr(dS dS rÈ   )rM   rŒ   )rÔ   Únowr   r   r   Ú
is_expired#  s
     zCookie.is_expiredc                 C   sX   | j d krd}n
d| j  }| j| | j }| jd k	rFd| j| jf }n| j}d||f S )NrW   r¾   r}   z<Cookie %s for %s>)r‘   r�   rŽ   ry   rx   )rÔ   ÚpÚlimitZ	namevaluer   r   r   Ú__str__)  s    
 

zCookie.__str__c                 C   sl   g }dD ]$}t | |ƒ}| d|t|ƒf ¡ q| dt| jƒ ¡ | dt| jƒ ¡ d| jjd |¡f S )N)r�   rx   ry   r‘   rÊ   r�   rË   rÌ   rŽ   rÍ   r�   rŒ   rÎ   rÏ   rÐ   r}   zrest=%sz
rfc2109=%sz%s(%s)r   )Úgetattrrr   ÚreprrÓ   rÑ   Ú	__class__Ú__name__r�   )rÔ   r   rx   rƒ   r   r   r   Ú__repr__3  s    
zCookie.__repr__)F)N)N)
rå   Ú
__module__Ú__qualname__rÖ   rØ   rÛ   rÜ   rÞ   rá   ræ   r   r   r   r   r   à  s    ö
*


c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c                 C   s
   t ƒ ‚d S rÂ   ©ÚNotImplementedError©rÔ   Úcookier±   r   r   r   Úset_okK  s    zCookiePolicy.set_okc                 C   s
   t ƒ ‚d S rÂ   ré   rë   r   r   r   Ú	return_okT  s    zCookiePolicy.return_okc                 C   s   dS ©NTr   )rÔ   r�   r±   r   r   r   Údomain_return_okX  s    zCookiePolicy.domain_return_okc                 C   s   dS rï   r   )rÔ   rŽ   r±   r   r   r   Úpath_return_ok]  s    zCookiePolicy.path_return_okN)rå   rç   rè   rí   rî   rð   rñ   r   r   r   r   r   B  s   		c                   @   sø   e Zd ZdZdZdZdZeeB Zdddddddddedddfd	d
„Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ ZdS )7r   r   r   rU   r	   NTF)ZhttpsZwssc                 C   sv   || _ || _|| _|| _|| _|| _|	| _|
| _|| _|| _	|| _
|d k	rVt|ƒ| _nd| _|d k	rlt|ƒ}|| _d S )Nr   )ÚnetscapeÚrfc2965Úrfc2109_as_netscapeÚhide_cookie2Ústrict_domainÚstrict_rfc2965_unverifiableÚstrict_ns_unverifiableÚstrict_ns_domainÚstrict_ns_set_initial_dollarÚstrict_ns_set_pathÚsecure_protocolsÚtupleÚ_blocked_domainsÚ_allowed_domains)rÔ   Úblocked_domainsÚallowed_domainsrò   ró   rô   rõ   rö   r÷   rø   rù   rú   rû   rü   r   r   r   rÖ   m  s"    zDefaultCookiePolicy.__init__c                 C   s   | j S rÂ   )rþ   ©rÔ   r   r   r   r   �  s    z#DefaultCookiePolicy.blocked_domainsc                 C   s   t |ƒ| _d S rÂ   )rý   rþ   )rÔ   r   r   r   r   Úset_blocked_domains“  s    z'DefaultCookiePolicy.set_blocked_domainsc                 C   s    | j D ]}t||ƒr dS qdS rÈ   )rþ   r¬   )rÔ   r�   Zblocked_domainr   r   r   Ú
is_blocked—  s    

zDefaultCookiePolicy.is_blockedc                 C   s   | j S rÂ   )rÿ   r  r   r   r   r  �  s    z#DefaultCookiePolicy.allowed_domainsc                 C   s   |d k	rt |ƒ}|| _d S rÂ   )rý   rÿ   )rÔ   r  r   r   r   Úset_allowed_domains   s    z'DefaultCookiePolicy.set_allowed_domainsc                 C   s.   | j d krdS | j D ]}t||ƒr dS qdS r©   )rÿ   r¬   )rÔ   r�   Zallowed_domainr   r   r   Úis_not_allowed¦  s    


z"DefaultCookiePolicy.is_not_allowedc                 C   s@   t d|j|jƒ dD ]&}d| }t| |ƒ}|||ƒs dS qdS )Nú - checking cookie %s=%s)r�   Úverifiabilityrx   rŽ   r�   r‘   Zset_ok_FT©r   rx   ry   râ   ©rÔ   rì   r±   ÚnZfn_nameÚfnr   r   r   rí   ®  s    

zDefaultCookiePolicy.set_okc                 C   sZ   |j d krtd|j|jƒ dS |j dkr:| js:tdƒ dS |j dkrV| jsVtdƒ dS dS )Nz0   Set-Cookie2 without version attribute (%s=%s)Fr	   ú$   RFC 2965 cookies are switched offú$   Netscape cookies are switched offT)r�   r   rx   ry   ró   rò   rë   r   r   r   Úset_ok_versionÁ  s    
 ÿz"DefaultCookiePolicy.set_ok_versionc                 C   sJ   |j rFt|ƒrF|jdkr*| jr*tdƒ dS |jdkrF| jrFtdƒ dS dS ©Nr	   z>   third-party RFC 2965 cookie during unverifiable transactionFz>   third-party Netscape cookie during unverifiable transactionT©ZunverifiablerÉ   r�   r÷   r   rø   rë   r   r   r   Úset_ok_verifiabilityÐ  s    z(DefaultCookiePolicy.set_ok_verifiabilityc                 C   s0   |j dkr,| jr,|j d¡r,td|jƒ dS dS )Nr	   ú$z'   illegal name (starts with '$'): '%s'FT)r�   rú   rx   rs   r   rë   r   r   r   Úset_ok_nameÜ  s    
ÿzDefaultCookiePolicy.set_ok_namec                 C   sL   |j rHt|ƒ}|jdks(|jdkrH| jrH|  |j|¡sHtd|j|ƒ dS dS )Nr	   z7   path attribute %s is not a prefix of request path %sFT)rÍ   r½   r�   rû   rñ   rŽ   r   )rÔ   rì   r±   Úreq_pathr   r   r   Úset_ok_pathå  s    
ÿÿþ ÿzDefaultCookiePolicy.set_ok_pathc                 C   sê  |   |j¡rtd|jƒ dS |  |j¡r8td|jƒ dS |j�ræt|ƒ\}}|j}| jrÌ| d¡dkrÌ| d¡}| dd|¡}|dkrÌ||d d … }||d |… }	|	 	¡ dkrÌt
|ƒdkrÌtd	|ƒ dS | d¡rä|dd … }
n|}
|
 d¡dk}|�s|d
k�rtd|ƒ dS |jdk�rX| |¡�sX| d¡�sXd|  |¡�sXtd||ƒ dS |jdk�sr| j| j@ �rŽt||ƒ�sŽtd||ƒ dS |jdk�s¨| j| j@ �ræ|d t
|ƒ … }| d¡dk�ræt |¡�sætd||ƒ dS dS )Nú"   domain %s is in user block-listFú&   domain %s is not in user allow-listr    r   r	   r   )ÚcoZacZcomZeduZorgZnetZgovZmilrA   ZaeroZbizÚcatZcoopÚinfoZjobsZmobiZmuseumrx   ZproZtravelZeuz&   country-code second level domain %srµ   z/   non-local domain %s contains no embedded dotzO   effective request-host %s (even with added initial dot) does not end with %sz5   effective request-host %s does not domain-match %sz.   host prefix %s for domain %s contains a dotT)r  r�   r   r  rË   r¹   rö   Úcountr¤   rK   Úlenrs   r¶   r�   r‰   rù   ÚDomainRFC2965Matchr¨   ÚDomainStrictNoDotsr¢   r@   )rÔ   rì   r±   r¸   r·   r�   r§   ÚjZtldZsldZundotted_domainZembedded_dotsZhost_prefixr   r   r   Úset_ok_domainð  s|    

ý

ÿÿþ þ
ÿ ÿ
ÿÿ ÿz!DefaultCookiePolicy.set_ok_domainc              	   C   sˆ   |j r„t|ƒ}|d krd}nt|ƒ}|j d¡D ]@}zt|ƒ W n" tk
rb   td|ƒ Y  dS X ||kr0 q„q0td||jƒ dS dS )NÚ80rl   z   bad port %s (not numeric)Fz$   request port (%s) not found in %sT)rÊ   rÀ   Ústrr‘   r—   rA   rL   r   ©rÔ   rì   r±   Zreq_portrß   r   r   r   Úset_ok_port+  s&    

 ÿzDefaultCookiePolicy.set_ok_portc                 C   s@   t d|j|jƒ dD ]&}d| }t| |ƒ}|||ƒs dS qdS )Nr  )r�   r  r�   rŒ   r‘   r�   Z
return_ok_FTr	  r
  r   r   r   rî   @  s    	

zDefaultCookiePolicy.return_okc                 C   s<   |j dkr| jstdƒ dS |j dkr8| js8tdƒ dS dS )Nr	   r  Fr  T)r�   ró   r   rò   rë   r   r   r   Úreturn_ok_versionR  s    z%DefaultCookiePolicy.return_ok_versionc                 C   sJ   |j rFt|ƒrF|jdkr*| jr*tdƒ dS |jdkrF| jrFtdƒ dS dS r  r  rë   r   r   r   Úreturn_ok_verifiability[  s    z+DefaultCookiePolicy.return_ok_verifiabilityc                 C   s"   |j r|j| jkrtdƒ dS dS )Nz(   secure cookie with non-secure requestFT)r�   Útyperü   r   rë   r   r   r   Úreturn_ok_secureg  s    z$DefaultCookiePolicy.return_ok_securec                 C   s   |  | j¡rtdƒ dS dS )Nz   cookie expiredFT)rÞ   Ú_nowr   rë   r   r   r   Úreturn_ok_expiresm  s    z%DefaultCookiePolicy.return_ok_expiresc                 C   sN   |j rJt|ƒ}|d krd}|j  d¡D ]}||kr& qJq&td||j ƒ dS dS )Nr"  rl   z0   request port %s does not match cookie port %sFT)r‘   rÀ   r—   r   r$  r   r   r   Úreturn_ok_ports  s     ÿz"DefaultCookiePolicy.return_ok_portc                 C   s®   t |ƒ\}}|j}|r*| d¡s*d| }n|}|jdkr^| j| j@ r^|js^||kr^tdƒ dS |jdkr‚t||ƒs‚td||ƒ dS |jdkrªd|  	|¡sªtd||ƒ dS dS )Nr    r	   zQ   cookie with unspecified domain does not string-compare equal to request domainFzQ   effective request-host name %s does not domain-match RFC 2965 cookie domain %sz;   request-host %s does not match Netscape cookie domain %sT)
r¹   r�   rs   r�   rù   ÚDomainStrictNonDomainrË   r   r¨   r‰   )rÔ   rì   r±   r¸   r·   r�   Ú	dotdomainr   r   r   Úreturn_ok_domain�  s6    


ÿþþ ÿ ÿz$DefaultCookiePolicy.return_ok_domainc                 C   s˜   t |ƒ\}}| d¡sd| }| d¡s0d| }|rH| d¡sHd| }n|}| |¡sd| |¡sddS |  |¡r|td|ƒ dS |  |¡r”td|ƒ dS dS )Nr    Fr  r  T)r¹   rs   r‰   r  r   r  )rÔ   r�   r±   r¸   r·   r.  r   r   r   rð   œ  s"    






z$DefaultCookiePolicy.domain_return_okc                 C   sb   t d|ƒ t|ƒ}t|ƒ}||kr&dS | |¡rR| d¡sN|||d … dkrRdS t d||ƒ dS )Nz- checking cookie path=%sTrº   r   z  %s does not path-match %sF)r   r½   r  rs   r‰   )rÔ   rŽ   r±   r  Zpathlenr   r   r   rñ   ¶  s    

ÿÿz"DefaultCookiePolicy.path_return_ok)rå   rç   rè   r  r-  r  ZDomainLiberalZDomainStrictrÖ   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   c  sR     õ
#	;	c                 C   s   t |  ¡ ƒ}t| j|ƒS rÂ   )ÚsortedÚkeysÚmaprÙ   )Zadictr1  r   r   r   Úvals_sorted_by_keyÃ  s    r3  c              	   c   sV   t | ƒ}|D ]D}d} z
|j W n tk
r2   Y nX d} t|ƒE d H  | s|V  qd S r©   )r3  ÚitemsÚAttributeErrorÚ
deepvalues)ÚmappingÚvaluesÚobjr   r   r   r6  Ç  s    
r6  c                   @   s   e Zd ZdS )ÚAbsentN©rå   rç   rè   r   r   r   r   r:  Ù  s    r:  c                   @   sø   e Zd Ze d¡Ze d¡Ze d¡Ze d¡Ze d¡Z	e dej
¡Zd2dd	„Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd3d$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Z dS )4r   z\Wr{   z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)Nc                 C   s(   |d krt ƒ }|| _t ¡ | _i | _d S rÂ   )r   Ú_policyÚ
_threadingÚRLockÚ_cookies_lockÚ_cookies©rÔ   Úpolicyr   r   r   rÖ   ê  s
    
zCookieJar.__init__c                 C   s
   || _ d S rÂ   )r<  rA  r   r   r   Ú
set_policyò  s    zCookieJar.set_policyc                 C   sŒ   g }| j  ||¡sg S td|ƒ | j| }| ¡ D ]T}| j  ||¡sFq2|| }| ¡ D ].}| j  ||¡srtdƒ qVtdƒ | |¡ qVq2|S )Nz!Checking %s for cookies to returnz   not returning cookiez   it's a match)	r<  rð   r   r@  r1  rñ   r8  rî   rr   )rÔ   r�   r±   ÚcookiesZcookies_by_pathrŽ   Zcookies_by_namerì   r   r   r   Ú_cookies_for_domainõ  s     

zCookieJar._cookies_for_domainc                 C   s*   g }| j  ¡ D ]}| |  ||¡¡ q|S rÂ   )r@  r1  ÚextendrE  )rÔ   r±   rD  r�   r   r   r   Ú_cookies_for_request  s    zCookieJar._cookies_for_requestc           	      C   s<  |j dd„ dd� d}g }|D �]}|j}|sHd}|dkrH| d| ¡ |jd k	rz| j |j¡rz|dkrz| j d|j¡}n|j}|jd kr˜| |j¡ n| d	|j|f ¡ |dkr|j	rÊ| d
|j
 ¡ |j d¡�r|j}|jsú| d¡rú|dd … }| d| ¡ |jd k	rd}|j�r,|d|j  }| |¡ q|S )Nc                 S   s
   t | jƒS rÂ   )r  rŽ   )Úar   r   r   Ú<lambda>  ó    z)CookieJar._cookie_attrs.<locals>.<lambda>T)r›   ÚreverseFr	   z$Version=%sr|   r}   z
$Path="%s"r    r   z$Domain="%s"z$Portz="%s")Úsortr�   rr   ry   Únon_word_rer@   Úquote_rer^   rx   rÍ   rŽ   r�   rs   rÌ   r‘   rÊ   )	rÔ   rD  rš   Úattrsrì   r�   ry   r�   rß   r   r   r   Ú_cookie_attrs  sF    


ÿÿ
ÿ
zCookieJar._cookie_attrsc                 C   s¸   t dƒ | j ¡  zŒtt ¡ ƒ | j_| _|  |¡}|  	|¡}|r^| 
d¡s^| dd |¡¡ | jjrœ| jjsœ| 
d¡sœ|D ]}|jdkr|| dd¡  qœq|W 5 | j ¡  X |  ¡  d S )NÚadd_cookie_headerr   r~   ZCookie2r   z$Version="1")r   r?  ÚacquireÚreleaserA   rM   r<  r*  rG  rP  Z
has_headerZadd_unredirected_headerr�   ró   rõ   r�   Úclear_expired_cookies)rÔ   r±   rD  rO  rì   r   r   r   rQ  I  s*    



 ÿÿ

zCookieJar.add_cookie_headerc              
   C   s’  g }d}d}|D �]z}|d \}}d}d}	i }
i }|dd … D �]0\}}|  ¡ }||ks`||krd|}||krx|d krxd}||
kr‚q>|dkr¬|d kr¤tdƒ d}	 �qr|  ¡ }|d	krÌ|rºq>|d krÌtd
ƒ q>|dk�r d}zt|ƒ}W n* tk
�r   tdƒ d}	Y  �qrY nX d	}| j| }||k�s4||k�rh|d k�r^|dk�r^td| ƒ d}	 �qr||
|< q>|||< q>|	�rzq| |||
|f¡ q|S )N)rÎ   r�   )r�   rŒ   r’   r�   rŽ   r‘   rÏ   Ú
commenturlr	   Fr   Tr�   z%   missing value for domain attributerŒ   zM   missing or invalid value for expires attribute: treating as session cookier’   z?   missing or invalid (non-numeric) value for max-age attribute)r‘   rÏ   rU  z!   missing value for %s attribute)rK   r   rA   rL   r*  rr   )rÔ   Ú	attrs_setÚcookie_tuplesÚboolean_attrsÚvalue_attrsZcookie_attrsrx   ry   Zmax_age_setZ
bad_cookieÚstandardrÕ   r„   r…   rž   r   r   r   Ú_normalized_cookie_tuplesj  sh    




ÿ

z#CookieJar._normalized_cookie_tuplesc                 C   s&  |\}}}}|  dt¡}|  dt¡}|  dt¡}	|  dt¡}
|  dd ¡}|d k	rtzt|ƒ}W n tk
rr   Y d S X |  dd¡}|  dd¡}|  d	d ¡}|  d
d ¡}|tk	rÂ|dkrÂd}t|ƒ}nXd}t|ƒ}| d¡}|dk�r|dkrø|d |… }n|d |d … }t|ƒdk�rd}|tk	}d}|�r:t| 	d¡ƒ}|tk�rVt
|ƒ\}}|}n| 	d¡�sjd| }d}|	tk	�r |	d k�rŒt|ƒ}	nd}t dd|	¡}	nd }	|
tk�r¸d }
d}nH|
| jk�r z|  |||¡ W n tk
�rì   Y nX td|||ƒ d S t||||	||||||||
||||ƒS )Nr�   rŽ   r‘   rŒ   r�   r�   FrÎ   rÏ   rU  rW   Trº   rˆ   r	   r   r    z\s+z2Expiring cookie, domain='%s', path='%s', name='%s')rÙ   r:  rA   rL   r»   r½   r¤   r  Úboolrs   r¹   rÀ   rt   r^   r*  ÚclearÚKeyErrorr   r   )rÔ   Útupr±   rx   ry   rZ  rÕ   r�   rŽ   r‘   rŒ   r�   r�   rÎ   rÏ   rÐ   rÍ   r§   rË   rÌ   r¸   r·   rÊ   r   r   r   Ú_cookie_from_cookie_tupleË  s”    


 




  ÿ     öz#CookieJar._cookie_from_cookie_tuplec                 C   s6   |   |¡}g }|D ]}|  ||¡}|r| |¡ q|S rÂ   )r[  r`  rr   )rÔ   rV  r±   rW  rD  r_  rì   r   r   r   Ú_cookies_from_attrs_set'  s    
 z!CookieJar._cookies_from_attrs_setc                 C   sH   t | jdd ƒ}|d kr | jj }|D ]}|jdkr$d|_|r$d|_q$d S )Nrô   r   Tr	   )râ   r<  ró   r�   rÑ   )rÔ   rD  Zrfc2109_as_nsrì   r   r   r   Ú_process_rfc2109_cookies0  s    

z"CookieJar._process_rfc2109_cookiesc                 C   s:  |  ¡ }| dg ¡}| dg ¡}tt ¡ ƒ | j_| _| jj}| jj}|sN|rf|sV|rf|s^|rf|sj|sjg S z|  t	|ƒ|¡}W n t
k
rœ   tƒ  g }Y nX |�r6|�r6z|  t|ƒ|¡}	W n t
k
rÜ   tƒ  g }	Y nX |  |	¡ |�r&i }
|D ]}d |
|j|j|jf< qö|
fdd„}t||	ƒ}	|	�r6| |	¡ |S )NzSet-Cookie2z
Set-Cookiec                 S   s   | j | j| jf}||kS rÂ   )r�   rŽ   rx   )Z	ns_cookieÚlookupr›   r   r   r   Úno_matching_rfc2965i  s    z3CookieJar.make_cookies.<locals>.no_matching_rfc2965)r  Zget_allrA   rM   r<  r*  ró   rò   ra  rz   Ú	Exceptionr   rŸ   rb  r�   rŽ   rx   ÚfilterrF  )rÔ   Úresponser±   r‚   Zrfc2965_hdrsZns_hdrsró   rò   rD  Z
ns_cookiesrc  rì   rd  r   r   r   Úmake_cookies<  s^    ÿÿþþýý ÿ
 ÿ



zCookieJar.make_cookiesc                 C   sN   | j  ¡  z2tt ¡ ƒ | j_| _| j ||¡r:|  |¡ W 5 | j  ¡  X d S rÂ   )	r?  rR  rS  rA   rM   r<  r*  rí   Ú
set_cookierë   r   r   r   Úset_cookie_if_oks  s    
zCookieJar.set_cookie_if_okc                 C   sl   | j }| j ¡  zJ|j|kr&i ||j< ||j }|j|krDi ||j< ||j }|||j< W 5 | j ¡  X d S rÂ   )r@  r?  rR  rS  r�   rŽ   rx   )rÔ   rì   ÚcZc2Zc3r   r   r   ri  €  s    

 


 

zCookieJar.set_cookiec                 C   sb   t d| ¡ ƒ | j ¡  z8|  ||¡D ]&}| j ||¡r&t d|ƒ |  |¡ q&W 5 | j ¡  X d S )Nzextract_cookies: %sz setting cookie: %s)	r   r  r?  rR  rS  rh  r<  rí   ri  )rÔ   rg  r±   rì   r   r   r   Úextract_cookies�  s    

zCookieJar.extract_cookiesc                 C   st   |d k	r2|d ks|d kr t dƒ‚| j| | |= n>|d k	rX|d krJt dƒ‚| j| |= n|d k	rj| j|= ni | _d S )Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rL   r@  )rÔ   r�   rŽ   rx   r   r   r   r]  ™  s    ÿÿ
zCookieJar.clearc                 C   sD   | j  ¡  z(| D ]}|jr|  |j|j|j¡ qW 5 | j  ¡  X d S rÂ   )r?  rR  rS  rÎ   r]  r�   rŽ   rx   )rÔ   rì   r   r   r   Úclear_session_cookies´  s    
zCookieJar.clear_session_cookiesc                 C   sP   | j  ¡  z4t ¡ }| D ]"}| |¡r|  |j|j|j¡ qW 5 | j  ¡  X d S rÂ   )	r?  rR  rS  rM   rÞ   r]  r�   rŽ   rx   )rÔ   rÝ   rì   r   r   r   rT  Ã  s    


zCookieJar.clear_expired_cookiesc                 C   s
   t | jƒS rÂ   )r6  r@  r  r   r   r   Ú__iter__Ö  s    zCookieJar.__iter__c                 C   s   d}| D ]}|d }q|S )Nr	   r   r   )rÔ   r§   rì   r   r   r   Ú__len__Ù  s     
zCookieJar.__len__c                 C   s2   g }| D ]}|  t|ƒ¡ qd| jjd |¡f S ©Nz<%s[%s]>r   )rr   rã   rä   rå   r�   ©rÔ   Úrrì   r   r   r   ræ   ß  s     zCookieJar.__repr__c                 C   s2   g }| D ]}|  t|ƒ¡ qd| jjd |¡f S rp  )rr   r#  rä   rå   r�   rq  r   r   r   rá   ä  s     zCookieJar.__str__)N)NNN)!rå   rç   rè   rt   ÚcompilerM  rN  Zstrict_domain_reZ	domain_reZdots_reÚASCIIÚmagic_rerÖ   rC  rE  rG  rP  rQ  r[  r`  ra  rb  rh  rj  ri  rl  r]  rm  rT  rn  ro  ræ   rá   r   r   r   r   r   Û  s6   





;!a\	7
c                   @   s   e Zd ZdS )r   Nr;  r   r   r   r   r   ë  s    c                   @   s4   e Zd Zddd„Zddd„Zddd„Zdd	d
„ZdS )r   NFc                 C   s2   t  | |¡ |d k	rt |¡}|| _t|ƒ| _d S rÂ   )r   rÖ   ÚosÚfspathÚfilenamer\  Ú	delayload)rÔ   rx  ry  rB  r   r   r   rÖ   ð  s
    
zFileCookieJar.__init__c                 C   s
   t ƒ ‚d S rÂ   ré   )rÔ   rx  Úignore_discardÚignore_expiresr   r   r   Úsaveü  s    zFileCookieJar.savec              	   C   sJ   |d kr"| j d k	r| j }nttƒ‚t|ƒ�}|  ||||¡ W 5 Q R X d S rÂ   )rx  rL   ÚMISSING_FILENAME_TEXTÚopenÚ_really_load©rÔ   rx  rz  r{  r   r   r   r   Úload   s    
 
zFileCookieJar.loadc                 C   s„   |d kr"| j d k	r| j }nttƒ‚| j ¡  zFt | j¡}i | _z|  	|||¡ W n t
k
rn   || _‚ Y nX W 5 | j ¡  X d S rÂ   )rx  rL   r}  r?  rR  rS  rÒ   Zdeepcopyr@  r�  ÚOSError)rÔ   rx  rz  r{  Z	old_stater   r   r   Úrevert	  s    
 
zFileCookieJar.revert)NFN)NFF)NFF)NFF)rå   rç   rè   rÖ   r|  r�  rƒ  r   r   r   r   r   í  s   


	    ÿc                 C   s   | j | jfd| jfd| jfg}| jd k	r8| d| jf¡ | jrH| d¡ | jrX| d¡ | jrh| d¡ | j	rx| d¡ | j
r–| dtt| j
ƒƒf¡ | jr¦| d	¡ | jr¼| d
| jf¡ | jrÒ| d| jf¡ t| j ¡ ƒ}|D ]}| |t| j| ƒf¡ qä| dt| jƒf¡ t|gƒS )NrŽ   r�   r‘   )Ú	path_specN)Ú	port_specN)Ú
domain_dotN)r�   NrŒ   )rÎ   NrÏ   rU  r�   )rx   ry   rŽ   r�   r‘   rr   rÍ   rÊ   rÌ   r�   rŒ   r5   r[   rÎ   rÏ   rÐ   r0  rÓ   r1  r#  r�   r†   )rì   rÅ   r1  r„   r   r   r   Úlwp_cookie_str$  s:    
þ
  
 
 
 
 ÿ 
  r‡  c                   @   s(   e Zd Zd
dd„Zddd„Zdd	„ ZdS )r   Tc                 C   sT   t   ¡ }g }| D ]2}|s |jr q|s0| |¡r0q| dt|ƒ ¡ qd |dg ¡S )NzSet-Cookie3: %sÚ
rW   )rM   rÎ   rÞ   rr   r‡  r�   )rÔ   rz  r{  rÝ   rr  rì   r   r   r   Ú
as_lwp_strM  s    
zLWPCookieJar.as_lwp_strNFc              	   C   sX   |d kr"| j d k	r| j }nttƒ‚t|dƒ�"}| d¡ | |  ||¡¡ W 5 Q R X d S )NÚwz#LWP-Cookies-2.0
)rx  rL   r}  r~  Úwriter‰  r€  r   r   r   r|  ]  s    
 
zLWPCookieJar.savec                 C   s0  |  ¡ }| j |¡s$d| }t|ƒ‚t ¡ }d}d}	d}
�z®|  ¡ }|dkrP�qæ| |¡s\q<|t|ƒd …  ¡ }t|gƒD �]f}|d \}}i }i }|	D ]}d||< q˜|dd … D ]n\}}|d k	rÌ| 	¡ }nd }||
ksà||	krä|}||	k�r|d krúd	}|||< q²||
k�r|||< q²|||< q²|j
}|d
ƒ}|dƒ}|d k	�rJt|ƒ}|d k�rXd	}|dƒ}| d¡}t|dƒ|||dƒ|dƒ|||dƒ|dƒ|dƒ|dƒ|||dƒ|dƒ|ƒ}|�sÄ|j�rÄqz|�sØ| |¡�rØqz|  |¡ qzq<W nB tk
�r    ‚ Y n, tk
�r*   tƒ  td||f ƒ‚Y nX d S )Nz5%r does not look like a Set-Cookie3 (LWP) format filezSet-Cookie3:)r…  r„  r†  r�   rÎ   )r�   r‘   rŽ   r�   rŒ   rÏ   rU  rW   r	   Fr   TrŒ   rÎ   r�   r    r�   r‘   r…  r†  rŽ   r„  r�   rÏ   rU  z&invalid Set-Cookie3 format file %r: %r)Úreadlineru  r@   r   rM   rs   r  r˜   rz   rK   rÙ   re   r   rÎ   rÞ   ri  r‚  re  r   )rÔ   r   rx  rz  r{  Úmagicr   rÝ   ÚheaderrX  rY  ÚlineÚdatarx   ry   rZ  rÕ   r„   r…   rž   rÅ   rŒ   rÎ   r�   rË   rk  r   r   r   r  i  s�    ÿ 



 






    ÷
ÿzLWPCookieJar._really_load)TT)NFF)rå   rç   rè   r‰  r|  r  r   r   r   r   r   @  s   

c                   @   s,   e Zd Ze d¡ZdZdd„ Zd	dd„ZdS )
r   z#( Netscape)? HTTP Cookie Filezr# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

c                 C   sb  t   ¡ }| ¡ }| j |¡s(td| ƒ‚zò| ¡ }|dkr>�q| d¡rT|d d… }| ¡  d¡s*| ¡ dkrpq*| d¡\}}	}
}}}}|dk}|	dk}	|dkr¨|}d }| d¡}d	}|dkrÆd }d
}t	d||d d	||	||
d	|||d d i ƒ}|sø|j
røq*|�s| |¡�rq*|  |¡ q*W nB tk
�r2   ‚ Y n, tk
�r\   tƒ  td||f ƒ‚Y nX d S )Nz4%r does not look like a Netscape format cookies filerW   rˆ  rˆ   )ú#r  ú	ÚTRUEr    FTr	   z+invalid Netscape format cookies file %r: %r)rM   rŒ  ru  r@   r   r‰   r˜   rs   r—   r   rÎ   rÞ   ri  r‚  re  r   )rÔ   r   rx  rz  r{  rÝ   r�  r�  r�   rË   rŽ   r�   rŒ   rx   ry   r«   rÎ   rk  r   r   r   r  ß  sr    ÿÿ 
 
ÿÿ
    ÷

ÿzMozillaCookieJar._really_loadNFc                 C   sþ   |d kr"| j d k	r| j }nttƒ‚t|dƒ�È}| | j¡ t ¡ }| D ]¨}|sV|jrVqF|sf| |¡rfqF|j	rrd}nd}|j
 d¡rˆd}nd}|jd k	r¢t|jƒ}	nd}	|jd kr¼d}
|j}n|j}
|j}| d |j
||j||	|
|g¡d ¡ qFW 5 Q R X d S )NrŠ  r“  ZFALSEr    rW   r’  rˆ  )rx  rL   r}  r~  r‹  rŽ  rM   rÎ   rÞ   r�   r�   rs   rŒ   r#  ry   rx   r�   rŽ   )rÔ   rx  rz  r{  r   rÝ   rì   r�   r«   rŒ   rx   ry   r   r   r   r|     sH    
 
  

   ÿþÿzMozillaCookieJar.save)NFF)	rå   rç   rè   rt   rs  ru  rŽ  r  r|  r   r   r   r   r   ¸  s   
A)N)N)WÚ__all__rv  rÒ   r-   rt   rM   Zurllib.parser®   Zurllib.requestZ	threadingr=  Zhttp.clientZhttpZcalendarr
   r   r   r   r#  ZclientZ	HTTP_PORTr¿   r}  r   r%   r,   r6   r7   rI   r(   rr   rK   r5   r8   r>   rs  rt  r?   rF   rT   rY   ÚIr]   ÚXr_   rb   rc   re   rk   rm   rn   rp   ro   rz   r€   r†   r‹   rŸ   r¢   r£   r¨   rª   r¬   r°   r´   r¹   r½   rÀ   rÃ   rÄ   rÁ   r»   rÇ   rÉ   r   r   r   r3  r6  r:  r   r‚  r   r   r‡  r   r   r   r   r   r   Ú<module>   sÌ      ÿ
     ÿ 

8þ 
ÿ
ì8
ï!



U
D'


#b!  b    7x