<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
a
    XC?hX                    @   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zd dlZejZW n ey   dZe jZY n0 zd dlZW n ey   dZY n0 zd dlZW n ey   dZY n0 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Z/dZ0d	Z1dZ2dZ3dZ4e	'e3Z5d 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$ZJe	'eIZKd ZLdZMdZNdZOdZPdZQdZRdZSd	ZTdZUdZVdZWd%ZXd&ZYe	'eXZZd'Z[d(Z\e	'e[Z]d Z^dZ_dZ`dZadZbdZcdZddZed	ZfdZgd)Zhe	id*Zjd+d, Zkd-d. Zld/d0 Zmd1d2 Znd3d4 ZoG d5d6 d6epZqdard7d8 Zsd9d: ZtG d;d< d<ZuG d=d> d>Zvd?d@dAdAdAdAdBdCdDdEdBdFdGdHdIdJdKdLZwdMdN ZxdndOdPZydQdR ZzG dSdT dTZ{G dUdV dVZ|G dWdX dXej}Z~G dYdZ dZej}ZG d[d\ d\ZG d]d^ d^eZd_d` Zdadb ZejZdcdd ZG dedf dfeZG dgdh dheZG didj djZdodkdlZedmkre  dS )p    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/python39/lib64/python3.9/zipfile.pyr   *   s   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   .   s   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rz|| ||d  \}}|d | }	||v 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y$   Y n0 dS )NTF)_EndRecDataOSErrorfpr   r   r   _check_zipfile   s    
r=   c                 C   sh   d}zLt | drt| d}n2t| d}t|}W d    n1 sD0    Y  W n tyb   Y n0 |S )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 0 | t}t|tkrF|S tt|\}}}}|tkrf|S |dksv|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   sf  |  dd |  }z|  t d W n ty:   Y d S 0 |  }t|tkr|dd tkr|dd  dkrtt	|}t
|}|d ||t  t| t |S t|d t d}|  |d |  }|t}|dkrb|||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_end_offsetNoName  r   r   r   r   r   c                 C   s   || _ |td}|dkr(|d| }tjdkrJtj|v rJ|tjd}|| _|| _|d dk rjtdt	| _
d | _d| _d| _tjdkrd| _nd| _t| _t| _d| _d| _d| _d| _d| _d| _d| _d | _d S )Nr   /rv   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   rp   rq   rs   )selfrB   rd   Z	null_byter   r   r   __init__X  s6    
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 u r|tkp|tk}|rd}
|t|
dt	|
d	 || }|tks|tkr|st
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   rv   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  sJ    $$



zZipInfo.FileHeaderc                 C   sB   z| j d| jfW S  ty<   | j d| jdB f Y S 0 d S )Nasciiutf-8   )rB   encoderj   UnicodeEncodeErrorr   r   r   r   r     s    zZipInfo._encodeFilenameFlagsc                 C   s2  | j }tj}t|dkr.|d|d d \}}|d t|krPtd||f |dkr|d|d  }z| jdv rd}|d|d d \| _|dd  }| jd	krd
}|d|d d \| _|dd  }| jd	krd}|d|d d \| _W n( tjy   td| dd Y n0 ||d d  }q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.)	r3   rF   r/   r0   r   rq   rp   rn   r   )r   r3   r/   tpZlnrV   Zfieldr   r   r   _decodeExtra  s6    



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 u rz|}tj
tj
|d }|d tjtjfv r|dd  }q|r|d7 }| ||}|jd	@ d
> |_|rd|_| jd
O  _n|j|_|S )Nr   r"   rv   ru   ;  )r   r         ;   r   r   rw   r   r)   )
isinstancerz   PathLikefspathr   S_ISDIRst_modetime	localtimest_mtimepathnormpath
splitdriver{   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 )Nrw   rB   r   r   r   r   r     s    zZipInfo.is_dir)rt   ru   )N)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)crcr7   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 ]}| qLfd	d
}|S )NixV4igE#ixV4   c                    s   |d?  || A d@  A S )Nr      r   )Zchr   )crctabler   r   crc325  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_keys9  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   	decrypterC  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   S  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   _initV  s
    
zLZMACompressor._initc                 C   s*   | j d u r|  | j | S | j |S r   )r   r   compress)r   rV   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   b  s    
zLZMACompressor.flushN)r   r   r   r   r   r   r   r   r   r   r   r   Q  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   j  s    zLZMADecompressor.__init__c              	   C   s   | j d u 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   o  s"    


zLZMADecompressor.decompressN)r   r   r   r   r   r   r   r   r   r   h  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 ur t|tjdS ttjtjdS | tkrT|d u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                   @   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lockZwritingr   r   r   r     s    z_SharedFile.__init__c                 C   s   | j S r   )r   r   r   r   r   rZ     s    z_SharedFile.tellr   c                 C   sZ   | j @ |  rtd| j|| | j | _| jW  d    S 1 sL0    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   rD   rZ   r   )r   rT   whencer   r   r   rD     s    z_SharedFile.seekr   c                 C   sd   | j J |  rtd| j| j | j|}| j | _|W  d    S 1 sV0    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   rD   r   r>   rZ   r   nrV   r   r   r   r>     s    z_SharedFile.readc                 C   s$   | j d ur | j }d | _ | | d S r   )r   r  )r   fileobjr   r   r   r    s    
z_SharedFile.closeN)r   )r   )r   r   r   r   rZ   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y   Y n0 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)  J  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   U  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  rx   r  ioBufferedIOBasereadline)r   limitr6   liner   r   r   r3  c  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   peeks  s    
zZipExtFile.peekc                 C   s   | j rtddS )NI/O operation on closed file.T)r.  r}   r   r   r   r   readable  s    zZipExtFile.readablec                 C   s  | j rtd|d u s|dk rV| j| jd  }d| _d| _| jsR|| | j7 }q:|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||7 }|t|8 }q|S )Nzread from closed file.r   r-   )r.  r}   r  r  r  _read1MAX_Nr0   )r   r  bufendrV   r   r   r   r>     s8    

zZipExtFile.readc                 C   s@   | j d u 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 u 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 Nr   r-   )r  r  r  r:  r;  r0   )r   r  r<  rV   r=  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rt	|| 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  r?  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 ur`| |}|S r@  )	r  r_   rC  minr  r>   r0   EOFErrorr(  r  r   r   r   rB    s    


zZipExtFile._read2c                    s0   z| j r| j  W t   nt   0 d S r   )r  r  r  superr   r   r   r   r    s    zZipExtFile.closec                 C   s   | j rtd| jS Nr8  )r.  r}   r"  r   r   r   r   r    s    zZipExtFile.seekabler   c                 C   sL  | j rtd| jstd|  }|dkr4|}n.|dkrF|| }n|dkrZ| j| }ntd|| jkrr| j}|dk r~d}|| }|| 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 ur|   |dkrDt| j|}| | ||8 }q|  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)r.  r}   r"  r1  UnsupportedOperationrZ   r%  r  r0   r  r  rD   r#  r&  r!  r$  r  r  r   r  r  r  r(  r)  rD  MAX_SEEK_READr>   )r   rT   r	  Zcurr_posZnew_posZread_offsetZbuff_offsetZread_lenr   r   r   rD     sL    






zZipExtFile.seekc                 C   s>   | j rtd| jstd| j| j t| j | j	 }|S )Nztell on closed file.rI  )
r.  r}   r"  r1  rJ  r%  r  r0   r  r  )r   Zfileposr   r   r   rZ   I  s    
zZipExtFile.tell)NF)r   )r   )r   )r   )r   r   r   r;  rC  rK  r   r)  r   r3  r7  r9  r>   r?  rA  r:  rB  r  r  rD   rZ   __classcell__r   r   rG  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   re   rf   _compressor
_file_size_compress_size_crc)r   zfr   r   r   r   r   r   S  s    z_ZipWriteFile.__init__c                 C   s   | j jS r   )rP  r<   r   r   r   r   r  ]  s    z_ZipWriteFile._fileobjc                 C   s   dS )NTr   r   r   r   r   writablea  s    z_ZipWriteFile.writablec                 C   s   | j rtdt|ttfr&t|}nt|}|j}|  j|7  _t	|| j
| _
| jrt| j|}|  jt|7  _| j| |S rH  )r.  r}   r   r   r   r0   
memoryviewnbytesrR  r   rT  rQ  r   rS  r  r  )r   rV   rX  r   r   r   r  d  s    
z_ZipWriteFile.writec              	      sj  | j r
d S zNt   | jrR| j }|  jt|7  _| j| | j| j	_
n
| j| j	_
| j| j	_| j| j	_| j	jd@ r| jrdnd}| jt|t| j	j| j	j
| j	j | j | j_nn| js| jtkrtd| jtkrtd| j | j_| j| j	j | j| j	| j | j| jj | jj| j	 | j	| jj| j	j< W d| j_ n
d| j_ 0 d S )Nr   z<LLQQz<LLLLz+File size unexpectedly exceeded ZIP64 limitz1Compressed size unexpectedly exceeded ZIP64 limitF)!r.  rF  r  rQ  r   rS  r0   r  r  rN  rp   rR  rT  ro   rq   rj   rO  rF   r   _DD_SIGNATURErZ   rP  	start_dirr   r   rD   rn   r   filelistr1   
NameToInforB   r  )r   r<  r   rG  r   r   r  w  sD    






z_ZipWriteFile.close)
r   r   r   r   propertyr  rV  r  r  rL  r   r   rG  r   rM  R  s   

rM  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   sH  |dvrt dt| || _d| _d| _i | _g | _|| _|| _|| _	d | _
d| _|| _t|tjrpt|}t|trd| _|| _dddd	dd
dd}|| }zt||| _W q ty   ||v r|| }Y q Y q0 qqnd| _|| _t|dd | _d| _t | _d| _d| _z|dkr2|   n|dv rd| _z| j  | _!W n0 t"tfy   t#| j| _d| _!d| _Y n40 z| j$| j! W n t"tfy   d| _Y n0 nd|dkrz|   | j$| j! W n4 t%y   | j$dd d| _| j  | _!Y n0 nt dW n$   | j}	d | _| &|	  Y n0 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_  r`  ra  rd  rb  rc  r   r  Tr^  )r_  r`  ra  r   z"Mode must be 'r', 'w', 'x', or 'a')'r}   r   _allowZip64
_didModifydebugr\  r[  r   r   r  r   _comment_strict_timestampsr   rz   r   r   str_filePassedrB   r1  rA   r<   r:   getattr_fileRefCnt	threadingRLockr  r"  r  _RealGetContentsrZ   rZ  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 urd| jr8|d| j  n| jd urR|d| j  |d| j  n
|d |d d|S )Nr,  z file=%rz filename=%rz mode=%rr-  r   r   )	r   r   r   r<   rl  r1   rB   r  r2   r/  r   r   r   r   !  s    



zZipFile.__repr__c                 C   s  | j }zt|}W n ty,   tdY n0 |s:td| jdkrLt| |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	@ rj|
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rtd| q| j}t9| j5dd ddD ]}||_:|j#}qd 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$   rv   r   r&   r   totalc                 S   s   | j S r   )rn   )r   r   r   r   <lambda>~  r-   z*ZipFile._RealGetContents.<locals>.<lambda>T)keyreverse);r<   r9   r:   r   rh  printrQ   rR   _ECD_COMMENTri  _ECD_LOCATIONrL   rK   rI   rE   rZ  rD   r>   r1  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   sortedrs   )r   r<   rU   Zsize_cdZ	offset_cdconcatZinferredrV   r{  centdirrB   flagsr`  tdZ
end_offsetr   r   r   r   rq  /  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>  r-   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   sp   d}| j D ]`}z>| |jd}||r,q W d    n1 s@0    Y  W q
 tyh   |j Y   S 0 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 u 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   	TypeErrorrv  r   r   )r   r   r   r   r   setpassword  s
    zZipFile.setpasswordc                 C   s   | j S r   )ri  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  rv  r   r0   ZIP_MAX_COMMENTwarningswarnri  rg  )r   rb   r  r   r   r   rb     s    
c                 C   s:   |  |d|}| W  d    S 1 s,0    Y  d S Nr^  rA   r>   )r   r  r   r<   r   r   r   r>     s    zZipFile.readFforce_zip64c                   sJ  |dvrt d|r0t|ts0tdt|j |rD|dkrDt d jsRt dt|trb|}n,|dkrt|} j|_	 j
|_n
 |}|dkr j||dS  jrt d  jd	7  _t j|j j j fd
d}zL|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rtd|j#|f |j$d ur|% |j& |j$krtd|j#d|jd	@ }
|
r|s j'}|st(d| nd }t)||||dW S    |*   Y n0 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   r|    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   rz  z/File name in directory %r and header %r differ.zOverlapped entries: z (possible zip bomb)z6File %r is encrypted, password required for extractionT)+r}   r   r   r  rv  r   r<   r
   r   re   r   rf   r  _open_to_writer  rn  r   rn   rr  r  r>   sizeFileHeaderr0   r   rF   r/   r   _FH_SIGNATUREr   _FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHrj   r   _FH_GENERAL_PURPOSE_FLAG_BITSr  rc   rs   rZ   rp   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d|_d|_d|_|jtkrJ| jdO  _| js^| jdO  _|j	sjd|_	| 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.r   r   r     g?T)rf  r}   r  rp   ro   rj   re   r   r"  rm   rq   r   r<   rD   rZ  rZ   rn   _writecheckrg  r  r   rM  )r   r   r  r   r   r   r   r  1  s4    


zZipFile._open_to_writec                 C   s*   |d u rt  }n
t |}| |||S r   )rz   getcwdr   _extract_member)r   memberr   r   r   r   r   extractZ  s    

zZipFile.extractc                 C   sH   |d u r|   }|d u r"t }n
t|}|D ]}| ||| q0d S r   )r  rz   r  r   r  )r   r   membersr   r*  r   r   r   
extractallg  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  r`  r   r   r   	<genexpr>  r-   z1ZipFile._sanitize_windows_name.<locals>.<genexpr>c                 s   s   | ]}|r|V  qd S r   r   r  r   r   r   r    r-   )!_windows_illegal_name_trans_tablerk  	maketransr0   	translatesplitr2   )r   r   pathseptableZillegalr   r   r   _sanitize_windows_namex  s    
zZipFile._sanitize_windows_namec              	      sx  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|}|rtj|st| | rtj|st| |S | j||dH}t|d}t|| W d    n1 sJ0    Y  W d    n1 sj0    Y  |S )	Nrw   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   re  )r   r
   r  rB   r|   rz   r   r{   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    

&


L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sHtdt|j | j	sd }t
| jtkrpd}n|jtkrd	}n|jtkrd
}|rt|d d S )Nr   zDuplicate name: %rr   r  r_  r`  ra  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   rf  r0   r[  ZIP_FILECOUNT_LIMITrq   r   rn   r   )r   r   r  requires_zip64r   r   r   r    s,    



zZipFile._writecheckc              	   C   s  | j std| jrtdtj||| jd}| rDd|_d|_n0|d urT||_	n| j
|_	|d u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 d    n1 s0    Y  nht|dL}| |d	}t||d
 W d    n1 sd0    Y  W d    n1 s0    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   TFr?   r_  i    ) r<   r}   r  r
   r   rj  r   rp   ro   re   r   rf   r   r  r"  rD   rZ  rZ   rn   r   rj   r  rg  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std	| jrtd
|d ur||_|d ur||_	t||_| jH | j|dd}|| W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r"   )rB   rd   r   rw   i  Ar)   r  r  z?Can't write to ZIP archive while an open writing handle exists.r_  )r  )r   rk  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   ru  r   r   r   r   __del__"  s    zZipFile.__del__c              	   C   s   | j d u rd S | jrtdzl| jdv rp| jrp| j, | jrJ| j | j | 	  W d    n1 sf0    Y  W | j }d | _ | 
| n| j }d | _ | 
| 0 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}   r  rg  r  r"  rD   rZ  _write_end_recordrr  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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| g|R  |	 }	t}
|jtkr&tt|
}
n|jtkr<t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r4d}|r| j#sNt$|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   rv   r$   r   r!   r   r   r&   r    r   )r   r,   Qr   r  zCentral directory offsetzCentral directory sizer  ,   r   r   ra  )0r[  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   r<   r  rZ   rZ  r  rf  r   rJ   rK   rG   rH   rD  r]   r\   ri  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  <  s    $$
















zZipFile._write_end_recordc                 C   s&   |  j d8  _ | j s"| js"|  d S Nr   )rn  rl  r  r  r   r   r   rr    s    zZipFile._fpclose)N)N)r^  N)F)NN)NNN)NNN)NN)#r   r   r   r<   r  r   r   rt  ry  r   rq  r  r  r  r  r  r  r]  rb   setterr>   rA   r  r  r  r   r  r  r  r  r  r  r  r  rr  r   r   r   r   r     sN   ZT
			


f
)


*  
2 
)^r   c                   @   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   rs  )r   r   	_optimize)r   r  r  r   rs  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|rd||f }n|}| jrtd|d| | 	|dd	 |\}}	| jrt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rtd|  q| 	|dd	 |\}}	| jrtd
|	 | 
||	 qn| jrtd| tt |D ]}t j||}t j|\}}|dkr|r,||s,| jrtd|  q| 	|dd	 |\}}	| jrVtd
|	 | 
||	 qnP|d	d  dkrtd| 	|dd	 |\}}	| jrt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)rz   r   rh  r   r   r  r  r2   isfile_get_codenamer  r  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|rt|jt|jkr| }	}
ntj|rt|jt|jkr|}
|}	ntj|rt|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|
rt|
jt|jks|| jds| }
}	tj|	d }|rd||f }|
|fS )Nr   c              
      sd   dd l } jrtd|  z|j| d|d W n2 |jy^ } zt|j W Y d }~dS d }~0 0 dS )Nr   Z	CompilingT)doraiser  F)
py_compilerh  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  rz   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
   

Rr   c                 C   s   t t| dd S r  )	itertoolsislice	_ancestry)r   r   r   r   _parentsO  s    r  c                 c   s2   |  tj} |  tjr.| V  t| \} }qd S r   )r  	posixpathr{   r  )r   tailr   r   r   r  b  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  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   )rF  r  r  r^   r  )r   r  rG  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 }||vo||v }|r(|S |S Nrw   )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v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  rL  r   r   rG  r   r    s   

r  c                       s(   e Zd Z fddZ fddZ  ZS )
FastLookupc                    sF   t t | jW  d    S 1 s&0    Y  tt|  | _| jS r   )
contextlibsuppressr'  Z_FastLookup__namesrF  r  r  r   rG  r   r   r    s    $zFastLookup.namelistc                    sF   t t | jW  d    S 1 s&0    Y  tt|  | _| jS r   )r  r  r'  Z_FastLookup__lookuprF  r  r  r   rG  r   r   r    s    $zFastLookup._name_set)r   r   r   r  r  rL  r   r   rG  r   r    s   r  c                   @   s   e Zd ZdZd#ddZd$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__r^  c                 O   s\   | dd }|d }| jj| j||d}d|v rD|s8|r@td|S tj|g|R i |S )Nr   r   r  bz*encoding args invalid for binary operation)popr  rA   r  r}   r1  TextIOWrapper)r   r  argskwargsr   Zzip_modestreamr   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   sD   | j dg|R i |}| W  d    S 1 s60    Y  d S r  r  )r   r#  r$  strmr   r   r   	read_text'	  s    zPath.read_textc                 C   s6   |  d}| W  d    S 1 s(0    Y  d S )Nr?   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   _next2	  s    z
Path._nextc                 C   s   | j  p| j dS r  )r  endswithr   r   r   r   r   5	  s    zPath.is_dirc                 C   s
   |    S r   )r   r   r   r   r   is_file8	  s    zPath.is_filec                 C   s   | j | j v 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   iterdir>	  s    zPath.iterdirc                 C   s   t | jj| jS r   )r  r2   r  rB   r  r   r   r   r   __str__D	  s    zPath.__str__c                 C   s   | j j| dS )Nr   )_Path__reprr  r   r   r   r   r   G	  s    zPath.__repr__c                 C   s    t | j|}| | j|S r   )r  r2   r  r*  r  r  )r   addnextr   r   r   joinpathJ	  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   parentP	  s    zPath.parentN)r   )r^  )r   r   r   r0  r   rA   r]  r  r'  r(  r)  r*  r   r,  r  r.  r/  r   r3  __truediv__r4  r   r   r   r   r     s&   A


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r| j}t|d}| }W d    n1 s0    Y  |rtd	| td nB| j
d ur"| j
}t|d}|  W d    n1 s0    Y  n| jd urp| j\}}t|d}|| W d    n1 sd0    Y  n| jd ur| jd}	| j}
 fdd t|	df}|
D ]P}tj|}|stjtj|}|dtjtjfv rd} ||| qW d    n1 s0    Y  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   )	rz   r   r  r  r   r   r  r  r2   )rU  r   zippathZnmaddToZipr   r   r>  	  s    zmain.<locals>.addToZipr_  r   )argparseArgumentParserZadd_mutually_exclusive_groupadd_argument
parse_argstestr   r  r  r  r^   r  r  r  Zcreater!  rz   r   r  r  r  r  )r#  r?  r6  parsergroupr  rU  Zbadfiler  Zzip_namefilesr   r<  r   r=  r   mainX	  s\    





&*
,rG  __main__)N)N)Zbinasciiimportlib.utilr  r1  r  rz   r  r  r   rF   r~   ro  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_CENTDIRrY  ZStructr.   r8   r=   r	   rX   r9   objectr
   r   r   r   r   r   r   r   r   r   r   r  r2  r  rM  r   r   r  r  dictfromkeysr  r  r  r  r   rG  r   r   r   r   r   <module>   sR  









+= ^&
(  KU        /2 
=
