
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a°V ã                   @   s
  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
Z
d dlZd dlZd dlZd dlZzd dlZejZW n ek
r    dZe jZY nX zd dlZW n ek
rÆ   dZY nX zd dlZW n ek
rì   dZY nX dddddddd	d
ddddgZG dd„ deƒZG dd„ deƒZe ZZdZdZdZd ZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'e
 (e&¡Z)d Z*dZ+dZ,dZ-dZ.d Z/d!Z0d"Z1dZ2d#Z3d$Z4d%Z5e
 (e4¡Z6d Z7dZ8dZ9dZ:dZ;d Z<d!Z=d"Z>dZ?d#Z@d&ZAd'ZBdZCd(ZDdZEd)ZFd*ZGd+ZHd,ZId-ZJd.ZKe
 (eJ¡ZLd ZMdZNdZOdZPdZQd ZRd!ZSd"ZTdZUd#ZVd&ZWd'ZXd/ZYd0ZZe
 (eY¡Z[d1Z\d2Z]e
 (e\¡Z^d Z_dZ`dZadZbdZcd Zdd!Zed"ZfdZgd#Zhd3Zie
 jd4¡Zkd5d6„ Zld7d8„ Zmd9d	„ Znd:d;„ Zod<d=„ ZpG d>d
„ d
eqƒZrdasd?d@„ ZtdAdB„ ZuG dCdD„ dDƒZvG dEdF„ dFƒZwdGdHdIdIdIdIdJdKdLdMdJdNdOdPdQdRdSdTœZxdUdV„ ZydsdWdX„ZzdYdZ„ Z{G d[d\„ d\ƒZ|G d]d^„ d^ƒZ}G d_d`„ d`ej~ƒZG dadb„ dbej~ƒZ€G dcd„ dƒZ�G ddd„ de�ƒZ‚dedf„ Zƒdgdh„ Z„e…j†Z‡didj„ ZˆG dkdl„ dle�ƒZ‰G dmdn„ dne‰ƒZŠG dod„ dƒZ‹dtdpdq„ZŒe�drk�reŒƒ  dS )ué    NÚ
BadZipFileÚ
BadZipfileÚerrorÚ
ZIP_STOREDÚZIP_DEFLATEDÚ	ZIP_BZIP2ÚZIP_LZMAÚ
is_zipfileÚZipInfoÚZipFileÚ	PyZipFileÚLargeZipFileÚPathc                   @   s   e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__© r   r   ú,/opt/alt/python38/lib64/python3.8/zipfile.pyr   +   s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   /   s   iÿÿÿéÿÿ  é   é   é   é   é-   é.   é?   s   <4s4H2LHs   PKé   é   é   é   é   é   é   é	   z<4s4B4HL2L5H2Ls   PKé
   é   é   é   é   é   é   z<4s2B4HL2L2Hs   PKz<4sLQLs   PKz
<4sQ2H2L4Qs   PKiPKú<HHc           
      C   sŒ   t j}d}g }d }}|d t| ƒkrz|| ||d … ƒ\}}|d | }	||krt||krl| | ||… ¡ |	}d}|	}q|s‚| S d |¡S )NFr   r    Tó    )Ú_EXTRA_FIELD_STRUCTÚunpackÚlenÚappendÚjoin)
ÚextraZxidsr/   ZmodifiedÚbufferÚstartÚiZxidZxlenÚjr   r   r   Ú_strip_extra«   s     r8   c                 C   s,   zt | ƒrW dS W n tk
r&   Y nX dS )NTF)Ú_EndRecDataÚOSError©Úfpr   r   r   Ú_check_zipfile¾   s    
r=   c              	   C   sV   d}z8t | dƒrt| d�}nt| dƒ�}t|ƒ}W 5 Q R X W n tk
rP   Y nX |S )NFÚreadr;   Úrb)Úhasattrr=   Úopenr:   )ÚfilenameÚresultr<   r   r   r   r	   Æ   s    
c              
   C   s  z|   |t d¡ W n tk
r,   | Y S X |  t¡}t|ƒtkrH|S t t|¡\}}}}|tkrh|S |dksx|dkr€t	dƒ‚|   |t t
 d¡ |  t
¡}t|ƒt
kr®|S t t|¡\
}}}	}
}}}}}}|tkrÚ|S ||t< ||t< ||t< ||t< ||t< ||t< ||t< |S )Nr   r   r   z3zipfiles that span multiple disks are not supported)ÚseekÚsizeEndCentDir64Locatorr:   r>   r0   Ústructr/   ÚstructEndArchive64LocatorÚstringEndArchive64Locatorr   ÚsizeEndCentDir64ÚstructEndArchive64ÚstringEndArchive64Ú_ECD_SIGNATUREÚ_ECD_DISK_NUMBERÚ_ECD_DISK_STARTÚ_ECD_ENTRIES_THIS_DISKÚ_ECD_ENTRIES_TOTALÚ	_ECD_SIZEÚ_ECD_OFFSET)ÚfpinÚoffsetÚendrecÚdataZsigZdisknoZreloffZdisksZszÚcreate_versionZread_versionZdisk_numZdisk_dirZdircountZ	dircount2ZdirsizeZ	diroffsetr   r   r   Ú_EndRecData64Ö   s@    



þ   rX   c           	      C   sh  |   dd¡ |  ¡ }z|   t d¡ W n tk
r<   Y d S X |  ¡ }t|ƒtkr¬|dd… tkr¬|dd … dkr¬t t	|¡}t
|ƒ}| d¡ | |t ¡ t| t |ƒS t|d t dƒ}|   |d¡ |  ¡ }| t¡}|dk�rd|||t … }t|ƒtk�rd S t
t t	|¡ƒ}|t }||t |t | … }| |¡ | || ¡ t| || | |ƒS d S )Nr   r   r    éþÿÿÿs     r-   i   )rD   ÚtellÚsizeEndCentDirr:   r>   r0   ÚstringEndArchiverF   r/   ÚstructEndArchiveÚlistr1   rX   ÚmaxÚrfindÚ_ECD_COMMENT_SIZE)	rS   ZfilesizerV   rU   ZmaxCommentStartr5   ZrecDataZcommentSizeÚcommentr   r   r   r9     sD    ÿþ



ÿr9   c                   @   sX   e Zd ZdZddd„Zdd„ Zdd	d
„Zdd„ Zdd„ Ze	dddœdd„ƒZ
dd„ ZdS )r
   )Úorig_filenamerB   Ú	date_timeÚcompress_typeÚ_compresslevelrb   r3   Úcreate_systemrW   Úextract_versionÚreservedÚ	flag_bitsÚvolumeÚinternal_attrÚexternal_attrÚheader_offsetÚCRCÚcompress_sizeÚ	file_sizeÚ	_raw_timeÚNoName©é¼  r   r   r   r   r   c                 C   sÈ   || _ | tdƒ¡}|dkr(|d|… }tjdkrJtj|krJ| tjd¡}|| _|| _|d dk rjtdƒ‚t	| _
d | _d| _d| _tjdkr”d| _nd| _t| _t| _d| _d| _d| _d| _d| _d S )Nr   ú/ru   z+ZIP does not support timestamps before 1980r-   Zwin32r   )rc   ÚfindÚchrÚosÚsepÚreplacerB   rd   Ú
ValueErrorr   re   rf   rb   r3   ÚsysÚplatformrg   ÚDEFAULT_VERSIONrW   rh   ri   rj   rk   rl   rm   )ÚselfrB   rd   Z	null_byter   r   r   Ú__init__X  s0    
zZipInfo.__init__c                 C   sÜ   d| j j| jf g}| jtkr8| dt | j| j¡ ¡ | jd? }| jd@ }|rd| dt	 
|¡ ¡ |rv| d| ¡ |  ¡ }|rˆ| jr˜| d| j ¡ |r¢| jrÈ| jtks¸| j| jkrÈ| d| j ¡ | d	¡ d
 |¡S )Nz<%s filename=%rú compress_type=%sr)   r   z filemode=%rz external_attr=%#xz file_size=%rz compress_size=%rú>Ú )Ú	__class__r   rB   re   r   r1   Úcompressor_namesÚgetrm   ÚstatÚfilemodeÚis_dirrq   rp   r2   )r€   rC   ÚhiÚloÚisdirr   r   r   Ú__repr__ƒ  s0    
ÿÿ



ÿ
þ
zZipInfo.__repr__Nc                 C   s|  | j }|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }| jd
@ rfd } }}n| j}| j}| j}| j}d}	|d krš|tkp˜|tk}|rÂd}
|t |
dt 	|
¡d	 ||¡ }|tksÒ|tkrê|sÞt
dƒ‚d}d}t}	| jtk�rtt|	ƒ}	n| jtk�rtt|	ƒ}	t|	| jƒ| _t|	| jƒ| _|  ¡ \}}t tt| j| j|| j|||||t|ƒt|ƒ¡}|| | S )Nr   ru   r$   r   r!   r   r   r&   r    r   z<HHQQz'Filesize would require ZIP64 extensionsì   ÿÿ )rd   rj   ro   rp   rq   r3   ÚZIP64_LIMITrF   ÚpackÚcalcsizer   ÚZIP64_VERSIONre   r   r_   ÚBZIP2_VERSIONr   ÚLZMA_VERSIONrh   rW   Ú_encodeFilenameFlagsÚstructFileHeaderÚstringFileHeaderri   r0   )r€   Úzip64ÚdtÚdosdateÚdostimero   rp   rq   r3   Úmin_versionÚfmtrB   rj   Úheaderr   r   r   Ú
FileHeader™  s^    $$
   ÿ
       üzZipInfo.FileHeaderc                 C   sD   z| j  d¡| jfW S  tk
r>   | j  d¡| jdB f Y S X d S )NÚasciiúutf-8é   )rB   Úencoderj   ÚUnicodeEncodeError©r€   r   r   r   r–   Ç  s    zZipInfo._encodeFilenameFlagsc                 C   s†  | j }tj}t|ƒdk�r‚|d|d d… ƒ\}}|d t|ƒkrPtd||f ƒ‚|dk�rp|dkrv|d|dd… ƒ}nV|dkr’|d	|dd
… ƒ}n:|dkr®|d|dd… ƒ}n|dkr¼d}ntd||f ƒ‚d}| jdk�rt|ƒ|krðtdƒ‚|| | _|d7 }| jdk�r6t|ƒ|k�r$tdƒ‚|| | _|d7 }| jdk�rpt|ƒ|k�rXtdƒ‚| j}|| | _|d7 }||d d … }qd S )Nr    r,   z"Corrupt extra field %04x (size=%d)r   é   z<QQQé   r)   z<QQr   r   z<Qr   r   r   )l   ÿÿÿÿ r�   z/Corrupt zip64 extra field. File size not found.r�   z3Corrupt zip64 extra field. Compress size not found.z3Corrupt zip64 extra field. Header offset not found.)r3   rF   r/   r0   r   rq   rp   rn   )r€   r3   r/   ÚtpZlnZcountsÚidxÚoldr   r   r   Ú_decodeExtraÍ  sP    
ÿ
ÿ
ÿ
zZipInfo._decodeExtraT©Ústrict_timestampsc          	      C   s   t |tjƒrt |¡}t |¡}t |j¡}t |j	¡}|dd… }|sZ|d dk rZd}n|sn|d dkrnd}|d krz|}tj
 tj
 |¡d ¡}|d tjtjfkr´|dd … }q’|rÀ|d7 }| ||ƒ}|jd	@ d
> |_|rôd|_| jd
O  _n|j|_|S )Nr   r"   ru   rt   é;  )r¯   r   é   é   é;   r²   r   rv   r   r)   )Ú
isinstancery   ÚPathLikeÚfspathrˆ   ÚS_ISDIRÚst_modeÚtimeÚ	localtimeÚst_mtimeÚpathÚnormpathÚ
splitdriverz   Úaltseprm   rq   Úst_size)	ÚclsrB   Úarcnamer®   Ústr�   Úmtimerd   Úzinfor   r   r   Ú	from_fileÿ  s0    



zZipInfo.from_filec                 C   s   | j d dkS )Néÿÿÿÿrv   ©rB   r¦   r   r   r   rŠ   %  s    zZipInfo.is_dir)rs   rt   )N)N)r   r   r   Ú	__slots__r�   rŽ   r    r–   r¬   ÚclassmethodrÅ   rŠ   r   r   r   r   r
   >  s   
+
.2%c                 C   s0   t dƒD ]"}| d@ r"| d? dA } q| dL } q| S )Nr   r   l    q[ )Úrange)Úcrcr7   r   r   r   Ú_gen_crc/  s
    
rÌ   c                    sl   d‰d‰d‰t d kr&ttttdƒƒƒa t ‰‡fdd„‰ ‡ ‡‡‡fdd„‰| D ]}ˆ|ƒ qL‡‡fd	d
„}|S )NixV4i‰gE#i�xV4é   c                    s   |d? ˆ || A d@  A S )Nr   éÿ   r   )ZchrË   )Úcrctabler   r   Úcrc32I  s    z_ZipDecrypter.<locals>.crc32c                    s<   ˆ | ˆƒ‰ˆˆd@  d@ ‰ˆd d d@ ‰ˆ ˆd? ˆƒ‰d S )NrÎ   r�   i„r   r§   r   )Úc)rÐ   Úkey0Úkey1Úkey2r   r   Úupdate_keysM  s    
z"_ZipDecrypter.<locals>.update_keysc                    sN   t ƒ }|j}| D ]4}ˆ dB }|||dA  d? d@ N }ˆ|ƒ ||ƒ qt|ƒS )Nr   r   r   rÎ   )Ú	bytearrayr1   Úbytes)rV   rC   r1   rÑ   Úk)rÔ   rÕ   r   r   Ú	decrypterW  s    
z _ZipDecrypter.<locals>.decrypter)Ú	_crctabler^   ÚmaprÌ   rÊ   )ÚpwdÚprÙ   r   )rÐ   rÏ   rÒ   rÓ   rÔ   rÕ   r   Ú_ZipDecrypter?  s    
rÞ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLZMACompressorc                 C   s
   d | _ d S ©N)Ú_compr¦   r   r   r   r�   g  s    zLZMACompressor.__init__c                 C   sF   t  dt ji¡}t jt jt  t j|¡gd�| _t dddt	|ƒ¡| S )NÚid©Úfiltersz<BBHr$   r    )
ÚlzmaZ_encode_filter_propertiesÚFILTER_LZMA1rß   Ú
FORMAT_RAWÚ_decode_filter_propertiesrá   rF   r‘   r0   )r€   Zpropsr   r   r   Ú_initj  s
    ÿ
zLZMACompressor._initc                 C   s*   | j d kr|  ¡ | j  |¡ S | j  |¡S rà   )rá   ré   Úcompress)r€   rV   r   r   r   rê   q  s    
zLZMACompressor.compressc                 C   s&   | j d kr|  ¡ | j  ¡  S | j  ¡ S rà   )rá   ré   Úflushr¦   r   r   r   rë   v  s    
zLZMACompressor.flushN)r   r   r   r�   ré   rê   rë   r   r   r   r   rß   e  s   rß   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚLZMADecompressorc                 C   s   d | _ d| _d| _d S )Nr-   F)Ú_decompÚ_unconsumedÚeofr¦   r   r   r   r�   ~  s    zLZMADecompressor.__init__c              	   C   s´   | j d krš|  j|7  _t| jƒdkr*dS t d| jdd… ¡\}t| jƒd| krXdS tjtjt tj	| jdd| … ¡gd�| _ | jd| d … }| `| j  
|¡}| j j| _|S )Nr    r-   z<Hr   rã   )rí   rî   r0   rF   r/   rå   rì   rç   rè   ræ   Ú
decompressrï   )r€   rV   ZpsizerC   r   r   r   rð   ƒ  s"    
ÿÿ

zLZMADecompressor.decompressN)r   r   r   r�   rð   r   r   r   r   rì   |  s   rì   ZstoreZshrinkÚreduceZimplodeÚtokenizeZdeflateZ	deflate64Zbzip2rå   ZterseZlz77ZwavpackZppmd)r   r   r   r   r    r!   r"   r#   r   r$   r%   r   r   r+   é   éa   éb   c                 C   sX   | t kr
nJ| tkr tsTtdƒ‚n4| tkr6tsTtdƒ‚n| tkrLtsTtdƒ‚ntdƒ‚d S )Nz.Compression requires the (missing) zlib modulez-Compression requires the (missing) bz2 modulez.Compression requires the (missing) lzma modulez(That compression method is not supported)	r   r   ÚzlibÚRuntimeErrorr   Úbz2r   rå   ÚNotImplementedError)Úcompressionr   r   r   Ú_check_compression¬  s$    ÿÿÿrû   c                 C   sj   | t kr2|d k	r t |tjd¡S t tjtjd¡S | tkrT|d k	rLt |¡S t ¡ S | tkrbt	ƒ S d S d S )Néñÿÿÿ)
r   rö   ZcompressobjZDEFLATEDZZ_DEFAULT_COMPRESSIONr   rø   ZBZ2Compressorr   rß   )re   Úcompresslevelr   r   r   Ú_get_compressor¿  s    
rþ   c                 C   sv   t | ƒ | tkrd S | tkr&t d¡S | tkr6t ¡ S | tkrDt	ƒ S t
 | ¡}|rdtd| |f ƒ‚ntd| f ƒ‚d S )Nrü   zcompression type %d (%s)zcompression type %d)rû   r   r   rö   Zdecompressobjr   rø   ZBZ2Decompressorr   rì   r†   r‡   rù   )re   Zdescrr   r   r   Ú_get_decompressorÏ  s    

rÿ   c                   @   s0   e Zd Zdd„ Zddd„Zddd„Zd	d
„ ZdS )Ú_SharedFilec                 C   s2   || _ || _|| _|| _|| _|j| _|j| _d S rà   )Ú_fileÚ_posÚ_closeÚ_lockÚ_writingÚseekablerZ   )r€   ÚfileÚposÚcloseÚlockZwritingr   r   r   r�   â  s    z_SharedFile.__init__r   c              
   C   sN   | j �> |  ¡ rtdƒ‚| j ||¡ | j ¡ | _| jW  5 Q R £ S Q R X d S )Nz}Can't reposition in the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)r  r  r|   r  rD   rZ   r  )r€   rT   Úwhencer   r   r   rD   ë  s    z_SharedFile.seekrÆ   c              
   C   sX   | j �H |  ¡ rtdƒ‚| j | j¡ | j |¡}| j ¡ | _|W  5 Q R £ S Q R X d S )NúyCan't read from the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)r  r  r|   r  rD   r  r>   rZ   ©r€   ÚnrV   r   r   r   r>   õ  s    z_SharedFile.readc                 C   s$   | j d k	r | j }d | _ |  |¡ d S rà   )r  r  )r€   Úfileobjr   r   r   r	     s    
z_SharedFile.closeN)r   )rÆ   )r   r   r   r�   rD   r>   r	  r   r   r   r   r   á  s   	


r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	_Tellablec                 C   s   || _ d| _d S ©Nr   )r<   rT   ©r€   r<   r   r   r   r�     s    z_Tellable.__init__c                 C   s   | j  |¡}|  j|7  _|S rà   )r<   ÚwriterT   )r€   rV   r  r   r   r   r    s    z_Tellable.writec                 C   s   | j S rà   )rT   r¦   r   r   r   rZ     s    z_Tellable.tellc                 C   s   | j  ¡  d S rà   )r<   rë   r¦   r   r   r   rë     s    z_Tellable.flushc                 C   s   | j  ¡  d S rà   )r<   r	  r¦   r   r   r   r	    s    z_Tellable.closeN)r   r   r   r�   r  rZ   rë   r	  r   r   r   r   r    s
   r  c                       s¢   e Zd ZdZdZdZd'dd„Zdd	„ Zd
d„ Zd(dd„Z	d)dd„Z
dd„ Zd*dd„Zdd„ Zdd„ Zdd„ Zdd„ Z‡ fdd„Zd d!„ Zd+d#d$„Zd%d&„ Z‡  ZS ),Ú
ZipExtFilei   @i   i   NFc                 C   s(  || _ || _|| _|j| _|j| _|j| _t	| jƒ| _
d| _d| _d| _d | _|| _|j| _t|dƒrz|j| _tdƒ| _nd | _d| _z4| ¡ r¸| ¡ | _|j| _|j| _| j| _d| _W n tk
rÎ   Y nX d | _|�r$|j d@ rö|j!d? d@ }n|jd? d@ }|  "¡ }||k�r$t#d	|j$ ƒ‚d S )
NFr-   r   ro   Tr   rÎ   r§   zBad password for file %r)%Ú_fileobjÚ_pwdÚ_close_fileobjre   Ú_compress_typerp   Ú_compress_leftrq   Ú_leftrÿ   Ú_decompressorÚ_eofÚ_readbufferÚ_offsetÚnewlinesÚmoderB   Únamer@   ro   Ú_expected_crcrÐ   Ú_running_crcÚ	_seekabler  rZ   Ú_orig_compress_startÚ_orig_compress_sizeÚ_orig_file_sizeÚ_orig_start_crcÚAttributeErrorÚ
_decrypterrj   rr   Ú_init_decrypterr÷   rc   )r€   r  r   ÚzipinforÜ   Zclose_fileobjZ
check_byteÚhr   r   r   r�   )  sF    




zZipExtFile.__init__c                 C   s4   t | jƒ| _| j d¡}|  jd8  _|  |¡d S )Nr   r&   )rÞ   r  r*  r  r>   r  )r€   rŸ   r   r   r   r+  \  s    zZipExtFile._init_decrypterc                 C   sv   d| j j| j jf g}| jsX| d| j| jf ¡ | jtkrb| dt	 
| j| j¡ ¡ n
| d¡ | d¡ d |¡S )Nú<%s.%sz name=%r mode=%rr‚   ú	 [closed]rƒ   r„   )r…   r   r   Úclosedr1   r!  r   r  r   r†   r‡   r2   ©r€   rC   r   r   r   rŽ   g  s    ÿ
ÿÿ

zZipExtFile.__repr__rÆ   c                 C   sL   |dk r>| j  d| j¡d }|dkr>| j | j|… }|| _|S tj | |¡S )Nr   ó   
r   )r  rw   r  ÚioÚBufferedIOBaseÚreadline)r€   Úlimitr6   Úliner   r   r   r5  u  s    zZipExtFile.readliner   c                 C   sr   |t | jƒ| j kr\|  |¡}t |ƒ| jkrJ|| j| jd …  | _d| _n|  jt |ƒ8  _| j| j| jd … S )Nr   i   )r0   r  r  r>   )r€   r  Úchunkr   r   r   Úpeek…  s    
zZipExtFile.peekc                 C   s   dS ©NTr   r¦   r   r   r   Úreadable’  s    zZipExtFile.readablec                 C   s   |d ks|dk rH| j | jd … }d| _ d| _| jsD||  | j¡7 }q,|S || j }|t| j ƒk rz| j | j|… }|| _|S |t| j ƒ }| j | jd … }d| _ d| _|dkrü| jsü|  |¡}|t|ƒk ræ|| _ || _||d |… 7 }qü||7 }|t|ƒ8 }q¤|S ©Nr   r-   ©r  r  r  Ú_read1ÚMAX_Nr0   )r€   r  ÚbufÚendrV   r   r   r   r>   •  s4    

zZipExtFile.readc                 C   s@   | j d krd S t|| jƒ| _| jr<| j| j kr<td| j ƒ‚d S )NzBad CRC-32 for file %r)r"  rÐ   r#  r  r   r!  )r€   Únewdatar   r   r   Ú_update_crc¶  s
    
zZipExtFile._update_crcc                 C   s  |d ks|dk rR| j | jd … }d| _ d| _| jsN|  | j¡}|r,||7 }qNq,|S || j }|t| j ƒk r„| j | j|… }|| _|S |t| j ƒ }| j | jd … }d| _ d| _|dk�r| j�s|  |¡}|t|ƒk rö|| _ || _||d |… 7 }�q|r¸||7 }�qq¸|S r<  r=  )r€   r  r@  rV   rA  r   r   r   Úread1À  s>    


zZipExtFile.read1c                 C   s"  | j s|dkrdS | jtkrH| jj}|t|ƒkrR||  |t|ƒ ¡7 }n
|  |¡}| jtkrj| jdk| _ nx| jtkrÂt	|| j
ƒ}| j ||¡}| jjp¨| jdko¨| jj | _ | j râ|| j ¡ 7 }n | j |¡}| jjpÞ| jdk| _ |d | j… }|  jt|ƒ8  _| jdk�rd| _ |  |¡ |S )Nr   r-   T)r  r  r   r  Zunconsumed_tailr0   Ú_read2r   r  r_   ÚMIN_READ_SIZErð   rï   rë   r  rC  r  r   r   r   r>  å  s4    




þ
zZipExtFile._read1c                 C   sd   | j dkrdS t|| jƒ}t|| j ƒ}| j |¡}|  j t|ƒ8  _ |sLt‚| jd k	r`|  |¡}|S r<  )	r  r_   rF  Úminr  r>   r0   ÚEOFErrorr*  r  r   r   r   rE  	  s    


zZipExtFile._read2c                    s&   z| jr| j ¡  W 5 t ƒ  ¡  X d S rà   )Úsuperr	  r  r  r¦   ©r…   r   r   r	    s    zZipExtFile.closec                 C   s   | j S rà   )r$  r¦   r   r   r   r     s    zZipExtFile.seekabler   c                 C   s>  | j st d¡‚|  ¡ }|dkr&|}n.|dkr8|| }n|dkrL| j| }ntdƒ‚|| jkrd| j}|dk rpd}|| }|| j }|dkr¤|t| jƒk r¤|| _d}nf|dk �r
| j	 
| j¡ | j| _| j| _| j| _d| _d| _t| jƒ| _d| _|}| jd k	�r
|  ¡  |dk�r6t| j|ƒ}|  |¡ ||8 }�q
|  ¡ S )Nú!underlying stream is not seekabler   r   r   zCwhence must be os.SEEK_SET (0), os.SEEK_CUR (1), or os.SEEK_END (2)r-   F)r$  r3  ÚUnsupportedOperationrZ   r'  r|   r  r0   r  r  rD   r%  r(  r#  r&  r  r  rÿ   r  r  r  r*  r+  rG  ÚMAX_SEEK_READr>   )r€   rT   r  Zcurr_posZnew_posZread_offsetZbuff_offsetZread_lenr   r   r   rD   #  sH    






zZipExtFile.seekc                 C   s0   | j st d¡‚| j| j t| jƒ | j }|S )NrK  )r$  r3  rL  r'  r  r0   r  r  )r€   Zfileposr   r   r   rZ   S  s    
zZipExtFile.tell)NF)rÆ   )r   )rÆ   )r   )r   r   r   r?  rF  rM  r�   r+  rŽ   r5  r9  r;  r>   rC  rD  r>  rE  r	  r  rD   rZ   Ú__classcell__r   r   rJ  r   r    s(     ÿ
3


!
%$
0r  c                       s@   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Z‡ fd	d
„Z‡  Z	S )Ú_ZipWriteFilec                 C   s8   || _ || _|| _t|j|jƒ| _d| _d| _d| _	d S r  )
Ú_zinfoÚ_zip64Ú_zipfilerþ   re   rf   Ú_compressorÚ
_file_sizeÚ_compress_sizeÚ_crc)r€   ÚzfrÄ   r™   r   r   r   r�   [  s    ÿz_ZipWriteFile.__init__c                 C   s   | j jS rà   )rR  r<   r¦   r   r   r   r  e  s    z_ZipWriteFile._fileobjc                 C   s   dS r:  r   r¦   r   r   r   Úwritablei  s    z_ZipWriteFile.writablec                 C   sf   | j rtdƒ‚t|ƒ}|  j|7  _t|| jƒ| _| jrV| j |¡}|  jt|ƒ7  _| j	 
|¡ |S )NzI/O operation on closed file.)r0  r|   r0   rT  rÐ   rV  rS  rê   rU  r  r  )r€   rV   Únbytesr   r   r   r  l  s    z_ZipWriteFile.writec              	      sb  | j r
d S �zFtƒ  ¡  | jrR| j ¡ }|  jt|ƒ7  _| j	 
|¡ | j| j_n
| j| j_| j| j_| j| j_| jjd@ rÀ| jr†dnd}| j	 
t |t| jj| jj| jj¡¡ | j	 ¡ | j_nn| jsê| jtkrØtdƒ‚| jtkrêtdƒ‚| j	 ¡ | j_| j	 | jj¡ | j	 
| j | j¡¡ | j	 | jj¡ | jj | j¡ | j| jj| jj < W 5 d| j_X d S )NFr   z<LLQQz<LLLLz+File size unexpectedly exceeded ZIP64 limitz1Compressed size unexpectedly exceeded ZIP64 limit)!r0  rR  r  rI  r	  rS  rë   rU  r0   r  r  rP  rp   rT  rV  ro   rq   rj   rQ  rF   r‘   Ú_DD_SIGNATURErZ   Ú	start_dirr�   r÷   rD   rn   r    Úfilelistr1   Ú
NameToInforB   )r€   r@  rž   rJ  r   r   r	  x  sF    




 ÿ
ÿ
ÿz_ZipWriteFile.close)
r   r   r   r�   Úpropertyr  rX  r  r	  rN  r   r   rJ  r   rO  Z  s   

rO  c                   @   s   e Zd ZdZdZdeddfddœdd„Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zd<dd„Zdd„ Zdd„ Zdd„ Zedd„ ƒZejdd„ ƒZd=dd„Zd>d d!œd"d#„Zd?d$d%„Zd@d&d'„ZdAd(d)„Zed*d+„ ƒZd,d-„ Zd.d/„ ZdBd0d1„ZdCd2d3„Zd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"dS )Dr   NÚrTr­   c          
   	   C   sP  |dkrt dƒ‚t|ƒ || _d| _d| _i | _g | _|| _|| _|| _	d | _
d| _|| _t|tjƒrpt |¡}t|tƒræd| _|| _dddd	dd
ddœ}|| }zt ||¡| _W qä tk
rÞ   ||krØ|| }Y q¢‚ Y qäX qäq¢nd| _|| _t|dd ƒ| _d| _t ¡ | _d| _d| _�z|dk�r4|  ¡  nð|dk�r¾d| _z| j  ¡ | _!W n2 t"tfk
�r†   t#| jƒ| _d| _!d| _Y n6X z| j $| j!¡ W n  t"tfk
�rº   d| _Y nX nf|dk�rz|  ¡  | j $| j!¡ W n6 t%k
�r   | j $dd¡ d| _| j  ¡ | _!Y nX nt dƒ‚W n$   | j}	d | _|  &|	¡ ‚ Y nX d S )N)r_  ÚwÚxÚaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Fr   r-   r?   úw+búx+búr+bÚwbZxb)r_  r`  ra  rb  re  rc  rd  r   r!  Tr_  )r`  ra  rb  r   z"Mode must be 'r', 'w', 'x', or 'a')'r|   rû   Ú_allowZip64Ú
_didModifyÚdebugr]  r\  rú   rý   r   rÜ   Ú_commentÚ_strict_timestampsr³   ry   r´   rµ   ÚstrÚ_filePassedrB   r3  rA   r<   r:   ÚgetattrÚ_fileRefCntÚ	threadingÚRLockr  r$  r  Ú_RealGetContentsrZ   r[  r)  r  rD   r   Ú_fpclose)
r€   r  r   rú   Ú
allowZip64rý   r®   ZmodeDictr‰   r<   r   r   r   r�   Â  sŠ    

  ÿ





zZipFile.__init__c                 C   s   | S rà   r   r¦   r   r   r   Ú	__enter__  s    zZipFile.__enter__c                 C   s   |   ¡  d S rà   ©r	  )r€   ÚtypeÚvalueÚ	tracebackr   r   r   Ú__exit__  s    zZipFile.__exit__c                 C   s‚   d| j j| j jf g}| jd k	rd| jr8| d| j ¡ n| jd k	rR| d| j ¡ | d| j ¡ n
| d¡ | d¡ d |¡S )Nr.  z file=%rz filename=%rz mode=%rr/  rƒ   r„   )	r…   r   r   r<   rm  r1   rB   r   r2   r1  r   r   r   rŽ   "  s    ÿ



zZipFile.__repr__c                 C   s¸  | j }zt|ƒ}W n tk
r.   tdƒ‚Y nX |s<tdƒ‚| jdkrNt|ƒ |t }|t }|t | _	|t
 | | }|t tkr�|tt 8 }| jdkr°|| }td|||ƒ || | _| | jd¡ | |¡}t |¡}d}||k �r´| t¡}	t|	ƒtk�r
tdƒ‚t t|	¡}	|	t tk�r,tdƒ‚| jdk�r@t|	ƒ | |	t ¡}
|	d }|d	@ �rl|
 d
¡}
n
|
 d¡}
t|
ƒ}| |	t ¡|_| |	t  ¡|_!|	t" |_#|	dd… \|_$|_%|_&|_'|_(|_)}}|_*|_+|_,|j&t-k�rút.d|j&d  ƒ‚|	dd… \|_/|_0|_1||_2|d? d |d? d@ |d@ |d? |d? d@ |d@ d f|_3| 4¡  |j#| |_#| j5 6|¡ || j7|j8< |t |	t  |	t  |	t   }| jdkràtd|ƒ qàd S )NzFile is not a zip filer   r   zgiven, inferred, offsetr   zTruncated central directoryz&Bad magic number for central directoryr!   r£   r¢   Úcp437r   zzip file version %.1fr%   r(   r+   r$   ru   r°   r&   r   Útotal)9r<   r9   r:   r   ri  ÚprintrQ   rR   Ú_ECD_COMMENTrj  Ú_ECD_LOCATIONrL   rK   rI   rE   r[  rD   r>   r3  ÚBytesIOÚsizeCentralDirr0   rF   r/   ÚstructCentralDirÚ_CD_SIGNATUREÚstringCentralDirÚ_CD_FILENAME_LENGTHÚdecoder
   Ú_CD_EXTRA_FIELD_LENGTHr3   Ú_CD_COMMENT_LENGTHrb   Ú_CD_LOCAL_HEADER_OFFSETrn   rW   rg   rh   ri   rj   re   ro   rp   rq   ÚMAX_EXTRACT_VERSIONrù   rk   rl   rm   rr   rd   r¬   r\  r1   r]  rB   )r€   r<   rU   Zsize_cdZ	offset_cdÚconcatZinferredrV   r|  ÚcentdirrB   Úflagsra  ÚtÚdr   r   r   rr  0  s�    











þ     ÿ 
 
ÿÿþ
zZipFile._RealGetContentsc                 C   s   dd„ | j D ƒS )Nc                 S   s   g | ]
}|j ‘qS r   rÇ   )Ú.0rV   r   r   r   Ú
<listcomp>€  s     z$ZipFile.namelist.<locals>.<listcomp>©r\  r¦   r   r   r   Únamelist~  s    zZipFile.namelistc                 C   s   | j S rà   r’  r¦   r   r   r   Úinfolist‚  s    zZipFile.infolistc                 C   sL   t dd |d� | jD ]0}d|jd d…  }t d|j||jf |d� qd S )Nz%-46s %19s %12s)z	File NamezModified    ZSize©r  z%d-%02d-%02d %02d:%02d:%02dr"   z%-46s %s %12d)r}  r\  rd   rB   rq   )r€   r  rÄ   Údater   r   r   Úprintdir‡  s    ÿ
ÿzZipFile.printdirc              
   C   s^   d}| j D ]N}z*|  |jd¡�}| |¡r,q W 5 Q R X W q
 tk
rV   |j Y   S X q
d S )Ni   r_  )r\  rA   rB   r>   r   )r€   Z
chunk_sizerÄ   Úfr   r   r   Útestzip�  s    

zZipFile.testzipc                 C   s$   | j  |¡}|d kr td| ƒ‚|S )Nz(There is no item named %r in the archive)r]  r‡   ÚKeyError)r€   r!  Úinfor   r   r   Úgetinfo�  s    ÿzZipFile.getinfoc                 C   s6   |r t |tƒs tdt|ƒj ƒ‚|r,|| _nd | _d S )Núpwd: expected bytes, got %s)r³   r×   Ú	TypeErrorrw  r   rÜ   )r€   rÜ   r   r   r   Úsetpassword¦  s
    zZipFile.setpasswordc                 C   s   | j S rà   )rj  r¦   r   r   r   rb   ¯  s    zZipFile.commentc                 C   s^   t |tƒstdt|ƒj ƒ‚t|ƒtkrNdd l}|jdt dd� |d t… }|| _	d| _
d S )Nzcomment: expected bytes, got %sr   z3Archive comment is too long; truncating to %d bytesr   ©Ú
stacklevelT)r³   r×   rž  rw  r   r0   ÚZIP_MAX_COMMENTÚwarningsÚwarnrj  rh  )r€   rb   r£  r   r   r   rb   ´  s    
ÿÿc              
   C   s.   |   |d|¡�}| ¡ W  5 Q R £ S Q R X d S ©Nr_  ©rA   r>   )r€   r!  rÜ   r<   r   r   r   r>   Á  s    zZipFile.readF©Úforce_zip64c                   s  |dkrt dƒ‚|r0t|tƒs0tdt|ƒj ƒ‚|rD|dkrDt dƒ‚ˆ jsRt dƒ‚t|tƒrb|}n,|dkr„t|ƒ}ˆ j|_	ˆ j
|_n
ˆ  |¡}|dkr¤ˆ j||d�S ˆ jr²t dƒ‚ˆ  jd	7  _tˆ j|jˆ jˆ j‡ fd
d„ƒ}�z| t¡}t|ƒtk�rtdƒ‚t t|¡}|t tk�r&tdƒ‚| |t ¡}|t �rL| |t ¡ |jd@ �r`t dƒ‚|jd@ �rtt dƒ‚|t! d@ �rŽ| "d¡}	n
| "d¡}	|	|j#k�r¶td|j#|f ƒ‚|jd	@ }
|
�ræ|�sÒˆ j$}|�sêt%d| ƒ‚nd }t&||||dƒW S    | '¡  ‚ Y nX d S )N>   r`  r_  zopen() requires mode "r" or "w"r�  r`  z'pwd is only supported for reading filesz2Attempt to use ZIP archive that was already closedr§  r  r   c                      s   ˆ j S rà   )r  r   r¦   r   r   Ú<lambda>÷  r-   zZipFile.open.<locals>.<lambda>zTruncated file headerz Bad magic number for file headeré    z$compressed patched data (flag bit 5)é@   zstrong encryption (flag bit 6)r£   r¢   r{  z/File name in directory %r and header %r differ.z6File %r is encrypted, password required for extractionT)(r|   r³   r×   rž  rw  r   r<   r
   rú   re   rý   rf   rœ  Ú_open_to_writer  ro  r   rn   rs  r  r>   ÚsizeFileHeaderr0   r   rF   r/   r—   Ú_FH_SIGNATUREr˜   Ú_FH_FILENAME_LENGTHÚ_FH_EXTRA_FIELD_LENGTHrj   rù   Ú_FH_GENERAL_PURPOSE_FLAG_BITSr†  rc   rÜ   r÷   r  r	  )r€   r!  r   rÜ   r¨  rÄ   Zzef_fileZfheaderÚfnameZ	fname_strZis_encryptedr   r¦   r   rA   Æ  s~    ÿ



  
ÿ


ÿÿ
ÿzZipFile.openc                 C   sæ   |r| j stdƒ‚| jr tdƒ‚t|dƒs0d|_d|_d|_d|_|jt	krZ| jdO  _| j
sn| jdO  _|jszd|_| j o�|p�|jd tk}| j
r¦| j | j¡ | j ¡ |_|  |¡ d	| _| j | |¡¡ d	| _t| ||ƒS )
NzHforce_zip64 is True, but allowZip64 was False when opening the ZIP file.zzCan't write to the ZIP file while there is another write handle open on it. Close the first handle before opening another.rq   r   r   r   é  €gÍÌÌÌÌÌð?T)rg  r|   r  r@   rq   rp   ro   rj   re   r   r$  rm   r�   r<   rD   r[  rZ   rn   Ú_writecheckrh  r  r    rO  )r€   rÄ   r¨  r™   r   r   r   r¬  (  s8    
ÿ

ÿ
zZipFile._open_to_writec                 C   s*   |d krt  ¡ }n
t  |¡}|  |||¡S rà   )ry   Úgetcwdrµ   Ú_extract_member)r€   Úmemberr»   rÜ   r   r   r   ÚextractS  s    

zZipFile.extractc                 C   sH   |d kr|   ¡ }|d kr"t ¡ }n
t |¡}|D ]}|  |||¡ q0d S rà   )r“  ry   rµ  rµ   r¶  )r€   r»   ÚmembersrÜ   r,  r   r   r   Ú
extractall`  s    

zZipFile.extractallc                 C   s^   | j }|s(d}t |dt|ƒ ¡}|| _ | |¡}dd„ | |¡D ƒ}| dd„ |D ƒ¡}|S )Nz:<>|"?*Ú_c                 s   s   | ]}|  d ¡V  qdS )Ú.N)Úrstrip©r�  ra  r   r   r   Ú	<genexpr>{  s     z1ZipFile._sanitize_windows_name.<locals>.<genexpr>c                 s   s   | ]}|r|V  qd S rà   r   r¾  r   r   r   r¿  }  s      )Ú!_windows_illegal_name_trans_tablerl  Ú	maketransr0   Ú	translateÚsplitr2   )rÀ   rÁ   ÚpathsepÚtableZillegalr   r   r   Ú_sanitize_windows_nameq  s    
zZipFile._sanitize_windows_namec              
      sL  t |tƒs|  |¡}|j dtjj¡}tjjrB| tjjtjj¡}tj 	|¡d }dtjj
tjjf‰ tjj ‡ fdd„| tjj¡D ƒ¡}tjjdkr¦|  |tjj¡}tj ||¡}tj |¡}tj |¡}|rætj |¡sæt |¡ | ¡ �rtj |¡�st |¡ |S | j||d��(}t|dƒ�}t ||¡ W 5 Q R X W 5 Q R X |S )	Nrv   r   r„   c                 3   s   | ]}|ˆ kr|V  qd S rà   r   r¾  ©Zinvalid_path_partsr   r   r¿  ‘  s    ÿz*ZipFile._extract_member.<locals>.<genexpr>ú\)rÜ   rf  )r³   r
   rœ  rB   r{   ry   r»   rz   r¾   r½   ÚcurdirÚpardirr2   rÃ  rÆ  r¼   ÚdirnameÚexistsÚmakedirsrŠ   r�   ÚmkdirrA   ÚshutilÚcopyfileobj)r€   r·  Z
targetpathrÜ   rÁ   Z	upperdirsÚsourceÚtargetr   rÇ  r   r¶  €  s2    

&


ÿ zZipFile._extract_memberc                 C   s¢   |j | jkr(dd l}|jd|j  dd� | jdkr:tdƒ‚| jsHtdƒ‚t|jƒ | j	sžd }t
| jƒtkrpd}n|jtkr€d	}n|jtkrŽd
}|ržt|d ƒ‚d S )Nr   zDuplicate name: %rr   r   ©r`  ra  rb  z&write() requires mode 'w', 'x', or 'a'z4Attempt to write ZIP archive that was already closedúFiles countZFilesizezZipfile sizeú would require ZIP64 extensions)rB   r]  r£  r¤  r   r|   r<   rû   re   rg  r0   r\  ÚZIP_FILECOUNT_LIMITrq   r�   rn   r   )r€   rÄ   r£  Úrequires_zip64r   r   r   r´  ª  s,    
ÿ


ÿzZipFile._writecheckc              
   C   sP  | j stdƒ‚| jrtdƒ‚tj||| jd�}| ¡ rDd|_d|_n0|d k	rT||_	n| j
|_	|d k	rl||_n| j|_| ¡ �r| j�„ | jrš| j  | j¡ | j  ¡ |_|j	tkr¾| jdO  _|  |¡ d| _| j |¡ || j|j< | j  | d¡¡ | j  ¡ | _W 5 Q R X n<t|dƒ�,}|  |d	¡�}t ||d
¡ W 5 Q R X W 5 Q R X d S )Nú7Attempt to write to ZIP archive that was already closedz>Can't write to ZIP archive while an open writing handle existsr­   r   r   TFr?   r`  i    ) r<   r|   r  r
   rÅ   rk  rŠ   rp   ro   re   rú   rf   rý   r  r$  rD   r[  rZ   rn   r   rj   r´  rh  r\  r1   r]  rB   r  r    rA   rÏ  rÐ  )r€   rB   rÁ   re   rý   rÄ   ÚsrcÚdestr   r   r   r  Á  sF    ÿÿÿ


zZipFile.writec              
   C   sø   t |tƒr| d¡}t |tƒsxt|t t ¡ ¡d d… d�}| j|_| j|_	|j
d dkrpd|_| jdO  _q|d|_n|}| jsŠtd	ƒ‚| jr˜td
ƒ‚|d k	r¦||_|d k	r´||_	t|ƒ|_| j�* | j|dd��}| |¡ W 5 Q R X W 5 Q R X d S )Nr¢   r"   )rB   rd   rÆ   rv   i  ýAr)   r³  rØ  z?Can't write to ZIP archive while an open writing handle exists.r`  )r   )r³   rl  r¤   r
   r¸   r¹   rú   re   rý   rf   rB   rm   r<   r|   r  r0   rq   r  rA   r  )r€   Zzinfo_or_arcnamerV   re   rý   rÄ   rÚ  r   r   r   Úwritestrò  s:    


ÿÿÿ
zZipFile.writestrc                 C   s   |   ¡  d S rà   rv  r¦   r   r   r   Ú__del__  s    zZipFile.__del__c              	   C   s|   | j d krd S | jrtdƒ‚zB| jdkr\| jr\| j�" | jrJ| j  | j	¡ |  
¡  W 5 Q R X W 5 | j }d | _ |  |¡ X d S )NzvCan't close the ZIP file while there is an open writing handle on it. Close the writing handle before closing the zip.rÓ  )r<   r  r|   rs  r   rh  r  r$  rD   r[  Ú_write_end_recordr  r   r   r   r	    s    
zZipFile.closec                 C   s‚  | j D �]D}|j}|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }g }|jtksr|jtkr”| |j¡ | |j¡ d
}d
}n|j}|j}|jtkr¼| |j¡ d
}n|j}|j}	d}
|�rt|	dƒ}	t	j
ddt|ƒ  ddt|ƒ f|žŽ |	 }	t}
|jtk�r$tt|
ƒ}
n|jtk�r:tt|
ƒ}
t|
|jƒ}t|
|jƒ}zZ| ¡ \}}t	 
tt||j||j||j|||j||t|ƒt|	ƒt|jƒd|j|j|¡}W nl tk
�r   ttt||j||j|j |j|||j||t|j!ƒt|	ƒt|jƒd|j|j|ft"j#d� ‚ Y nX | j$ %|¡ | j$ %|¡ | j$ %|	¡ | j$ %|j¡ q| j$ &¡ }t| j ƒ}|| j' }| j'}d }|t(k�r†d}n|tk�r–d}n|tk�r¤d}|�r$| j)�s¾t*|d ƒ‚t	 
t+t,ddddd||||¡}| j$ %|¡ t	 
t-t.d|d¡}| j$ %|¡ t/|dƒ}t/|d
ƒ}t/|d
ƒ}t	 
t0t1dd||||t| j2ƒ¡	}| j$ %|¡ | j$ %| j2¡ | j3dk�rt| j$ 4¡  | j$ 5¡  d S )Nr   ru   r$   r   r!   r   r   r&   r    r�   )r   r,   ÚQr   r•  rÔ  zCentral directory offsetzCentral directory sizerÕ  é,   r   r   rb  )6r\  rd   rq   r�   rp   r1   rn   r3   r8   rF   r‘   r0   r“   re   r   r_   r”   r   r•   rh   rW   r–   r‚  r„  rg   ri   ro   rb   rl   rm   ÚDeprecationWarningr}  rj   rB   r}   Ústderrr<   r  rZ   r[  rÖ  rg  r   rJ   rK   rG   rH   rG  r]   r\   rj  r   Útruncaterë   )r€   rÄ   rš   r›   rœ   r3   rq   rp   rn   Z
extra_datar�   rh   rW   rB   rj   rŒ  Zpos2ZcentDirCountZcentDirSizeZcentDirOffsetr×  Zzip64endrecZzip64locrecrU   r   r   r   rÝ  5  s   $$
ÿ

 
þþþ
            ù           úú





ÿ        ý   þ


     þ
zZipFile._write_end_recordc                 C   s&   |  j d8  _ | j s"| js"| ¡  d S ©Nr   )ro  rm  r	  r  r   r   r   rs  �  s    zZipFile._fpclose)N)N)r_  N)F)NN)NNN)NNN)NN)#r   r   r   r<   rÀ  r   r�   ru  rz  rŽ   rr  r“  r”  r—  r™  rœ  rŸ  r^  rb   Úsetterr>   rA   r¬  r¸  rº  rÉ   rÆ  r¶  r´  r  rÛ  rÜ  r	  rÝ  rs  r   r   r   r   r   ¨  sR   ÿÿZN
			


b
+


*    ÿ
2   ÿ
)hc                   @   s0   e Zd Zdeddfdd„Zddd	„Zd
d„ ZdS )r   r_  TrÆ   c                 C   s   t j| ||||d� || _d S )N)r   rú   rt  )r   r�   Ú	_optimize)r€   r  r   rú   rt  Úoptimizer   r   r   r�   §  s    ÿzPyZipFile.__init__r„   Nc                 C   s¼  t  |¡}|rD||ƒsD| jr@t j |¡r,dnd}td||f ƒ d S t j |¡\}}t j |¡�rht j |d¡}t j |¡�r¸|r�d||f }n|}| jr¨td|d|ƒ |  	|dd	… |¡\}}	| jrÐtd
|	ƒ |  
||	¡ tt  |¡ƒ}
|
 d¡ |
D ]¼}t j ||¡}t j |¡\}}t j |¡�rRt j t j |d¡¡�r´| j|||d� qø|dkrø|�r~||ƒ�s~| jrøtd| ƒ qø|  	|dd	… |¡\}}	| j�r¨td
|	ƒ |  
||	¡ qøn®| j�rÊtd|ƒ tt  |¡ƒD ]Œ}t j ||¡}t j |¡\}}|dk�rØ|�r,||ƒ�s,| j�rØtd| ƒ �qØ|  	|dd	… |¡\}}	| j�rVtd
|	ƒ |  
||	¡ �qØnP|d	d … dk�r‚tdƒ‚|  	|dd	… |¡\}}	| j�r¬td|	ƒ |  
||	¡ d S )Nr»   r  z%s %r skipped by filterfuncz__init__.pyú%s/%szAdding package inÚasr   éýÿÿÿZAdding)Ú
filterfuncú.pyzfile %r skipped by filterfunczAdding files from directoryz.Files added with writepy() must end with ".py"zAdding file)ry   rµ   ri  r»   r�   r}  rÃ  r2   ÚisfileÚ_get_codenamer  ÚsortedÚlistdirÚremoveÚsplitextÚwritepyr÷   )r€   ÚpathnameÚbasenamerê  ZlabelÚdirr!  Zinitnamer²  rÁ   ZdirlistrB   r»   ÚrootZextr   r   r   rò  ­  s€    


ÿÿ


ÿ
ÿ
zPyZipFile.writepyc                    s  d‡ fdd„	}|d }|d }t jj|dd�}t jj|dd�}t jj|d	d�}ˆ jdk�r\tj |¡rˆt |¡jt |¡jkrˆ| }	}
nÒtj |¡r¶t |¡jt |¡jkr¶|}
|}	n¤tj |¡rät |¡jt |¡jkrä|}
|}	nvtj |¡�rt |¡jt |¡jk�r|}
|}	nD||ƒ�rRt	j
jd
k�r4|}
nt	j
jdk�rH|}
n|}
|}	n| }
}	n’ˆ jd
k�rr|}
|}	n<|}	ˆ jdk�rˆ|}
n&ˆ jd	k�rš|}
nd ˆ j¡}t|ƒ‚tj |
¡�rÖt |
¡jt |¡jk�sî||ˆ jd��sî| }
}	tj |	¡d }|�rd||f }|
|fS )NrÆ   c              
      sf   dd l }ˆ jrtd| ƒ z|j| d|d� W n4 |jk
r` } zt|jƒ W Y ¢dS d }~X Y nX dS )Nr   Z	CompilingT)Údoraiseræ  F)Ú
py_compileri  r}  ÚcompileÚPyCompileErrorÚmsg)r  ræ  rø  Úerrr¦   r   r   Ú_compile  s    

z)PyZipFile._get_codename.<locals>._compilerë  z.pycr„   )Úoptimizationr   r   r   z"invalid value for 'optimize': {!r})ræ  rç  )rÆ   )Ú	importlibÚutilÚcache_from_sourcerå  ry   r»   rì  rˆ   rº   r}   r�  ræ  Úformatr|   rÃ  )r€   ró  rô  rý  Zfile_pyZfile_pycZpycache_opt0Zpycache_opt1Zpycache_opt2rÁ   r²  rû  Zarchivenamer   r¦   r   rí  ÿ  sj    ÿ
ÿÿÿ

ÿzPyZipFile._get_codename)r„   N)r   r   r   r   r�   rò  rí  r   r   r   r   r   ¤  s    ÿ

Rc                 C   s   t  t| ƒdd ¡S rã  )Ú	itertoolsÚisliceÚ	_ancestry)r»   r   r   r   Ú_parentsR  s    r  c                 c   s4   |   tj¡} | r0| tjkr0| V  t | ¡\} }qd S rà   )r½  Ú	posixpathrz   rÃ  )r»   Útailr   r   r   r  e  s    r  c                 C   s   t  t|ƒj| ¡S rà   )r  ÚfilterfalseÚsetÚ__contains__)ZminuendZ
subtrahendr   r   r   Ú_difference  s    r  c                       sD   e Zd Zedd„ ƒZ‡ fdd„Zdd„ Zdd„ Zed	d
„ ƒZ	‡  Z
S )ÚCompleteDirsc                 C   s.   t j tt| ƒ¡}dd„ |D ƒ}tt|| ƒƒS )Nc                 s   s   | ]}|t j V  qd S rà   )r  rz   )r�  rÝ   r   r   r   r¿  �  s     z-CompleteDirs._implied_dirs.<locals>.<genexpr>)r  ÚchainÚfrom_iterablerÛ   r  Ú_deduper  )ÚnamesÚparentsZas_dirsr   r   r   Ú_implied_dirs�  s    zCompleteDirs._implied_dirsc                    s    t t| ƒ ¡ }|t|  |¡ƒ S rà   )rI  r  r“  r^   r  )r€   r  rJ  r   r   r“  “  s    zCompleteDirs.namelistc                 C   s   t |  ¡ ƒS rà   )r
  r“  r¦   r   r   r   Ú	_name_set—  s    zCompleteDirs._name_setc                 C   s,   |   ¡ }|d }||ko||k}|r(|S |S ©Nrv   )r  )r€   r!  r  rË  Z	dir_matchr   r   r   Úresolve_dirš  s    zCompleteDirs.resolve_dirc                 C   sN   t |tƒr|S t |tƒs | |ƒS d|jkr.t} |  | ¡}t|ƒ t|ƒ¡ |S r¥  )r³   r  r   r   Ú__new__ÚvarsÚupdate)rÀ   rÑ  Úresr   r   r   Úmake¤  s    



zCompleteDirs.make)r   r   r   Ústaticmethodr  r“  r  r  rÉ   r  rN  r   r   rJ  r   r  ‡  s   

r  c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )Ú
FastLookupc              
      s:   t  t¡� | jW  5 Q R £ S Q R X tt| ƒ ¡ | _| jS rà   )Ú
contextlibÚsuppressr)  Z_FastLookup__namesrI  r  r“  r¦   rJ  r   r   r“  ¾  s    zFastLookup.namelistc              
      s:   t  t¡� | jW  5 Q R £ S Q R X tt| ƒ ¡ | _| jS rà   )r  r  r)  Z_FastLookup__lookuprI  r  r  r¦   rJ  r   r   r  Ä  s    zFastLookup._name_set)r   r   r   r“  r  rN  r   r   rJ  r   r  ¹  s   r  c                   @   sš   e Zd ZdZd"dd„Zedd„ ƒZe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eZedd „ ƒZd!S )#r   z>{self.__class__.__name__}({self.root.filename!r}, {self.at!r})r„   c                 C   s   t  |¡| _|| _d S rà   )r  r  rö  Úat)r€   rö  r   r   r   r   r�   	  s    zPath.__init__c                 C   s   t  | jj| j¡S rà   )Ú	functoolsÚpartialrö  rA   r   r¦   r   r   r   rA   	  s    z	Path.openc                 C   s   t  | j d¡¡S r  )r  rô  r   r½  r¦   r   r   r   r!  	  s    z	Path.namec              
   O   s6   |   ¡ �$}tj|f|ž|Ž ¡ W  5 Q R £ S Q R X d S rà   )rA   r3  ÚTextIOWrapperr>   )r€   ÚargsÚkwargsÚstrmr   r   r   Ú	read_text	  s    
zPath.read_textc              
   C   s(   |   ¡ �}| ¡ W  5 Q R £ S Q R X d S rà   r¦  )r€   r&  r   r   r   Ú
read_bytes	  s    
zPath.read_bytesc                 C   s   t  |j d¡¡| j d¡kS r  )r  rË  r   r½  )r€   r»   r   r   r   Ú	_is_child"	  s    zPath._is_childc                 C   s   t | j|ƒS rà   )r   rö  )r€   r   r   r   r   Ú_next%	  s    z
Path._nextc                 C   s   | j  p| j  d¡S r  )r   Úendswithr¦   r   r   r   rŠ   (	  s    zPath.is_dirc                 C   s
   |   ¡  S rà   )rŠ   r¦   r   r   r   Úis_file+	  s    zPath.is_filec                 C   s   | j | j ¡ kS rà   )r   rö  r  r¦   r   r   r   rÌ  .	  s    zPath.existsc                 C   s.   |   ¡ stdƒ‚t| j| j ¡ ƒ}t| j|ƒS )NzCan't listdir a file)rŠ   r|   rÛ   r*  rö  r“  Úfilterr)  )r€   Zsubsr   r   r   Úiterdir1	  s    zPath.iterdirc                 C   s   t  | jj| j¡S rà   )r  r2   rö  rB   r   r¦   r   r   r   Ú__str__7	  s    zPath.__str__c                 C   s   | j j| d�S )Nr¦   )Ú_Path__reprr  r¦   r   r   r   rŽ   :	  s    zPath.__repr__c                 C   s    t  | j|¡}|  | j |¡¡S rà   )r  r2   r   r*  rö  r  )r€   ÚaddÚnextr   r   r   Újoinpath=	  s    zPath.joinpathc                 C   s(   t  | j d¡¡}|r|d7 }|  |¡S r  )r  rË  r   r½  r*  )r€   Z	parent_atr   r   r   ÚparentC	  s    zPath.parentN)r„   )r   r   r   r0  r�   r^  rA   r!  r'  r(  r)  r*  rŠ   r,  rÌ  r.  r/  rŽ   r3  Ú__truediv__r4  r   r   r   r   r   Ë  s(   A


c              	      sÆ  dd l }d}|j|d�}|jdd�}|jdddd	d
� |jdddddd� |jdddddd� |jddddd
� | | ¡} | jd k	rÄ| j}t|dƒ�}| ¡ }W 5 Q R X |rºtd 	|¡ƒ tdƒ nþ| j
d k	rô| j
}t|dƒ�}| ¡  W 5 Q R X nÎ| jd k	�r,| j\}}t|dƒ�}| |¡ W 5 Q R X n–| jd k	�rÂ| j d¡}	| j}
‡ fdd„‰ t|	dƒ�\}|
D ]P}tj |¡}|�s�tj tj |¡¡}|dtjtjfk�r¨d}ˆ |||ƒ �qfW 5 Q R X d S ) Nr   z3A simple command-line interface for zipfile module.)ÚdescriptionT)Zrequiredz-lz--listú	<zipfile>zShow listing of a zipfile)ÚmetavarÚhelpz-ez	--extractr   )r7  z<output_dir>zExtract zipfile into target dir)Únargsr8  r9  z-cz--createú+)z<name>z<file>zCreate zipfile from sourcesz-tz--testzTest if a zipfile is validr_  z.The following enclosed file is corrupted: {!r}zDone testingc                    sp   t j |¡r|  ||t¡ nPt j |¡rl|r8|  ||¡ tt  |¡ƒD ]$}ˆ | t j ||¡t j ||¡ƒ qFd S rà   )	ry   r»   rì  r  r   r�   rî  rï  r2   )rW  r»   ÚzippathZnm©ÚaddToZipr   r   r>  s	  s     ÿzmain.<locals>.addToZipr`  r„   )ÚargparseÚArgumentParserZadd_mutually_exclusive_groupÚadd_argumentÚ
parse_argsZtestr   r™  r}  r  r^   r—  r¸  rº  ZcreateÚpopry   r»   rô  rË  rÉ  rÊ  )r$  r?  r6  ÚparserÚgrouprÙ  rW  ZbadfilerÉ  Zzip_nameÚfilesr»   r<  r   r=  r   ÚmainK	  s\    
ÿ
þ
þ
ÿ




rG  Ú__main__)N)N)ŽZbinasciir!  Úimportlib.utilrÿ  r3  r  ry   r  rÏ  rˆ   rF   r}   rp  r¸   r  rö   rÐ   ÚImportErrorrø   rå   Ú__all__Ú	Exceptionr   r   r   r   r�   rÖ  r¢  r   r   r   r   r   r“   r”   r•   rŠ  r]   r\   r’   r[   rL   rM   rN   rO   rP   rQ   rR   ra   r~  r  r‚  r„  r�  rƒ  Z_CD_CREATE_VERSIONZ_CD_CREATE_SYSTEMZ_CD_EXTRACT_VERSIONZ_CD_EXTRACT_SYSTEMZ_CD_FLAG_BITSZ_CD_COMPRESS_TYPEZ_CD_TIMEZ_CD_DATEZ_CD_CRCZ_CD_COMPRESSED_SIZEZ_CD_UNCOMPRESSED_SIZEr…  r‡  rˆ  Z_CD_DISK_NUMBER_STARTZ_CD_INTERNAL_FILE_ATTRIBUTESZ_CD_EXTERNAL_FILE_ATTRIBUTESr‰  r—   r˜   r­  r®  Z_FH_EXTRACT_VERSIONZ_FH_EXTRACT_SYSTEMr±  Z_FH_COMPRESSION_METHODZ_FH_LAST_MOD_TIMEZ_FH_LAST_MOD_DATEZ_FH_CRCZ_FH_COMPRESSED_SIZEZ_FH_UNCOMPRESSED_SIZEr¯  r°  rG   rH   rE   rJ   rK   rI   Z_CD64_SIGNATUREZ_CD64_DIRECTORY_RECSIZEZ_CD64_CREATE_VERSIONZ_CD64_EXTRACT_VERSIONZ_CD64_DISK_NUMBERZ_CD64_DISK_NUMBER_STARTZ_CD64_NUMBER_ENTRIES_THIS_DISKZ_CD64_NUMBER_ENTRIES_TOTALZ_CD64_DIRECTORY_SIZEZ_CD64_OFFSET_START_CENTDIRrZ  ZStructr.   r8   r=   r	   rX   r9   Úobjectr
   rÚ   rÌ   rÞ   rß   rì   r†   rû   rþ   rÿ   r   r  r4  r  rO  r   r   r  r  ÚdictÚfromkeysr  r  r  r  r   rG  r   r   r   r   r   Ú<module>   sj  


       ý






+= q&ï
&  AN       /2 
=
