Your IP : 3.141.4.8
U
i�f�Y�@s
ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZddlZddl
Z
ddlZzddlZejZWnek
r�dZejZYnXzddlZWnek
r�dZYnXzddlZWnek
r�dZYnXdddddddd d
ddd
dg
ZGdd�de�ZGdd
�d
e�ZeZZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'e
�(e&�Z)dZ*dZ+dZ,dZ-dZ.d Z/d!Z0d"Z1dZ2d#Z3d$Z4d%Z5e
�(e4�Z6dZ7dZ8dZ9dZ:dZ;d Z<d!Z=d"Z>dZ?d#Z@d&ZAd'ZBdZCd(ZDdZEd)ZFd*ZGd+ZHd,ZId-ZJd.ZKe
�(eJ�ZLdZMdZNdZOdZPdZQd ZRd!ZSd"ZTdZUd#ZVd&ZWd'ZXd/ZYd0ZZe
�(eY�Z[d1Z\d2Z]e
�(e\�Z^dZ_dZ`dZadZbdZcd Zdd!Zed"ZfdZgd#Zhd3Zie
�jd4�Zkd5d6�Zld7d8�Zmd9d �Znd:d;�Zod<d=�ZpGd>d
�d
eq�Zrdasd?d@�ZtdAdB�ZuGdCdD�dD�ZvGdEdF�dF�ZwdGdHdIdIdIdIdJdKdLdMdJdNdOdPdQdRdSdT�ZxdUdV�ZydsdWdX�ZzdYdZ�Z{Gd[d\�d\�Z|Gd]d^�d^�Z}Gd_d`�d`ej~�ZGdadb�dbej~�Z�Gdcd�d�Z�Gddd�de��Z�dedf�Z�dgdh�Z�e�j�Z�didj�Z�Gdkdl�dle��Z�Gdmdn�dne��Z�Gdod�d�Z�dtdpdq�Z�e�drk�re��dS)u�N�
BadZipFile�
BadZipfile�error�
ZIP_STORED�ZIP_DEFLATED� ZIP_BZIP2�ZIP_LZMA�
is_zipfile�ZipInfo�ZipFile� PyZipFile�LargeZipFile�Pathc@seZdZdS)rN��__name__�
__module__�__qualname__�rr�,/opt/alt/python38/lib64/python3.8/zipfile.pyr+sc@seZdZdS)r
Nrrrrrr
/si���������-�.�?s<4s4H2LHsPK�������� z<4s4B4HL2L5H2LsPK�
��
����z<4s2B4HL2L2HsPKz<4sLQLsPKz
<4sQ2H2L4QsPKiPK�<HHc
Cs�tj}d}g}d}}|dt|�krz||||d��\}}|d|} ||krt||krl|�|||��| }d}| }q|s�|Sd�|�S)NFrr T�)�_EXTRA_FIELD_STRUCT�unpack�len�append�join)
�extraZxidsr/Zmodified�buffer�start�iZxidZxlen�jrrr�_strip_extra�s r8cCs,zt|�rWdSWntk
r&YnXdS)NTF)�_EndRecData�OSError��fprrr�_check_zipfile�s
r=c CsVd}z8t|d�rt|d�}nt|d��}t|�}W5QRXWntk
rPYnX|S)NF�readr;�rb)�hasattrr=�openr:)�filename�resultr<rrrr �s
c
Csz|�|td�Wntk
r,|YSX|�t�}t|�tkrH|St�t|�\}}}}|tkrh|S|dksx|dkr�t d��|�|tt
d�|�t
�}t|�t
kr�|St�t|�\
}}} }
}}}
}}}|tkr�|S||t
<||t<||t<|
|t<||t<||t<||t<|S)Nrrrz3zipfiles 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�dataZsigZdisknoZreloffZdisksZsz�create_versionZread_versionZdisk_numZdisk_dirZdircountZ dircount2ZdirsizeZ diroffsetrrr�
_EndRecData64�s@
�rXc Csh|�dd�|��}z|�td�Wntk
r<YdSX|��}t|�tkr�|dd�tkr�|dd�dkr�t�t |�}t
|�}|�d�|�|t�t|t|�St
|dtd�}|�|d�|��}|�t�}|dk�rd|||t�}t|�tk�rdSt
t�t |��}|t}||t|t|�}|�|�|�||�t|||||�SdS)Nrrr ���sr-i)rD�tell�sizeEndCentDirr:r>r0�stringEndArchiverFr/�structEndArchive�listr1rX�max�rfind�_ECD_COMMENT_SIZE) rSZfilesizerVrUZmaxCommentStartr5ZrecDataZcommentSize�commentrrrr9sD��
�r9c@sXeZdZdZddd�Zdd�Zdd d
�Zdd�Zd
d�Ze ddd�dd��Z
dd�ZdS)r
)�
orig_filenamerB� date_time�
compress_type�_compresslevelrbr3�
create_systemrW�extract_version�reserved� flag_bits�volume�
internal_attr�
external_attr�
header_offset�CRC�
compress_size� file_size� _raw_time�_end_offset�NoName��rrrrrcCs�||_|�td��}|dkr(|d|�}tjdkrJtj|krJ|�tjd�}||_||_|ddkrjtd��t |_
d|_d|_d|_
tjdkr�d|_nd|_t|_t|_d|_d|_d|_d|_d|_d|_dS)Nr�/rvz+ZIP does not support timestamps before 1980r-Zwin32r)rc�find�chr�os�sep�replacerBrd�
ValueErrorrrerfrbr3�sys�platformrg�DEFAULT_VERSIONrWrhrirjrkrlrmrs)�selfrBrdZ null_byterrr�__init__Ys2
zZipInfo.__init__cCs�d|jj|jfg}|jtkr8|�dt�|j|j��|jd?}|jd@}|rd|�dt �
|��|rv|�d|�|��}|r�|jr�|�d|j�|r�|j
r�|jtks�|j|j
kr�|�d|j
�|�d �d
�|�S)Nz<%s filename=%r� compress_type=%sr)rz filemode=%rz external_attr=%#xz
file_size=%rz compress_size=%r�>�)� __class__rrBrerr1�compressor_names�getrm�stat�filemode�is_dirrqrpr2)r�rC�hi�lo�isdirrrr�__repr__�s0
��
�
�
zZipInfo.__repr__NcCs||j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}|jd
@rfd}}}n|j}|j}|j}|j}d} |dkr�|tkp�|tk}|r�d}
|t�|
dt� |
�d ||�}|tks�|tkr�|s�t
d��d
}d
}t} |jt
k�rtt| �} n|jtk�rtt| �} t| |j�|_t| |j�|_|��\}}t�tt|j|j||j|||||t|�t|��
}
|
||S)Nrrvr$rr!rrr&r rz<HHQQz'Filesize would require ZIP64 extensions���)rdrjrorprqr3�ZIP64_LIMITrF�pack�calcsizer
�
ZIP64_VERSIONrerr_�
BZIP2_VERSIONr�LZMA_VERSIONrhrW�_encodeFilenameFlags�structFileHeader�stringFileHeaderrir0)r��zip64�dt�dosdate�dostimerorprqr3�min_version�fmtrBrj�headerrrr�
FileHeader�s^$$
�
�zZipInfo.FileHeadercCsDz|j�d�|jfWStk
r>|j�d�|jdBfYSXdS)N�ascii�utf-8�)rB�encoderj�UnicodeEncodeError�r�rrrr��szZipInfo._encodeFilenameFlagscCs�|j}tj}t|�dk�r�|d|dd��\}}|dt|�krPtd||f��|dk�rp|dkrv|d|dd��}nV|dkr�|d |dd
��}n:|dkr�|d|dd
��}n|dkr�d}ntd||f��d}|jdk�rt|�|kr�td��|||_|d7}|jdk�r6t|�|k�r$td��|||_|d7}|jdk�rpt|�|k�rXtd��|j}|||_|d7}||dd�}qdS)Nr r,z"Corrupt extra field %04x (size=%d)r�z<QQQ�r)z<QQrrz<Qrrr)l����r�z/Corrupt zip64 extra field. File size not found.r�z3Corrupt zip64 extra field. Compress size not found.z3Corrupt zip64 extra field. Header offset not found.)r3rFr/r0rrqrprn)r�r3r/�tpZlnZcounts�idx�oldrrr�_decodeExtra�sP
�
�
�
zZipInfo._decodeExtraT��strict_timestampsc Cst|tj�rt�|�}t�|�}t�|j�}t�|j �}|dd�}|sZ|ddkrZd}n|sn|ddkrnd}|dkrz|}tj
�tj
�|�d�}|dtj
tjfkr�|dd�}q�|r�|d7}|||�}|jd @d
>|_|r�d|_|jd
O_n|j|_|S)Nrr"rvru�;)r�r���;r�rrwrr))�
isinstancerz�PathLike�fspathr��S_ISDIR�st_mode�time� localtime�st_mtime�path�normpath�
splitdriver{�altseprmrq�st_size) �clsrB�arcnamer��str��mtimerd�zinforrr� from_files0
zZipInfo.from_filecCs|jddkS)N���rw�rBr�rrrr�'szZipInfo.is_dir)rtru)N)N)rrr� __slots__r�r�r�r�r��classmethodr�r�rrrrr
>s
,
.2%cCs0td�D]"}|d@r"|d?dA}q|dL}q|S)Nrrl q[)�range)�crcr7rrr�_gen_crc1s
r�csld�d�d�tdkr&ttttd���at��fdd������fdd��|D]}�|�qL��fd d
�}|S)NixV4i�gE#i�xV4�cs|d?�||Ad@AS)Nr�r)Zchr�)�crctablerr�crc32Ksz_ZipDecrypter.<locals>.crc32cs<�|�����d@d@��ddd@���d?���dS)Nr�r�i�rr�r)�c)r��key0�key1�key2rr�update_keysOs
z"_ZipDecrypter.<locals>.update_keyscsNt�}|j}|D]4}�dB}|||dAd?d@N}�|�||�qt|�S)Nrrrr�)� bytearrayr1�bytes)rVrCr1r��k)r�r�rr� decrypterYs
z _ZipDecrypter.<locals>.decrypter)� _crctabler^�mapr�r�)�pwd�pr�r)r�r�r�r�r�r�r�
_ZipDecrypterAs
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd S)
�LZMACompressorcCs
d|_dS�N)�_compr�rrrr�iszLZMACompressor.__init__cCsFt�dtji�}tjtjt�tj|�gd�|_t�dddt |��|S)N�id��filtersz<BBHr$r )
�lzmaZ_encode_filter_properties�FILTER_LZMA1r��
FORMAT_RAW�_decode_filter_propertiesr�rFr�r0)r�Zpropsrrr�_initls
�
zLZMACompressor._initcCs*|jdkr|��|j�|�S|j�|�Sr�)r�r��compress)r�rVrrrr�ss
zLZMACompressor.compresscCs&|jdkr|��|j��S|j��Sr�)r�r��flushr�rrrr�xs
zLZMACompressor.flushN)rrrr�r�r�r�rrrrr�gsr�c@seZdZdd�Zdd�ZdS)�LZMADecompressorcCsd|_d|_d|_dS)Nr-F)�_decomp�_unconsumed�eofr�rrrr��szLZMADecompressor.__init__c Cs�|jdkr�|j|7_t|j�dkr*dSt�d|jdd��\}t|j�d|krXdStjtjt�tj |jdd|��gd�|_|jd|d�}|`|j�
|�}|jj|_|S)Nr r-z<Hrr�)r�r�r0rFr/r�r�r�r�r��
decompressr�)r�rVZpsizerCrrrr��s"
��
zLZMADecompressor.decompressN)rrrr�r�rrrrr�~sr�ZstoreZshrink�reduceZimplode�tokenizeZdeflateZ deflate64Zbzip2r�ZterseZlz77ZwavpackZppmd)rrrrr r!r"r#rr$r%rrr+��a�bcCsX|tkr
nJ|tkr tsTtd��n4|tkr6tsTtd��n|tkrLtsTtd��ntd��dS)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) rr�zlib�RuntimeErrorr�bz2rr��NotImplementedError)�compressionrrr�_check_compression�s$���r�cCsj|tkr2|dk r t�|tjd�St�tjtjd�S|tkrT|dk rLt�|�St��S|tkrbt �SdSdS)N��)
rr�ZcompressobjZDEFLATEDZZ_DEFAULT_COMPRESSIONrr�Z
BZ2Compressorrr�)re�
compresslevelrrr�_get_compressor�s
r�cCsvt|�|tkrdS|tkr&t�d�S|tkr6t��S|tkrDt �St
�|�}|rdtd||f��ntd|f��dS)Nr�zcompression type %d (%s)zcompression type %d)
r�rrr�Z
decompressobjrr�ZBZ2Decompressorrr�r�r�r�)reZdescrrrr�_get_decompressor�s
rc@s0eZdZdd�Zddd�Zd
dd�Zd d
�ZdS)�_SharedFilecCs2||_||_||_||_||_|j|_|j|_dSr�)�_file�_pos�_close�_lock�_writing�seekablerZ)r��file�pos�close�lockZwritingrrrr��sz_SharedFile.__init__rc
CsN|j�>|��rtd��|j�||�|j��|_|jW5QR�SQRXdS)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.)rrr}rrDrZr)r�rT�whencerrrrD�sz_SharedFile.seekr�c
CsX|j�H|��rtd��|j�|j�|j�|�}|j��|_|W5QR�SQRXdS)N�yCan't read from the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)rrr}rrDrr>rZ�r��nrVrrrr>�sz_SharedFile.readcCs$|jdk r |j}d|_|�|�dSr�)rr)r��fileobjrrrr
s
z_SharedFile.closeN)r)r�)rrrr�rDr>r
rrrrr�s
rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd d
�ZdS)� _TellablecCs||_d|_dS�Nr)r<rT�r�r<rrrr�
sz_Tellable.__init__cCs|j�|�}|j|7_|Sr�)r<�writerT)r�rVrrrrrsz_Tellable.writecCs|jSr�)rTr�rrrrZsz_Tellable.tellcCs|j��dSr�)r<r�r�rrrr�sz_Tellable.flushcCs|j��dSr�)r<r
r�rrrr
sz_Tellable.closeN)rrrr�rrZr�r
rrrrr s
rcs�eZdZdZdZdZd'dd�Zdd �Zd
d�Zd(d
d�Z d)dd�Z
dd�Zd*dd�Zdd�Z
dd�Zdd�Zdd�Z�fdd�Zd d!�Zd+d#d$�Zd%d&�Z�ZS),�
ZipExtFilei@iiNFcCs(||_||_||_|j|_|j|_|j|_t |j�|_
d|_d|_d|_
d|_||_|j|_t|d�rz|j|_td�|_nd|_d|_z4|��r�|��|_|j|_|j|_|j|_d|_Wntk
r�YnXd|_|�r$|j d@r�|j!d?d@}n|jd?d@}|�"�}||k�r$t#d |j$��dS)
NFr-rroTrr�r�zBad 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� _seekablerrZ�_orig_compress_start�_orig_compress_size�_orig_file_size�_orig_start_crc�AttributeError�
_decrypterrjrr�_init_decrypterr�rc)r�rr!�zipinfor�Z
close_fileobjZ
check_byte�hrrrr�+sF
zZipExtFile.__init__cCs4t|j�|_|j�d�}|jd8_|�|�dS)Nrr&)r�rr+rr>r)r�r�rrrr,^szZipExtFile._init_decryptercCsvd|jj|jjfg}|jsX|�d|j|jf�|jtkrb|�dt �
|j|j��n
|�d�|�d�d�|�S)N�<%s.%sz name=%r mode=%rr�� [closed]r�r�)r�rr�closedr1r"r!rrr�r�r2�r�rCrrrr�is�
��
zZipExtFile.__repr__r�cCsL|dkr>|j�d|j�d}|dkr>|j|j|�}||_|Stj�||�S)Nr�
r)rrxr�io�BufferedIOBase�readline)r��limitr6�linerrrr6wszZipExtFile.readlinercCsr|t|j�|jkr\|�|�}t|�|jkrJ||j|jd�|_d|_n|jt|�8_|j|j|jd�S)Nri)r0rrr>)r�r�chunkrrr�peek�s
zZipExtFile.peekcCsdS�NTrr�rrr�readable�szZipExtFile.readablecCs|dks|dkrH|j|jd�}d|_d|_|jsD||�|j�7}q,|S||j}|t|j�krz|j|j|�}||_|S|t|j�}|j|jd�}d|_d|_|dkr�|js�|�|�}|t|�kr�||_||_||d|�7}q�||7}|t|�8}q�|S�Nrr-�rrr�_read1�MAX_Nr0)r�r�buf�endrVrrrr>�s4
zZipExtFile.readcCs@|jdkrdSt||j�|_|jr<|j|jkr<td|j��dS)NzBad CRC-32 for file %r)r#r�r$rrr")r��newdatarrr�_update_crc�s
zZipExtFile._update_crccCs|dks|dkrR|j|jd�}d|_d|_|jsN|�|j�}|r,||7}qNq,|S||j}|t|j�kr�|j|j|�}||_|S|t|j�}|j|jd�}d|_d|_|dk�r|j�s|�|�}|t|�kr�||_||_||d|�7}�q|r�||7}�qq�|Sr=r>)r�rrArVrBrrr�read1�s>
zZipExtFile.read1cCs"|js|dkrdS|jtkrH|jj}|t|�krR||�|t|��7}n
|�|�}|jtkrj|jdk|_nx|jtkr�t ||j
�}|j�||�}|jjp�|jdko�|jj|_|jr�||j�
�7}n |j�|�}|jjp�|jdk|_|d|j�}|jt|�8_|jdk�rd|_|�|�|S)Nrr-T)rrrrZunconsumed_tailr0�_read2rrr_�
MIN_READ_SIZEr�r�r�rrDrrrrr?�s4
�
zZipExtFile._read1cCsd|jdkrdSt||j�}t||j�}|j�|�}|jt|�8_|sLt�|jdk r`|�|�}|Sr=) rr_rG�minrr>r0�EOFErrorr+rrrrrFs
zZipExtFile._read2cs&z|jr|j��W5t���XdSr�)�superr
rrr��r�rrr
szZipExtFile.closecCs|jSr�)r%r�rrrr"szZipExtFile.seekablercCs>|jst�d��|��}|dkr&|}n.|dkr8||}n|dkrL|j|}ntd��||jkrd|j}|dkrpd}||}||j}|dkr�|t|j�kr�||_d}nf|dk�r
|j �
|j�|j|_
|j|_|j|_d|_d|_t|j�|_d|_|}|jdk �r
|��|dk�r6t|j|�}|�|�||8}�q
|��S)N�!underlying stream is not seekablerrrzCwhence must be os.SEEK_SET (0), os.SEEK_CUR (1), or os.SEEK_END (2)r-F)r%r4�UnsupportedOperationrZr(r}rr0rrrDr&r)r$r'rrrrrrr+r,rH�
MAX_SEEK_READr>)r�rTrZcurr_posZnew_posZread_offsetZbuff_offsetZread_lenrrrrD%sH
zZipExtFile.seekcCs0|jst�d��|j|jt|j�|j}|S)NrL)r%r4rMr(rr0rr)r�ZfileposrrrrZUs
zZipExtFile.tell)NF)r�)r)r�)r)rrrr@rGrNr�r,r�r6r:r<r>rDrEr?rFr
rrDrZ�
__classcell__rrrKrrs(�
3
!
%$
0rcs@eZdZdd�Zedd��Zdd�Zdd�Z�fd d
�Z�Z S)�
_ZipWriteFilecCs8||_||_||_t|j|j�|_d|_d|_d|_ dSr)
�_zinfo�_zip64�_zipfiler�rerf�_compressor�
_file_size�_compress_size�_crc)r��zfr�r�rrrr�]s�z_ZipWriteFile.__init__cCs|jjSr�)rSr<r�rrrrgsz_ZipWriteFile._fileobjcCsdSr;rr�rrr�writableksz_ZipWriteFile.writablecCsf|jrtd��t|�}|j|7_t||j�|_|jrV|j�|�}|jt|�7_|j �
|�|S)NzI/O operation on closed file.)r1r}r0rUr�rWrTr�rVrr)r�rV�nbytesrrrrnsz_ZipWriteFile.writec sb|jr
dS�zFt���|jrR|j��}|jt|�7_|j �
|�|j|j_n
|j
|j_|j|j_|j
|j_|jjd@r�|jr�dnd}|j �
t�|t|jj|jj|jj��|j ��|j_nn|js�|j
tkr�td��|jtkr�td��|j ��|j_|j �|jj�|j �
|j�|j��|j �|jj�|jj�|j�|j|jj|jj <W5d|j_XdS)NFrz<LLQQz<LLLLz+File size unexpectedly exceeded ZIP64 limitz1Compressed size unexpectedly exceeded ZIP64 limit)!r1rSrrJr
rTr�rVr0rrrQrprUrWrorqrjrRrFr��
_DD_SIGNATURErZ� start_dirr�r�rDrnr��filelistr1�
NameToInforB)r�rAr�rKrrr
zsF
�
�
�z_ZipWriteFile.close)
rrrr��propertyrrYrr
rOrrrKrrP\s
rPc@s eZdZdZdZdeddfdd�dd�Zdd�Zd d
�Zdd�Z d
d�Z
dd�Zdd�Zd<dd�Z
dd�Zdd�Zdd�Zedd��Zejdd��Zd=dd�Zd>d d!�d"d#�Zd?d$d%�Zd@d&d'�ZdAd(d)�Zed*d+��Zd,d-�Zd.d/�ZdBd0d1�ZdCd2d3�Zd4d5�Zd6d7�Z d8d9�Z!d:d;�Z"dS)DrN�rTr�c
CsP|dkrtd��t|�||_d|_d|_i|_g|_||_||_||_ d|_
d|_||_t
|tj�rpt�|�}t
|t�r�d|_||_dddd dd
dd�}||}zt�||�|_Wq�tk
r�||kr�||}Yq��Yq�Xq�q�nd
|_||_t|dd�|_d
|_t��|_d|_d|_�z|dk�r4|��n�|dk�r�d|_z|j� �|_!Wn2t"tfk
�r�t#|j�|_d|_!d|_Yn6Xz|j�$|j!�Wn t"tfk
�r�d|_YnXnf|dk�rz|��|j�$|j!�Wn6t%k
�r|j�$dd�d|_|j� �|_!YnXntd��Wn$|j} d|_|�&| ��YnXdS)N)r`�w�x�az+ZipFile requires mode 'r', 'w', 'x', or 'a'Frr-r?�w+b�x+b�r+b�wbZxb)r`rarbrcrfrdrerr"Tr`)rarbrcrz"Mode must be 'r', 'w', 'x', or 'a')'r}r��_allowZip64�
_didModify�debugr^r]r�r�r!r��_comment�_strict_timestampsr�rzr�r��str�_filePassedrBr4rAr<r:�getattr�_fileRefCnt� threading�RLockrr%r�_RealGetContentsrZr\r*rrDr�_fpclose)
r�rr!r��
allowZip64r�r�ZmodeDictr�r<rrrr��s�
�
zZipFile.__init__cCs|Sr�rr�rrr� __enter__szZipFile.__enter__cCs|��dSr��r
)r��type�value� tracebackrrr�__exit__!szZipFile.__exit__cCs�d|jj|jjfg}|jdk rd|jr8|�d|j�n|jdk rR|�d|j�|�d|j�n
|�d�|�d�d�|�S)Nr/z file=%rz filename=%rz mode=%rr0r�r�) r�rrr<rnr1rBr!r2r2rrrr�$s�
zZipFile.__repr__cCs�|j}zt|�}Wntk
r.td��YnX|s<td��|jdkrNt|�|t}|t}|t|_ |t
||}|ttkr�|t
t8}|jdkr�||}td|||�|||_|�|jd�|�|�}t�|�}d}||k�r�|�t�} t| �tk�r
td��t�t| �} | ttk�r,td��|jdk�r@t| �|�| t�}
| d}|d @�rl|
�d
�}
n
|
�d�}
t|
�}|�| t�|_|�| t �|_!| t"|_#| dd�\|_$|_%|_&|_'|_(|_)}
}|_*|_+|_,|j&t-k�r�t.d
|j&d��| dd�\|_/|_0|_1|
|_2|d?d|d?d@|d@|
d?|
d?d@|
d@df|_3|�4�|j#||_#|j5�6|�||j7|j8<|t| t| t| t }|jdkr�td|�q�|j}t9|j5dd�dd�D]}||_:|j#}�q�dS)NzFile is not a zip filerrzgiven, inferred, offsetrzTruncated central directoryz&Bad magic number for central directoryr!r�r��cp437rzzip file version %.1fr%r(r+r$rvr�r&r�totalcSs|jSr�)rn)r�rrr�<lambda>�r-z*ZipFile._RealGetContents.<locals>.<lambda>T)�key�reverse);r<r9r:rrj�printrQrR�_ECD_COMMENTrk�
_ECD_LOCATIONrLrKrIrEr\rDr>r4�BytesIO�sizeCentralDirr0rFr/�structCentralDir�
_CD_SIGNATURE�stringCentralDir�_CD_FILENAME_LENGTH�decoder
�_CD_EXTRA_FIELD_LENGTHr3�_CD_COMMENT_LENGTHrb�_CD_LOCAL_HEADER_OFFSETrnrWrgrhrirjrerorprq�MAX_EXTRACT_VERSIONr�rkrlrmrrrdr�r]r1r^rB�sortedrs)r�r<rUZsize_cdZ offset_cd�concatZinferredrVr}�centdirrB�flagsrb�t�dZ
end_offsetr�rrrrs2s�
��
���
�
zZipFile._RealGetContentscCsdd�|jD�S)NcSsg|]
}|j�qSrr�)�.0rVrrr�
<listcomp>�sz$ZipFile.namelist.<locals>.<listcomp>�r]r�rrr�namelist�szZipFile.namelistcCs|jSr�r�r�rrr�infolist�szZipFile.infolistcCsLtdd|d�|jD]0}d|jdd�}td|j||jf|d�qdS)Nz%-46s %19s %12s)z File NamezModified ZSize�rz%d-%02d-%02d %02d:%02d:%02dr"z
%-46s %s %12d)r�r]rdrBrq)r�rr��daterrr�printdir�s�
�zZipFile.printdirc
Cs^d}|jD]N}z*|�|jd��}|�|�r,q W5QRXWq
tk
rV|jYSXq
dS)Nir`)r]rArBr>r)r�Z
chunk_sizer��frrr�testzip�s
zZipFile.testzipcCs$|j�|�}|dkr td|��|S)Nz(There is no item named %r in the archive)r^r��KeyError)r�r"�inforrr�getinfo�s�zZipFile.getinfocCs6|r t|t�s tdt|�j��|r,||_nd|_dS)N�pwd: expected bytes, got %s)r�r�� TypeErrorrxrr�)r�r�rrr�setpassword�s
zZipFile.setpasswordcCs|jSr�)rkr�rrrrb�szZipFile.commentcCs^t|t�stdt|�j��t|�tkrNddl}|jdtdd�|dt�}||_ d|_
dS)Nzcomment: expected bytes, got %srz3Archive comment is too long; truncating to %d bytesr��
stacklevelT)r�r�r�rxrr0�ZIP_MAX_COMMENT�warnings�warnrkri)r�rbr�rrrrb�s
��c
Cs.|�|d|��}|��W5QR�SQRXdS�Nr`�rAr>)r�r"r�r<rrrr>�szZipFile.readF��force_zip64csJ|dkrtd��|r0t|t�s0tdt|�j��|rD|dkrDtd���jsRtd��t|t�rb|}n,|dkr�t|�}�j|_ �j
|_n
��|�}|dkr��j
||d�S�jr�td���jd 7_t�j|j�j�j�fd
d��}�zL|�t�}t|�tk�rtd��t�t|�}|ttk�r&td
��|�|t�}|t�rL|�|t�|jd@�r`t d��|jd@�rtt d��|t!d@�r�|�"d�} n
|�"d�} | |j#k�r�td|j#|f��|j$dk �r�|�%�|j&|j$k�r�td|j#�d���|jd @}
|
�r|�s�j'}|�st(d|��nd}t)||||d�WS|�*��YnXdS)N>r`razopen() requires mode "r" or "w"r�raz'pwd is only supported for reading filesz2Attempt to use ZIP archive that was already closedr�r
rcs�jSr�)rrr�rrr~�r-zZipFile.open.<locals>.<lambda>zTruncated file headerz Bad magic number for file header� z$compressed patched data (flag bit 5)�@zstrong encryption (flag bit 6)r�r�r|z/File name in directory %r and header %r differ.zOverlapped entries: z (possible zip bomb)z6File %r is encrypted, password required for extractionT)+r}r�r�r�rxrr<r
r�rer�rfr��_open_to_writerrprrnrtrr>�sizeFileHeaderr0rrFr/r��
_FH_SIGNATUREr��_FH_FILENAME_LENGTH�_FH_EXTRA_FIELD_LENGTHrjr��_FH_GENERAL_PURPOSE_FLAG_BITSr�rcrsrZrpr�r�rr
)r�r"r!r�r�r�Zzef_fileZfheader�fnameZ fname_strZis_encryptedrr�rrA�s��
�
���
�zZipFile.opencCs�|r|jstd��|jr td��t|d�s0d|_d|_d|_d|_|jt krZ|jdO_|j
sn|jdO_|jszd|_|jo�|p�|jdtk}|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.rqrrr��g�������?T)rhr}rr@rqrprorjrerr%rmr�r<rDr\rZrn�_writecheckrirr�rP)r�r�r�r�rrrr�4s8
�
�
zZipFile._open_to_writecCs*|dkrt��}n
t�|�}|�|||�Sr�)rz�getcwdr��_extract_member)r��memberr�r�rrr�extract_s
zZipFile.extractcCsH|dkr|��}|dkr"t��}n
t�|�}|D]}|�|||�q0dSr�)r�rzr�r�r�)r�r��membersr�r-rrr�
extractallls
zZipFile.extractallcCs^|j}|s(d}t�|dt|��}||_|�|�}dd�|�|�D�}|�dd�|D��}|S)Nz:<>|"?*�_css|]}|�d�VqdS)�.N)�rstrip�r�rbrrr� <genexpr>�sz1ZipFile._sanitize_windows_name.<locals>.<genexpr>css|]}|r|VqdSr�rr�rrrr��s)�!_windows_illegal_name_trans_tablerm� maketransr0� translate�splitr2)r�r��pathsep�tableZillegalrrr�_sanitize_windows_name}s
zZipFile._sanitize_windows_namec
sLt|t�s|�|�}|j�dtjj�}tjjrB|�tjjtjj�}tj� |�d}dtjj
tjjf�tjj��fdd�|�
tjj�D��}tjjdkr�|�|tjj�}tj�||�}tj�|�}tj�|�}|r�tj�|�s�t�|�|���rtj�|��st�|�|S|j||d��(}t|d��}t�||�W5QRXW5QRX|S) Nrwrr�c3s|]}|�kr|VqdSr�rr��Zinvalid_path_partsrrr��s�z*ZipFile._extract_member.<locals>.<genexpr>�\)r�rg)r�r
r�rBr|rzr�r{r�r��curdir�pardirr2r�r�r��dirname�exists�makedirsr�r��mkdirrA�shutil�copyfileobj)r�r�Z
targetpathr�r�Z upperdirs�source�targetrr�rr��s2
&
� zZipFile._extract_membercCs�|j|jkr(ddl}|jd|jdd�|jdkr:td��|jsHtd��t|j�|j s�d}t
|j�tkrpd}n|j
tkr�d }n|jtkr�d
}|r�t|d��dS)NrzDuplicate name: %rrr��rarbrcz&write() requires mode 'w', 'x', or 'a'z4Attempt to write ZIP archive that was already closed�Files countZFilesizezZipfile size� would require ZIP64 extensions)rBr^r�r�r!r}r<r�rerhr0r]�ZIP_FILECOUNT_LIMITrqr�rnr
)r�r�r��requires_zip64rrrr��s,
�
�zZipFile._writecheckc
CsP|jstd��|jrtd��tj|||jd�}|��rDd|_d|_n0|dk rT||_ n|j
|_ |dk rl||_n|j|_|���r|j
��|jr�|j�|j�|j��|_|j tkr�|jdO_|�|�d|_|j�|�||j|j<|j�|�d��|j��|_W5QRXn<t|d��,}|�|d ��}t�||d
�W5QRXW5QRXdS)N�7Attempt to write to ZIP archive that was already closedz>Can't write to ZIP archive while an open writing handle existsr�rrTFr?rai ) r<r}rr
r�rlr�rprorer�rfr�rr%rDr\rZrnrrjr�rir]r1r^rBrr�rAr�r�)r�rBr�rer�r��src�destrrrr�sF���
z
ZipFile.writec
Cs�t|t�r|�d�}t|t�sxt|t�t���dd�d�}|j|_|j|_ |j
ddkrpd|_|jdO_q|d|_n|}|js�t
d ��|jr�t
d
��|dk r�||_|dk r�||_ t|�|_|j�*|j|dd��}|�|�W5QRXW5QRXdS)
Nr�r")rBrdr�rwi�Ar)r�r�z?Can't write to ZIP archive while an open writing handle exists.ra)r!)r�rmr�r
r�r�r�rer�rfrBrmr<r}rr0rqrrAr)r�Zzinfo_or_arcnamerVrer�r�r�rrr�writestr�s:
���
zZipFile.writestrcCs|��dSr�rwr�rrr�__del__'szZipFile.__del__c Cs||jdkrdS|jrtd��zB|jdkr\|jr\|j�"|jrJ|j�|j �|�
�W5QRXW5|j}d|_|�|�XdS)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<rr}rtr!rirr%rDr\�_write_end_recordrrrrr
+s
z
ZipFile.closecCs�|jD�]D}|j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}g}|jtksr|jtkr�|�|j�|�|j�d
}d
}n|j}|j}|jtkr�|�|j�d
}n|j}|j} d}
|�rt| d�} t j
dd
t|�ddt|�f|��| } t}
|j
tk�r$tt|
�}
n|j
tk�r:tt|
�}
t|
|j�}t|
|j�}zZ|��\}
}t �
tt||j||j||j
|||j||t|
�t| �t|j�d|j|j|�}Wnltk
�rttt||j||j|j |j
|||j||t|j!�t| �t|j�d|j|j|ft"j#d��YnX|j$�%|�|j$�%|
�|j$�%| �|j$�%|j�q|j$�&�}t|j�}||j'}|j'}d}|t(k�r�d}n|tk�r�d}n|tk�r�d}|�r$|j)�s�t*|d��t �
t+t,ddddd||||�}|j$�%|�t �
t-t.d|d�}|j$�%|�t/|d�}t/|d
�}t/|d
�}t �
t0t1dd||||t|j2�� }|j$�%|�|j$�%|j2�|j3dk�rt|j$�4�|j$�5�dS)Nrrvr$rr!rrr&r r�)rr,�Qrr�r�zCentral directory offsetzCentral directory sizer��,rrrc)6r]rdrqr�rpr1rnr3r8rFr�r0r�rerr_r�rr�rhrWr�r�r�rgrirorbrlrm�DeprecationWarningr�rjrBr~�stderrr<rrZr\r�rhr
rJrKrGrHrHr]r\rkr!�truncater�)r�r�r�r�r�r3rqrprnZ
extra_datar�rhrWrBrjr�Zpos2ZcentDirCountZcentDirSizeZ
centDirOffsetr�Zzip64endrecZzip64locrecrUrrrr�As$$
�
���
���
���
�
zZipFile._write_end_recordcCs&|jd8_|js"|js"|��dS�Nr)rprnr
rrrrrt�szZipFile._fpclose)N)N)r`N)F)NN)NNN)NNN)NN)#rrrr<r�rr�rvr{r�rsr�r�r�r�r�r�r_rb�setterr>rAr�r�r�r�r�r�r�rr�r�r
r�rtrrrrr�sR��ZT
f
+
*�
2�
)hc@s0eZdZdeddfdd�Zddd �Zd
d�ZdS)
rr`Tr�cCstj|||||d�||_dS)N)r!r�ru)rr�� _optimize)r�rr!r�ru�optimizerrrr��s�zPyZipFile.__init__r�NcCs�t�|�}|rD||�sD|jr@tj�|�r,dnd}td||f�dStj�|�\}}tj�|��rhtj�|d�}tj�|��r�|r�d||f}n|}|jr�td|d|�|� |dd �|�\}} |jr�td
| �|�
|| �tt�|��}
|
�
d�|
D]�}tj�||�}tj�|�\}
}tj�|��rRtj�tj�|d���r�|j|||d�q�|dkr�|�r~||��s~|jr�td
|�q�|� |dd �|�\}} |j�r�td
| �|�
|| �q�n�|j�r�td|�tt�|��D]�}tj�||�}tj�|�\}
}|dk�r�|�r,||��s,|j�r�td
|��q�|� |dd �|�\}} |j�rVtd
| �|�
|| ��q�nP|d d�dk�r�td��|� |dd �|�\}} |j�r�td| �|�
|| �dS)Nr�rz%s %r skipped by filterfuncz__init__.py�%s/%szAdding package in�asr���ZAdding)�
filterfunc�.pyzfile %r skipped by filterfunczAdding files from directoryz.Files added with writepy() must end with ".py"zAdding file)rzr�rjr�r�r�r�r2�isfile�
_get_codenamerr��listdir�remove�splitext�writepyr�)r��pathname�basenamer�Zlabel�dirr"Zinitnamer�r�ZdirlistrBr��rootZextrrrr��s�
��
�
�
zPyZipFile.writepyc
sd�fdd� }|d}|d}tjj|dd�}tjj|dd�}tjj|d d�}�jdk�r\tj�|�r�t�|�jt�|�jkr�|} }
n�tj�|�r�t�|�jt�|�jkr�|}
|} n�tj�|�r�t�|�jt�|�jkr�|}
|} nvtj�|��rt�|�jt�|�jk�r|}
|} nD||��rRt j
jd
k�r4|}
nt j
jdk�rH|}
n|}
|} n|}
} n��jd
k�rr|}
|} n<|} �jdk�r�|}
n&�jd k�r�|}
nd��j�}t
|��tj�|
��r�t�|
�jt�|�jk�s�||�jd��s�|}
} tj�| �d}|�rd
||f}|
|fS)Nr�c
sfddl}�jrtd|�z|j|d|d�Wn4|jk
r`}zt|j�WY�dSd}~XYnXdS)NrZ CompilingT)�doraiser�F)�
py_compilerjr��compile�PyCompileError�msg)rr�r��errr�rr�_compiles
z)PyZipFile._get_codename.<locals>._compiler�z.pycr�)�optimizationrrrz"invalid value for 'optimize': {!r})r�r�)r�)� importlib�util�cache_from_sourcer�rzr�r�r�r�r~r�r��formatr}r�)
r�r�r�rZfile_pyZfile_pycZpycache_opt0Zpycache_opt1Zpycache_opt2r�r�r�Zarchivenamerr�rr�sj�
���
�zPyZipFile._get_codename)r�N)rrrrr�r�r�rrrrr�s�
RcCst�t|�dd�Sr�)� itertools�islice� _ancestry)r�rrr�_parents^sr ccs2|�tj�}|�tj�r.|Vt�|�\}}qdSr�)r�� posixpathr{r�)r��tailrrrrqsrcCst�t|�j|�Sr�)r�filterfalse�set�__contains__)ZminuendZ
subtrahendrrr�_difference�srcsDeZdZedd��Z�fdd�Zdd�Zdd�Zed d
��Z �Z
S)�CompleteDirscCs.tj�tt|��}dd�|D�}tt||��S)Ncss|]}|tjVqdSr�)r
r{)r�r�rrrr��sz-CompleteDirs._implied_dirs.<locals>.<genexpr>)r�chain�
from_iterabler�r �_deduper)�names�parentsZas_dirsrrr�
_implied_dirs�szCompleteDirs._implied_dirscs tt|���}|t|�|��Sr�)rJrr�r^r)r�rrKrrr��szCompleteDirs.namelistcCst|���Sr�)r
r�r�rrr� _name_set�szCompleteDirs._name_setcCs,|��}|d}||ko||k}|r(|S|S�Nrw)r)r�r"rr�Z dir_matchrrr�resolve_dir�szCompleteDirs.resolve_dircCsNt|t�r|St|t�s ||�Sd|jkr.t}|�|�}t|��t|��|Sr�)r�rrr!�__new__�vars�update)r�r��resrrr�make�s
zCompleteDirs.make)rrr�staticmethodrr�rrr�rrOrrrKrr�s
rcs(eZdZ�fdd�Z�fdd�Z�ZS)�
FastLookupc
s:t�t��|jW5QR�SQRXtt|���|_|jSr�)�
contextlib�suppressr*Z_FastLookup__namesrJr r�r�rKrrr��szFastLookup.namelistc
s:t�t��|jW5QR�SQRXtt|���|_|jSr�)r!r"r*Z_FastLookup__lookuprJr rr�rKrrr�szFastLookup._name_set)rrrr�rrOrrrKrr �sr c@s�eZdZdZd"dd�Zedd��Zedd��Zd d
�Zdd�Z d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�ZeZedd ��Zd!S)#rz>{self.__class__.__name__}({self.root.filename!r}, {self.at!r})r�cCst�|�|_||_dSr�)r rr��at)r�r�r#rrrr� sz
Path.__init__cCst�|jj|j�Sr�)� functools�partialr�rAr#r�rrrrA# sz Path.opencCst�|j�d��Sr)r
r�r#r�r�rrrr"' sz Path.namec
Os6|���$}tj|f|�|���W5QR�SQRXdSr�)rAr4�
TextIOWrapperr>)r��args�kwargs�strmrrr� read_text+ s
zPath.read_textc
Cs(|���}|��W5QR�SQRXdSr�r�)r�r)rrr�
read_bytes/ s
zPath.read_bytescCst�|j�d��|j�d�kSr)r
r�r#r�)r�r�rrr� _is_child3 szPath._is_childcCst|j|�Sr�)rr�)r�r#rrr�_next6 sz
Path._nextcCs|jp|j�d�Sr)r#�endswithr�rrrr�9 szPath.is_dircCs
|��Sr�)r�r�rrr�is_file< szPath.is_filecCs|j|j��kSr�)r#r�rr�rrrr�? szPath.existscCs.|��std��t|j|j���}t|j|�S)NzCan't listdir a file)r�r}r�r-r�r��filterr,)r�Zsubsrrr�iterdirB szPath.iterdircCst�|jj|j�Sr�)r
r2r�rBr#r�rrr�__str__H szPath.__str__cCs|jj|d�S)Nr�)�_Path__reprrr�rrrr�K sz
Path.__repr__cCs t�|j|�}|�|j�|��Sr�)r
r2r#r-r�r)r��add�nextrrr�joinpathN sz
Path.joinpathcCs(t�|j�d��}|r|d7}|�|�Sr)r
r�r#r�r-)r�Z parent_atrrr�parentT szPath.parentN)r�)rrrr3r�r_rAr"r*r+r,r-r�r/r�r1r2r�r6�__truediv__r7rrrrr�s(A
c
s�ddl}d}|j|d�}|jdd�}|jdddd d
�|jddd
ddd�|jdddddd�|jddddd
�|�|�}|jdk r�|j}t|d��}|��}W5QRX|r�td� |��td�n�|j
dk r�|j
}t|d��}|��W5QRXn�|jdk �r,|j\}}t|d��}|�
|�W5QRXn�|jdk �r�|j�d�} |j}
�fdd��t| d��\}|
D]P}tj�|�}|�s�tj�tj�|��}|dtjtjfk�r�d}�|||��qfW5QRXdS) Nrz3A simple command-line interface for zipfile module.)�descriptionT)Zrequiredz-lz--list� <zipfile>zShow listing of a zipfile)�metavar�helpz-ez --extractr)r:z<output_dir>zExtract zipfile into target dir)�nargsr;r<z-cz--create�+)z<name>z<file>zCreate zipfile from sourcesz-tz--testzTest if a zipfile is validr`z.The following enclosed file is corrupted: {!r}zDone testingcsptj�|�r|�||t�nPtj�|�rl|r8|�||�tt�|��D]$}�|tj�||�tj�||��qFdSr�) rzr�r�rrr�r�r�r2)rXr��zippathZnm��addToZiprrrA� s�zmain.<locals>.addToZiprar�)�argparse�ArgumentParserZadd_mutually_exclusive_group�add_argument�
parse_argsZtestrr�r�rr^r�r�r�Zcreate�poprzr�r�r�r�r�)
r'rBr9�parser�groupr�rXZbadfiler�Zzip_name�filesr�r?rr@r�main\ s\
�
�
�
�
rJ�__main__)N)N)�Zbinasciir$�importlib.utilrr4rrzr
r�r�rFr~rqr�r!r�r��ImportErrorr�r��__all__� Exceptionrr
rrr�r�r�rrrrr�r�r�r�r�r]r\r�r[rLrMrNrOrPrQrRrar�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�rGrHrErJrKrIZ_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_CENTDIRr[ZStructr.r8r=r rXr9�objectr
r�r�r�r�r�r�r�r�rrrr5rrPrrr r�dict�fromkeysrrrr rrJrrrrr�<module>sj
�
+=s&�
&AN/2
=
?>