o
     JAf	[                    @   s8  	 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yP   dZe jZY nw zd dlZW n eyb   dZY nw zd dlZW n eyt   dZY nw g d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%ZYd&ZZe	(eYZ[d'Z\d(Z]e	(e\Z^d Z_dZ`dZadZbdZcdZddZedZfd	ZgdZhd)Zie	jd*Zkd+d, Zld-d. Zmd/d0 Znd1d2 Zod3d4 ZpG d5d6 d6eqZrdasd7d8 Ztd9d: ZuG d;d< d<ZvG d=d> d>Zwi d d?dd@ddAddAddAddAddBddCd	dDddEddBd
dFddGd"dHdIdJdKdLdMdNZxdOdP ZydpdQdRZzdSdT Z{G dUdV dVZ|G dWdX dXZ}G dYdZ dZej~ZG d[d\ d\ej~ZG d]d^ d^ZG d_d` d`eZdadb Zdcdd ZejZ	 dedf ZG dgdh dheZG didj djeZG dkdl dlZdpdmdnZedokre  dS dS )q    N)
BadZipFile
BadZipfileerror
ZIP_STOREDZIP_DEFLATED	ZIP_BZIP2ZIP_LZMA
is_zipfileZipInfoZipFile	PyZipFileLargeZipFilePathc                   @      e Zd ZdS )r   N__name__
__module____qualname__ r   r   /usr/lib/python3.10/zipfile.pyr   +       r   c                   @   r   )r   Nr   r   r   r   r   r   /   r   r   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rD|| ||d  \}}|d | }	||v r:||kr6|| ||  |	}d}|	}|d t| ks|sH| S d|S )NFr   r"   T    )_EXTRA_FIELD_STRUCTunpacklenappendjoin)
extraZxidsr1   ZmodifiedbufferstartiZxidZxlenjr   r   r   _strip_extra   s"   	
r:   c                 C   s*   z
t | rW dS W dS  ty   Y dS w )NTF)_EndRecDataOSErrorfpr   r   r   _check_zipfile   s   r?   c                 C   sr   	 d}z+t | drt| d}W |S t| d}t|}W d    W |S 1 s'w   Y  W |S  ty8   Y |S w )NFreadr=   rb)hasattrr?   openr<   )filenameresultr>   r   r   r   r	      s    

r	   c              
   C   s  	 z
|  |t d W n ty   | Y S w | t}t|tkr$|S tt|\}}}}|tkr4|S |dks<|dkr@t	d|  |t t
 d | t
}t|t
krW|S tt|\
}}}	}
}}}}}}|tkrm|S ||t< ||t< ||t< ||t< ||t< ||t< ||t< |S )Nr    r   r   z3zipfiles that span multiple disks are not supported)seeksizeEndCentDir64Locatorr<   r@   r2   structr1   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datasigZdisknoZreloffZdisksZszcreate_versionZread_versionZdisk_numZdisk_dirZdircountZ	dircount2ZdirsizeZ	diroffsetr   r   r   _EndRecData64   s>   


r[   c           	      C   sd  	 |  dd |  }z	|  t d W n
 ty   Y d S w |  }t|tkrV|dd tkrV|dd  dkrVtt	|}t
|}|d ||t  t| t |S t|d t d}|  |d |  }|t}|dkr|||t  }t|tkrd S t
tt	|}|t }||t |t |  }|| |||  t| || | |S d S )Nr   r    r"   s     r/   i   )rF   tellsizeEndCentDirr<   r@   r2   stringEndArchiverH   r1   structEndArchivelistr3   r[   maxrfind_ECD_COMMENT_SIZE)	rU   ZfilesizerX   rW   ZmaxCommentStartr7   ZrecDataZcommentSizecommentr   r   r   r;     sD   


r;   c                   @   sZ   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_filenamerD   	date_timecompress_type_compresslevelre   r5   create_systemrZ   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r%tj|v r%|tjd}|| _|| _|d dk r5tdt	| _
d | _d| _d| _tjdkrJd| _nd| _t| _t| _d| _d| _d| _d| _d| _d| _d| _d S )Nr   /rx   z+ZIP does not support timestamps before 1980r/   win32r!   )rf   findchrossepreplacerD   rg   
ValueErrorr   rh   ri   re   r5   sysplatformrj   DEFAULT_VERSIONrZ   rk   rl   rm   rn   ro   rp   rs   rt   )selfrD   rg   Z	null_byter   r   r   __init__X  s4   

zZipInfo.__init__c                 C   s   d| j j| jf g}| jtkr|dt| j| j  | jd? }| jd@ }|r2|dt	
|  |r;|d|  |  }|rD| jrL|d| j  |rQ| jrd| jtks\| j| jkrd|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   rD   rh   r   r3   compressor_namesgetrp   statfilemodeis_dirrt   rs   r4   )r   rE   hiloisdirr   r   r   __repr__  s,   







zZipInfo.__repr__Nc                 C   sz  	 | j }|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }| jd
@ r4d } }}n	| j}| j}| j}| j}d}	|d u rN|tkpM|tk}|rbd}
|t|
dt	|
d	 || }|tksj|tkrv|spt
dd}d}t}	| jtkrtt|	}	n
| jtkrtt|	}	t|	| j| _t|	| j| _|  \}}ttt| j| j|| j|||||t|t|}|| | S )Nr   rx   r&   r   r#   r    r!   r(   r"   r   z<HHQQz'Filesize would require ZIP64 extensions    )rg   rm   rr   rs   rt   r5   ZIP64_LIMITrH   packcalcsizer   ZIP64_VERSIONrh   r   rb   BZIP2_VERSIONr   LZMA_VERSIONrk   rZ   _encodeFilenameFlagsstructFileHeaderstringFileHeaderrl   r2   )r   zip64dtdosdatedostimerr   rs   rt   r5   min_versionfmtrD   rm   headerr   r   r   
FileHeader  sL   $$





zZipInfo.FileHeaderc                 C   s>   z
| j d| jfW S  ty   | j d| jdB f Y S w )Nasciiutf-8   )rD   encoderm   UnicodeEncodeErrorr   r   r   r   r     s
   zZipInfo._encodeFilenameFlagsc                 C   s6  | j }tj}t|dkr|d|d d \}}|d t|kr'td||f |dkr|d|d  }zD| jdv rLd}|d|d d \| _|dd  }| jd	krdd
}|d|d d \| _|dd  }| jd	krvd}|d|d d \| _W n tjy   td| dd w ||d d  }t|dksd S d S )Nr"   r.   z"Corrupt extra field %04x (size=%d)r   )l    r   z	File sizez<Qr   r   zCompress sizezHeader offsetzCorrupt zip64 extra field. z not found.)	r5   rH   r1   r2   r   rt   rs   rq   r   )r   r5   r1   tpZlnrX   Zfieldr   r   r   _decodeExtra  s<   


zZipInfo._decodeExtraTstrict_timestampsc          	      C   s  	 t |tjrt|}t|}t|j}t|j	}|dd }|s.|d dk r.d}n
|s8|d dkr8d}|d u r>|}tj
tj
|d }|d tjtjfv rd|dd  }|d tjtjfv sT|rj|d7 }| ||}|jd	@ d
> |_|rd|_| jd
O  _|S |j|_|S )Nr   r$   rx   rw   ;  )r   r         ;   r   r   ry   r   r+   )
isinstancer}   PathLikefspathr   S_ISDIRst_modetime	localtimest_mtimepathnormpath
splitdriver~   altseprp   rt   st_size)	clsrD   arcnamer   str   mtimerg   zinfor   r   r   	from_file  s6   


zZipInfo.from_filec                 C   s   	 | j d dkS )Nry   rD   r   r   r   r   r     s   zZipInfo.is_dir)rv   rw   N)r   r   r   	__slots__r   r   r   r   r   classmethodr   r   r   r   r   r   r
   >  s    
+
.%r
   c                 C   s0   t dD ]}| d@ r| d? dA } q| dL } q| S )Nr   r   l    q[ )range)crcr9   r   r   r   _gen_crc  s
   
r   c                    sl   dddt d u rttttda t fdd  fdd| D ]}| q&fd	d
}|S )NixV4igE#ixV4   c                    s   	 |d?  || A d@  A S )Nr      r   )Zchr   )crctabler   r   crc324  s   z_ZipDecrypter.<locals>.crc32c                    s<    | d@  d@ d d d@  d? d S )Nr   r   ir      r   )c)r   key0key1key2r   r   update_keys8  s   
z"_ZipDecrypter.<locals>.update_keysc                    sP   	 t  }|j}| D ]} dB }|||dA  d? d@ N }| || q	t|S )Nr    r   r   r   )	bytearrayr3   bytes)rX   rE   r3   r   k)r   r   r   r   	decrypterB  s   
z _ZipDecrypter.<locals>.decrypter)	_crctablera   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 r   )_compr   r   r   r   r   R  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"   )
lzma_encode_filter_propertiesFILTER_LZMA1r   
FORMAT_RAW_decode_filter_propertiesr   rH   r   r2   )r   Zpropsr   r   r   _initU  s
   
zLZMACompressor._initc                 C   s*   | j d u r|  | j | S | j |S r   )r   r   compress)r   rX   r   r   r   r   \  s   
zLZMACompressor.compressc                 C   s&   | j d u r|  | j   S | j  S r   )r   r   flushr   r   r   r   r   a  s   

zLZMACompressor.flushN)r   r   r   r   r   r   r   r   r   r   r   r   P  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   i  s   
zLZMADecompressor.__init__c              	   C   s   | j d u rM|  j|7  _t| jdkrdS td| jdd \}t| jd| kr,d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   r2   rH   r1   r   r   r   r   r   
decompressr   )r   rX   ZpsizerE   r   r   r   r   n  s"   


zLZMADecompressor.decompressN)r   r   r   r   r   r   r   r   r   r   g  s    r   storeZshrinkreduceZimplodetokenizeZdeflateZ	deflate64bzip2r   Zterse   Zlz77a   Zwavpackb   Zppmdc                 C   s\   | t krd S | tkrtstdd S | tkrtstdd S | tkr*ts(tdd S td)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   sf   | t kr|d urt|tjdS ttjtjdS | tkr*|d ur&t|S t S | tkr1t	 S d S )N)
r   r   compressobjDEFLATEDZ_DEFAULT_COMPRESSIONr   r   BZ2Compressorr   r   )rh   compresslevelr   r   r   _get_compressor  s   
r  c                 C   sp   t |  | tkr
d S | tkrtdS | tkrt S | tkr"t	 S t
| }|r1td| |f td| f )Nr   zcompression type %d (%s)zcompression type %d)r   r   r   r   decompressobjr   r   BZ2Decompressorr   r   r   r   r   )rh   Zdescrr   r   r   _get_decompressor  s   

r	  c                   @   s8   e Zd Zdd Zdd ZdddZdd	d
Zdd ZdS )_SharedFilec                 C   s*   || _ || _|| _|| _|| _|j| _d S r   )_file_pos_close_lock_writingseekable)r   fileposcloselockwritingr   r   r   r     s   z_SharedFile.__init__c                 C      | j S r   )r  r   r   r   r   r]        z_SharedFile.tellr   c                 C   sZ   | j   |  rtd| j|| | j | _| jW  d    S 1 s&w   Y  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  rF   r]   r  )r   rV   whencer   r   r   rF     s   $z_SharedFile.seekr   c                 C   sd   | j % |  rtd| j| j | j|}| j | _|W  d    S 1 s+w   Y  d S )NyCan'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  rF   r  r@   r]   r   nrX   r   r   r   r@     s   $z_SharedFile.readc                 C   s(   | j d ur| j }d | _ | | d S d S r   )r  r  )r   fileobjr   r   r   r    s
   
z_SharedFile.closeNr   r   )r   r   r   r   r]   rF   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>   rV   r   r>   r   r   r   r     s   
z_Tellable.__init__c                 C   s   | j |}|  j|7  _|S r   )r>   writerV   )r   rX   r  r   r   r   r"    s   z_Tellable.writec                 C   r  r   )rV   r   r   r   r   r]     r  z_Tellable.tellc                 C      | j   d S r   )r>   r   r   r   r   r   r        z_Tellable.flushc                 C   r#  r   )r>   r  r   r   r   r   r    r$  z_Tellable.closeN)r   r   r   r   r"  r]   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r=|j| _td| _nd | _d| _z| r\| | _|j| _|j| _| j| _d| _W n	 tyf   Y nw d | _|r|j d@ ry|j!d? d@ }n|jd? d@ }| " }||krt#d	|j$ d S d S )
NFr/   r   rr   Tr   r   r   zBad password for file %r)%_fileobj_pwd_close_fileobjrh   _compress_typers   _compress_leftrt   _leftr	  _decompressor_eof_readbuffer_offsetnewlinesmoderD   namerB   rr   _expected_crcr   _running_crc	_seekabler  r]   _orig_compress_start_orig_compress_size_orig_file_size_orig_start_crcAttributeError
_decrypterrm   ru   _init_decrypterr   rf   )r   r  r1  zipinfor   Zclose_fileobjZ
check_bytehr   r   r   r     sN   


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<  I  s   zZipExtFile._init_decrypterc                 C   sv   d| j j| j jf g}| js,|d| j| jf  | jtkr+|dt	
| j| j  n|d |d d|S )N<%s.%sz name=%r mode=%rr   	 [closed]r   r   )r   r   r   closedr3   r2  r1  r)  r   r   r   r4   r   rE   r   r   r   r   T  s   



zZipExtFile.__repr__r   c                 C   sN   	 |dk r | j d| jd }|dkr | j | j| }|| _|S tj| |S )Nr      
r   )r.  r{   r/  ioBufferedIOBasereadline)r   limitr8   liner   r   r   rF  b  s   zZipExtFile.readliner   c                 C   st   	 |t | j| j kr/| |}t || jkr&|| j| jd   | _d| _n	|  jt |8  _| j| j| jd  S )Nr   i   )r2   r.  r/  r@   )r   r  chunkr   r   r   peekr  s   
zZipExtFile.peekc                 C   s   | j rtddS )NI/O operation on closed file.T)rA  r   r   r   r   r   readable  s   zZipExtFile.readablec                 C   s$  	 | j rtd|d u s|dk r.| j| jd  }d| _d| _| js,|| | j7 }| jr!|S || j }|t| jk rG| j| j| }|| _|S |t| j }| j| jd  }d| _d| _|dkr| js| |}|t|k r|| _|| _||d | 7 }	 |S ||7 }|t|8 }|dkr| jrc|S )Nzread from closed file.r   r/   )rA  r   r.  r/  r-  _read1MAX_Nr2   )r   r  bufendrX   r   r   r   r@     s@   

	zZipExtFile.readc                 C   sD   | j d u rd S t|| j| _| jr| j| j kr td| j d S d S )NzBad CRC-32 for file %r)r3  r   r4  r-  r   r2  )r   newdatar   r   r   _update_crc  s   
zZipExtFile._update_crcc                 C   s  	 |d u s	|dk r.| j | jd  }d| _ d| _| js,| | j}|r)||7 }	 |S | jr|S || j }|t| j k rG| j | j| }|| _|S |t| j  }| j | jd  }d| _ d| _|dkr| js| |}|t|k r|| _ || _||d | 7 }	 |S |r||7 }	 |S | jrc|S Nr   r/   )r.  r/  r-  rM  rN  r2   )r   r  rO  rX   rP  r   r   r   read1  sJ   


zZipExtFile.read1c                 C   s   | j s|dkr	dS | jtkr$| jj}|t|kr#|| |t| 7 }n| |}| jtkr5| jdk| _ n<| jtkrat	|| j
}| j||}| jjpT| jdkoT| jj | _ | j r`|| j 7 }n| j|}| jjpo| jdk| _ |d | j }|  jt|8  _| jdkrd| _ | | |S )Nr   r/   T)r-  r)  r   r,  unconsumed_tailr2   _read2r   r*  rb   MIN_READ_SIZEr   r   r   r+  rR  r  r   r   r   rM    s8   






zZipExtFile._read1c                 C   sd   | j dkrdS t|| j}t|| j }| j|}|  j t|8  _ |s&t| jd ur0| |}|S rS  )	r*  rb   rW  minr&  r@   r2   EOFErrorr;  r  r   r   r   rV    s   


zZipExtFile._read2c                    s>   z| j r| j  W t   d S W t   d S t   w r   )r(  r&  r  superr   r   r   r   r  
  s   zZipExtFile.closec                 C   s   | j rtd| jS NrK  )rA  r   r5  r   r   r   r   r    s   zZipExtFile.seekabler   c                 C   sJ  | j rtd| jstd|  }|dkr|}n|dkr#|| }n|dkr-| j| }ntd|| jkr9| j}|dk r?d}|| }|| j }|dkrY|t| j	k rY|| _d}n1|dk r| j
| j | j| _| j| _| j| _d| _	d| _t| j| _d| _|}| jd ur|   |dkrt| j|}| | ||8 }|dks|  S )	Nzseek on closed file.!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)rA  r   r5  rD  UnsupportedOperationr]   r8  r/  r2   r.  r&  rF   r6  r9  r4  r7  r*  r+  r	  r)  r,  r-  r;  r<  rX  MAX_SEEK_READr@   )r   rV   r  Zcurr_posZnew_posZread_offsetZbuff_offsetZread_lenr   r   r   rF     sN   





zZipExtFile.seekc                 C   s>   | j rtd| jstd| j| j t| j | j	 }|S )Nztell on closed file.r]  )
rA  r   r5  rD  r^  r8  r+  r2   r.  r/  )r   Zfileposr   r   r   r]   H  s   
zZipExtFile.tell)NFr  r   r  )r   r   r   rN  rW  r_  r   r<  r   rF  rJ  rL  r@   rR  rT  rM  rV  r  r  rF   r]   __classcell__r   r   r[  r   r%    s,    
3


#
%$
2r%  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  rh   ri   _compressor
_file_size_compress_size_crc)r   zfr   r   r   r   r   r   R  s   
z_ZipWriteFile.__init__c                 C   s   | j jS r   )re  r>   r   r   r   r   r&  \  s   z_ZipWriteFile._fileobjc                 C   s   dS )NTr   r   r   r   r   writable`     z_ZipWriteFile.writablec                 C   s   | j rtdt|ttfrt|}nt|}|j}|  j|7  _t	|| j
| _
| jr:| j|}|  jt|7  _| j| |S r\  )rA  r   r   r   r   r2   
memoryviewnbytesrg  r   ri  rf  r   rh  r&  r"  )r   rX   rn  r   r   r   r"  c  s   
z_ZipWriteFile.writec              	      sf  | j rd S zt   | jr(| j }|  jt|7  _| j| | j| j	_
n| j| j	_
| j| j	_| j| j	_| j	jd@ r_| jrBdnd}| jt|t| j	j| j	j
| j	j | j | j_n7| jst| jtkrktd| jtkrttd| j | j_| j| j	j | j| j	| j | j| jj | jj| j	 | j	| jj| j	j< W d| j_ d S d| j_ w )Nr   z<LLQQz<LLLLz+File size unexpectedly exceeded ZIP64 limitz1Compressed size unexpectedly exceeded ZIP64 limitF)!rA  rZ  r  rf  r   rh  r2   r&  r"  rc  rs   rg  ri  rr   rt   rm   rd  rH   r   _DD_SIGNATUREr]   re  	start_dirr   r   rF   rq   r   filelistr3   
NameToInforD   r  )r   rO  r   r[  r   r   r  v  sD   






z_ZipWriteFile.close)
r   r   r   r   propertyr&  rk  r"  r  ra  r   r   r[  r   rb  Q  s    

rb  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d@d(d)Zed*d+ Zd,d- Zd.d/ Z		d@d0d1Z	d?d2d3Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"dS )Ar   NrTr   c          
   	   C   sB  	 |dvr	t dt| || _d| _d| _i | _g | _|| _|| _|| _	d | _
d| _|| _t|tjr9t|}t|trqd| _|| _dddd	dd
dd}|| }	 z	t||| _W n tyn   ||v rm|| }Y qR w 	 nd| _|| _t|dd | _d| _t | _d| _d| _z|dkr|   W d S |dv rd| _z| j  | _!W n t"tfy   t#| j| _d| _!d| _Y W d S w z| j$| j! W W d S  t"tfy   d| _Y W d S w |dkrz|   | j$| j! W W d S  t%y   | j$dd d| _| j  | _!Y W d S w t d   | j}	d | _| &|	  )N)rt  wxaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Fr   r/   rA   w+bx+br+bwbxb)rt  ru  rv  rw  rz  rx  ry  Tr   r2  rt  )ru  rv  rw  r    z"Mode must be 'r', 'w', 'x', or 'a')'r   r   _allowZip64
_didModifydebugrr  rq  r   r  r1  r   _comment_strict_timestampsr   r}   r   r   str_filePassedrD   rD  rC   r>   r<   getattr_fileRefCnt	threadingRLockr  r5  r  _RealGetContentsr]   rp  r:  r  rF   r   _fpclose)
r   r  r1  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__  rl  zZipFile.__enter__c                 C   s   |    d S r   r  )r   typevalue	tracebackr   r   r   __exit__     zZipFile.__exit__c                 C   s   d| j j| j jf g}| jd ur2| jr|d| j  n| jd ur)|d| j  |d| j  n|d |d d|S )Nr?  z file=%rz filename=%rz mode=%rr@  r   r   )	r   r   r   r>   r  r3   rD   r1  r4   rB  r   r   r   r      s   




zZipFile.__repr__c                 C   s  	 | j }zt|}W n ty   tdw |std| jdkr%t| |t }|t }|t | _	|t
 | | }|t tkrF|tt 8 }| jdkrV|| }td||| || | _| jdk rdtd|| jd ||}t|}d}||k rb|t}	t|	tkrtdtt|	}	|	t tkrtd| jdkrt|	 ||	t }
|	d	 }|d
@ r|
d}
n|
d}
t|
}||	t |_||	t  |_!|	t" |_#|	dd \|_$|_%|_&|_'|_(|_)}}|_*|_+|_,|j&t-krt.d|j&d  |	dd \|_/|_0|_1||_2|d? d |d	? d@ |d@ |d? |d	? d@ |d@ d f|_3|4  |j#| |_#| j56| || j7|j8< |t |	t  |	t  |	t   }| jdkr\td| ||k s|d S d S )NzFile is not a zip filer   r    zgiven, inferred, offsetr   z Bad offset for central directoryzTruncated central directoryz&Bad magic number for central directoryr#   r   r   cp437r   zzip file version %.1fr'   r*   r-   r&   rx   r   r(   r   total)9r>   r;   r<   r   r  printrS   rT   _ECD_COMMENTr  _ECD_LOCATIONrN   rM   rK   rG   rp  rF   r@   rD  BytesIOsizeCentralDirr2   rH   r1   structCentralDir_CD_SIGNATUREstringCentralDir_CD_FILENAME_LENGTHdecoder
   _CD_EXTRA_FIELD_LENGTHr5   _CD_COMMENT_LENGTHre   _CD_LOCAL_HEADER_OFFSETrq   rZ   rj   rk   rl   rm   rh   rr   rs   rt   MAX_EXTRACT_VERSIONr   rn   ro   rp   ru   rg   r   rq  r3   rr  rD   )r   r>   rW   Zsize_cdZ	offset_cdconcatZinferredrX   r  centdirrD   flagsrv  tdr   r   r   r  .  s   














zZipFile._RealGetContentsc                 C   s   	 dd | j D S )Nc                 S   s   g | ]}|j qS r   r   ).0rX   r   r   r   
<listcomp>  s    z$ZipFile.namelist.<locals>.<listcomp>rq  r   r   r   r   namelist~  s   zZipFile.namelistc                 C      	 | j S r   r  r   r   r   r   infolist  s   zZipFile.infolistc                 C   sN   	 t dd |d | jD ]}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  rq  rg   rD   rt   )r   r  r   dater   r   r   printdir  s   
zZipFile.printdirc              	   C   sz   	 d}| j D ]4}z$| |jd}||r	 ||sW d    n1 s&w   Y  W q ty:   |j Y   S w d S )Ni   rt  )rq  rC   rD   r@   r   )r   Z
chunk_sizer   fr   r   r   testzip  s   


zZipFile.testzipc                 C   s&   	 | j |}|d u rtd| |S )Nz(There is no item named %r in the archive)rr  r   KeyError)r   r2  infor   r   r   getinfo  s   zZipFile.getinfoc                 C   s:   	 |rt |tstdt|j |r|| _d S d | _d S )Npwd: expected bytes, got %s)r   r   	TypeErrorr  r   r   )r   r   r   r   r   setpassword  s   

zZipFile.setpasswordc                 C   r  r   )r  r   r   r   r   re     s   zZipFile.commentc                 C   s^   t |tstdt|j t|tkr'd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  r  r   r2   ZIP_MAX_COMMENTwarningswarnr  r~  )r   re   r  r   r   r   re     s   

c                 C   s<   	 |  |d|}| W  d    S 1 sw   Y  d S Nrt  rC   r@   )r   r2  r   r>   r   r   r   r@     s   $zZipFile.readFforce_zip64c                   s  	 |dvr	t d|rt|tstdt|j |r#|dkr#t d js*t dt|tr2|}n|dkrCt|} j|_	 j
|_n |}|dkrS j||dS  jrZt d  jd	7  _t j|j j j fd
d}z|t}t|tkrtdtt|}|t tkrtd||t }|t r||t  |jd@ rt d|jd@ rt d|t! d@ r|"d}	n|"d}	|	|j#krtd|j#|f |jd	@ }
|
r|s j$}|st%d| nd }t&||||dW S    |'   )N>   rt  ru  zopen() requires mode "r" or "w"r  ru  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>  s    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  r  r   r>   r
   r   rh   r  ri   r  _open_to_writer  r  r
  rq   r  r  r@   sizeFileHeaderr2   r   rH   r1   r   _FH_SIGNATUREr   _FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHrm   r   _FH_GENERAL_PURPOSE_FLAG_BITSr  rf   r   r   r%  r  )r   r2  r1  r   r  r   Zzef_fileZfheaderfnameZ	fname_strZis_encryptedr   r   r   rC     s~   









zZipFile.openc                 C   s   |r	| j s	td| jrtdd|_d|_d|_|jtkr%| jdO  _| js/| jdO  _|j	s5d|_	| j o@|p@|j
d tk}| jrK| 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.r   r    r     g?T)r}  r   r  rs   rr   rm   rh   r   r5  rp   rt   r   r>   rF   rp  r]   rq   _writecheckr~  r"  r   rb  )r   r   r  r   r   r   r   r  (  s4   


zZipFile._open_to_writec                 C   s,   	 |d u r
t  }nt |}| |||S r   )r}   getcwdr   _extract_member)r   memberr   r   r   r   r   extractQ  s
   

zZipFile.extractc                 C   sJ   	 |d u r	|   }|d u rt }nt|}|D ]	}| ||| qd S r   )r  r}   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  rv  r   r   r   	<genexpr>y      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_tabler  	maketransr2   	translatesplitr4   )r   r   pathseptableZillegalr   r   r   _sanitize_windows_nameo  s   
zZipFile._sanitize_windows_namec              	      s  	 t |ts| |}|jdtjj}tjjr"|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rT| |tjj}tj||}tj|}tj|}|rttj|stt| | rtj|st| |S | j||d,}t|d}t|| W d    n1 sw   Y  W d    |S W d    |S 1 sw   Y  |S )	Nry   r   r   c                 3   s    | ]	}| vr|V  qd S r   r   r  Zinvalid_path_partsr   r   r    s    z*ZipFile._extract_member.<locals>.<genexpr>\r   r{  )r   r
   r  rD   r   r}   r   r~   r   r   curdirpardirr4   r  r  r   dirnameexistsmakedirsr   r   mkdirrC   shutilcopyfileobj)r   r  
targetpathr   r   Z	upperdirssourcetargetr   r  r   r  ~  s>   

&

(zZipFile._extract_memberc                 C   s   	 |j | jv rdd l}|jd|j  dd | jdvrtd| js%tdt|j | j	sPd }t
| jtkr9d}n|jtkrAd	}n|jtkrHd
}|rRt|d d S d S )Nr   zDuplicate name: %rr!   r  ru  rv  rw  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)rD   rr  r  r  r1  r   r>   r   rh   r}  r2   rq  ZIP_FILECOUNT_LIMITrt   r   rq   r   )r   r   r  requires_zip64r   r   r   r    s2   



zZipFile._writecheckc              	   C   s  	 | j std| jrtdtj||| jd}| r#d|_d|_n|d ur+||_	n| j
|_	|d ur7||_n| j|_| r| jH | jrM| j | j | j  |_|j	tkr_| jdO  _| | d| _| j| || j|j< | j |d | j  | _W d    d S 1 sw   Y  d S t|d.}| |d	}t||d
 W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N7Attempt to write to ZIP archive that was already closedz>Can't write to ZIP archive while an open writing handle existsr   r   r    TFrA   ru  i    ) r>   r   r  r
   r   r  r   rs   rr   rh   r   ri   r  r  r5  rF   rp  r]   rq   r   rm   r  r~  rq  r3   rr  rD   r"  r   rC   r  r  )r   rD   r   rh   r  r   srcdestr   r   r   r"    sL   

"PzZipFile.writec              	   C   s4  	 t |tr|d}t |ts=t|tt d d d}| j|_| j|_	|j
d dkr9d|_| jdO  _nd|_n|}| jsFtd	| jrMtd
|d urT||_|d ur[||_	t||_| j- | j|dd}|| W d    n1 s{w   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r$   )rD   rg   r   ry   i  Ar+   r  r  z?Can't write to ZIP archive while an open writing handle exists.ru  )r1  )r   r  r   r
   r   r   r   rh   r  ri   rD   rp   r>   r   r  r2   rt   r  rC   r"  )r   Zzinfo_or_arcnamerX   rh   r  r   r  r   r   r   writestr  sD   



"zZipFile.writestrc                 C   s   	 |    d S r   r  r   r   r   r   __del__  s   zZipFile.__del__c              	   C   s   	 | j d u rd S | jrtdza| jdv rG| jrU| j | jr&| j | j | 	  W d    n21 s4w   Y  W | j }d | _ | 
| d S W | j }d | _ | 
| d S W | j }d | _ | 
| d S W | j }d | _ | 
| d S | j }d | _ | 
| w )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   r1  r~  r  r5  rF   rp  _write_end_recordr  r!  r   r   r   r    s<   

zZipFile.closec                 C   s
  | j D ]}|j}|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }g }|jtks8|jtkrI||j ||j d
}d
}n|j}|j}|jtkr]||j d
}n|j}|j}	d}
|rt|	d}	t	j
ddt|  ddt| g|R  |	 }	t}
|jtkrtt|
}
n
|jtkrtt|
}
t|
|j}t|
|j}| \}}t	
tt||j||j||j|||j||t|t|	t|jd|j|j|}| 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}|rV| 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	
t*t+dd||||t| j,	}| j| | j| j, | j-dkr~| j.  | j/  d S )Nr   rx   r&   r   r#   r    r!   r(   r"   r   r`  r.   Qr   r  zCentral directory offsetzCentral directory sizer  ,   r   r   rw  )0rq  rg   rt   r   rs   r3   rq   r5   r:   rH   r   r2   r   rh   r   rb   r   r   r   rk   rZ   r   r  r  rj   rl   rr   re   ro   rp   r>   r"  r]   rp  r  r}  r   rL   rM   rI   rJ   rX  r`   r_   r  r1  truncater   )r   r   r   r   r   r5   rt   rs   rq   Z
extra_datar   rk   rZ   rD   rm   r  Zpos2ZcentDirCountZcentDirSizeZcentDirOffsetr  Zzip64endrecZzip64locrecrW   r   r   r   r  3  s   
$$



















zZipFile._write_end_recordc                 C   s.   |  j d8  _ | j s| js|  d S d S d S Nr   )r  r  r  r!  r   r   r   r    s   zZipFile._fpcloser   )rt  N)F)NN)NNN)#r   r   r   r>   r  r   r   r  r  r   r  r  r  r  r  r  r  rs  re   setterr@   rC   r  r  r  r   r  r  r  r"  r  r  r  r  r  r   r   r   r   r     sR    ZP
			



b
)

*
2
)^r   c                   @   s2   e Zd Z	 deddfddZddd	Zd
d ZdS )r   rt  Tr   c                 C   s   t j| ||||d || _d S )N)r1  r   r  )r   r   	_optimize)r   r  r1  r   r  optimizer   r   r   r     s   
zPyZipFile.__init__r   Nc                 C   s  	 t |}|r#||s#| jr!t j|rdnd}td||f  d S t j|\}}t j|r.t j|d}t j|r|rHd||f }n|}| jrTtd|d| | 	|dd	 |\}}	| jrhtd
|	 | 
||	 tt |}
|
d |
D ]Y}t j||}t j|\}}t j|rt jt j|dr| j|||d q||dkr|r||s| jrtd|  q|| 	|dd	 |\}}	| jrtd
|	 | 
||	 q|d S | jrtd| tt |D ]D}t j||}t j|\}}|dkr+|r||s| jrtd|  q| 	|dd	 |\}}	| jr%td
|	 | 
||	 qd S |d	d  dkr;td| 	|dd	 |\}}	| jrPt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)r}   r   r  r   r   r  r  r4   isfile_get_codenamer"  sortedlistdirremovesplitextwritepyr   )r   pathnamebasenamer  Zlabeldirr2  Zinitnamer  r   dirlistrD   r   root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rtj|rDt|jt|jkrD| }	}
ntj|r[t|jt|jkr[|}
|}	ntj|rrt|jt|jkrr|}
|}	nztj|rt|jt|jkr|}
|}	nc||rt	j
jd
kr|}
nt	j
jdkr|}
n|}
|}	nH| }
}	nC jd
kr|}
|}	n|}	 jdkr|}
n jd	kr|}
n
d j}t|tj|
rt|
jt|jks|| jds| }
}	tj|	d }|rd||f }|
|fS )Nr   c              
      sb   dd l } jrtd|  z|j| d|d W dS  |jy0 } zt|j W Y d }~dS d }~ww )Nr   Z	CompilingT)doraiser  F)
py_compiler  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  r}   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    sb   





zPyZipFile._get_codename)r   N)r   r   r   r   r   r
  r  r   r   r   r   r     s    

Rr   c                 C   s   	 t t| dd S r  )	itertoolsislice	_ancestry)r   r   r   r   _parentsF  s   r   c                 c   sP    	 |  tj} | r"| tjkr&| V  t| \} }| r$| tjksd S d S d S d S r   )r  	posixpathr~   r  )r   tailr   r   r   r  Y  s   r  c                 C   s   	 t t|j| S r   )r  filterfalseset__contains__)ZminuendZ
subtrahendr   r   r   _differences  s   r&  c                       sF   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!  r~   )r  r   r   r   r   r    r  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   )rZ  r'  r  ra   r-  )r   r+  r[  r   r   r    s   zCompleteDirs.namelistc                 C   s   t |  S r   )r$  r  r   r   r   r   	_name_set  r  zCompleteDirs._name_setc                 C   s.   	 |   }|d }||vo||v }|r|S |S Nry   )r.  )r   r2  r+  r  Z	dir_matchr   r   r   resolve_dir  s
   zCompleteDirs.resolve_dirc                 C   s:   	 t |tr|S t |ts| |S d|jvrt} | |_|S r  )r   r'  r   r1  r   )r   r  r   r   r   make  s   


zCompleteDirs.make)r   r   r   staticmethodr-  r  r.  r0  r   r1  ra  r   r   r[  r   r'  {  s    

r'  c                       s*   e Zd Z	  fddZ fddZ  ZS )
FastLookupc                    F   t t | jW  d    S 1 sw   Y  tt|  | _| jS r   )
contextlibsuppressr:  Z_FastLookup__namesrZ  r3  r  r   r[  r   r   r    
    zFastLookup.namelistc                    r4  r   )r5  r6  r:  Z_FastLookup__lookuprZ  r3  r.  r   r[  r   r   r.    r7  zFastLookup._name_set)r   r   r   r  r.  ra  r   r   r[  r   r3    s    r3  c                   @   s   e Zd Z	 dZd&ddZd'd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   )r3  r1  r  at)r   r  r8  r   r   r   r   	  s   	
zPath.__init__rt  Nr  c                O   s   	 |   r	t| |d }|  s|dkrt| | jj| j||d}d|v r1|s+|r/td|S t	|
d|d< tj|g|R i |S )Nr   rt  r  bz*encoding args invalid for binary operationencoding)r   IsADirectoryErrorr  FileNotFoundErrorr  rC   r8  r   rD  text_encodingr   TextIOWrapper)r   r1  r   argskwargsZzip_modestreamr   r   r   rC   	  s   z	Path.openc                 C   s   t | jjp
| jjS r   )pathlibr   r8  r2  rD   r   r   r   r   r2  0	     z	Path.namec                 C   s   t | jj| jS r   )rB  r   r  rD   joinpathr8  r   r   r   r   rD   4	  rC  zPath.filenamec                 O   sX   t |d|d< | jdg|R i |}| W  d    S 1 s%w   Y  d S )Nr:  rt  )rD  r=  r   rC   r@   )r   r?  r@  strmr   r   r   	read_text8	  s   $zPath.read_textc                 C   s6   |  d}| W  d    S 1 sw   Y  d S )NrA   r  )r   rE  r   r   r   
read_bytes=	  s   $zPath.read_bytesc                 C   s   t |jd| jdkS r/  )r!  r  r8  r  )r   r   r   r   r   	_is_childA	  s   zPath._is_childc                 C   s   |  | j|S r   )r   r  )r   r8  r   r   r   _nextD	  r$  z
Path._nextc                 C   s   | j  p	| j dS r/  )r8  endswithr   r   r   r   r   G	  s   zPath.is_dirc                 C   s   |   o|   S r   )r  r   r   r   r   r   is_fileJ	     zPath.is_filec                 C   s   | j | j v S r   )r8  r  r.  r   r   r   r   r  M	  s   zPath.existsc                 C   s.   |   stdt| j| j }t| j|S )NzCan't listdir a file)r   r   r   rI  r  r  filterrH  )r   Zsubsr   r   r   iterdirP	  s   zPath.iterdirc                 C   s   t | jj| jS r   )r!  r4   r  rD   r8  r   r   r   r   __str__V	  rL  zPath.__str__c                 C   s   | j j| dS )Nr   )_Path__reprr  r   r   r   r   r   Y	  r$  zPath.__repr__c                 G   s&   t j| jg|R  }| | j|S r   )r!  r4   r8  rI  r  r0  )r   othernextr   r   r   rD  \	  s   zPath.joinpathc                 C   s6   | j s| jjS t| j d}|r|d7 }| |S r/  )r8  rD   parentr!  r  r  rI  )r   Z	parent_atr   r   r   rS  b	  s   
zPath.parent)r   )rt  )r   r   r   rP  r   rC   rs  r2  rD   rF  rG  rH  rI  r   rK  r  rN  rO  r   rD  __truediv__rS  r   r   r   r   r     s.    M


r   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 urm| j}t|d}| }W d    n1 sYw   Y  |rgtd	| td d S | j
d ur| j
}t|d}|  W d    d S 1 sw   Y  d S | jd ur| j\}}t|d}|| W d    d S 1 sw   Y  d S | jd ur| jd}	| j}
 fdd t|	d1}|
D ]%}tj|}|stjtj|}|dtjtjfv rd} ||| qW d    d S 1 sw   Y  d S d S ) Nr   z3A simple command-line interface for zipfile module.)descriptionT)requiredz-lz--list	<zipfile>zShow listing of a zipfile)metavarhelpz-ez	--extractr    )rW  z<output_dir>zExtract zipfile into target dir)nargsrX  rY  z-cz--create+)z<name>z<file>zCreate zipfile from sourcesz-tz--testzTest if a zipfile is validrt  z.The following enclosed file is corrupted: {!r}zDone testingc                    sv   t j|r| ||t d S t j|r7|r| || tt |D ]} | t j||t j|| q$d S d S r   )	r}   r   r  r"  r   r   r  r  r4   )rj  r   zippathZnmaddToZipr   r   r^  	  s   zmain.<locals>.addToZipru  r   )argparseArgumentParseradd_mutually_exclusive_groupadd_argument
parse_argstestr   r  r  r  ra   r  r  r  Zcreatepopr}   r   r  r  r  r  )r?  r_  rU  parsergroupr  rj  Zbadfiler  Zzip_namefilesr   r\  r   r]  r   mainl	  sh   








"

"$ri  __main__r   )Zbinasciiimportlib.utilr  rD  r  r}   r!  r  r   rH   r   r  r   r5  rB  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^   rN   rO   rP   rQ   rR   rS   rT   rd   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  rI   rJ   rG   rL   rM   rK   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_CENTDIRro  Structr0   r:   r?   r	   r[   r;   objectr
   r   r   r   r   r   r   r   r  r	  r
  r  rE  r%  rb  r   r   r   r  dictfromkeysr*  r&  r'  r3  r   ri  r   r   r   r   r   <module>   s   








+= \&	

(  KU     w /1 
.
=
