ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
i48             2   @   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
yd dlZW n ek
rx   d dlZY nX yd dlZejZW n ek
r   dZe
jZY nX yd dlZW n ek
r   dZY nX yd dlZW n ek
r   dZY nX dddddddd	d
dddgZG dd deZG dd deZe ZZdeZdgZdiZd ZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%e	j&e$Z'd Z(dZ)dZ*dZ+dZ,dZ-d Z.d!Z/dZ0d"Z1d#Z2d$Z3e	j&e2Z4d 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,ZIe	j&eHZJd ZKdZLdZMdZNdZOdZPd ZQd!ZRdZSd"ZTd%ZUd&ZVd-ZWd.ZXe	j&eWZYd/ZZd0Z[e	j&eZZ\d Z]dZ^dZ_dZ`dZadZbd Zcd!ZddZed"Zfd1Zge	jhd2Zid3d4 Zjd5d6 Zkd7d	 Zld8d9 Zmd:d; ZnG d<d
 d
eoZpG d=d> d>ZqG d?d@ d@ZrG dAdB dBZsdCdDdEdEdEdEdFdGdHdIdFdJdKdLdMdNdOdPZtdQdR ZudSdT ZvdUdV ZwG dWdX dXZxG dYdZ dZZyG d[d\ d\e jzZ{G d]d^ d^e jzZ|G d_d dZ}G d`d de}Z~djdadbZedckre  dS )k    N
BadZipFile
BadZipfileerror
ZIP_STOREDZIP_DEFLATED	ZIP_BZIP2ZIP_LZMA
is_zipfileZipInfoZipFile	PyZipFileLargeZipFilec               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   /usr/lib64/python3.6/zipfile.pyr   +   s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r   /   s                        -   .   ?   s   <4s4H2LHs   PK                  	   z<4s4B4HL2L5H2Ls   PK
                  z<4s2B4HL2L2Hs   PKz<4sLQLs   PKz
<4sQ2H2L4Qs   PKiPKz<HHc       
      C   s   t j}d}g }d }}xf|d t| kr||| ||d  \}}|d | }	||krv||krn|j| ||  |	}d}|	}qW |s| S dj|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     r5   c             C   s*   yt | rdS W n tk
r$   Y nX dS )NTF)_EndRecDataOSError)fpr   r   r   _check_zipfile   s    r9   c             C   sV   d}y8t | drt| d}nt| d}t|}W d Q R X W n tk
rP   Y nX |S )NFread)r8   rb)hasattrr9   openr7   )filenameresultr8   r   r   r   r	      s    
c             C   s  y| j |t d W n tk
r(   |S X | jt}t|tkrD|S tjt|\}}}}|tkrd|S |dkst|dkr|t	d| j |t t
 d | jt
}t|t
kr|S tj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sizeEndCentDir64Locatorr7   r:   r-   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   s6    

 rT   c       	      C   sf  | j dd | j }y| j t d W n tk
r:   d S X | j }t|tkr|dd tkr|dd  dkrtjt	|}t
|}|jd |j|t  t| t |S t|d	 t d}| j |d | j }|jt}|dkrb|||t  }t|tkrd S t
tjt	|}|t }||t |t |  }|j| |j||  t| || | |S d S )
Nr   r   r   s     r*   r   r   i   )r@   tellsizeEndCentDirr7   r:   r-   stringEndArchiverB   r,   structEndArchivelistr.   rT   maxrfind_ECD_COMMENT_SIZE)	rO   ZfilesizerR   rQ   ZmaxCommentStartr2   ZrecDataZcommentSizecommentr   r   r   r6     s>    



r6   c               @   sR   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%Z
d&d' ZdS )-r
   orig_filenamer>   	date_timecompress_typer^   r0   create_systemrS   extract_versionreserved	flag_bitsvolumeinternal_attrexternal_attrheader_offsetCRCcompress_size	file_size	_raw_time_end_offsetNoName  r   r   c             C   s   || _ |jtd}|dkr(|d| }tjdkrJtj|krJ|jtjd}|| _|| _|d dk rjtdt	| _
d| _d| _tjdkrd| _nd| _t| _t| _d| _d| _d| _d| _d| _d | _d S )Nr   /i  z+ZIP does not support timestamps before 1980r*   Zwin32r   )r_   findchrossepreplacer>   r`   
ValueErrorr   ra   r^   r0   sysplatformrb   DEFAULT_VERSIONrS   rc   rd   re   rf   rg   rh   rn   )selfr>   r`   Z	null_byter   r   r   __init__X  s0    
zZipInfo.__init__c             C   s   d| j j| jf g}| jtkr8|jdtj| j| j  | jd? }| jd@ }|rd|jdt	j
|  |rv|jd|  | j }| s| jr|jd| j  | s| jr| jtks| j| jkr|jd| j  |jd	 d
j|S )Nz<%s filename=%rz compress_type=%sr   i  z filemode=%rz external_attr=%#xz file_size=%rz compress_size=%r> )	__class__r   r>   ra   r   r.   compressor_namesgetrh   statfilemodeis_dirrl   rk   r/   )r{   r?   hiloisdirr   r   r   __repr__  s(    




zZipInfo.__repr__Nc             C   s|  | j }|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }| jd
@ rfd } }}n| j}| j}| j}| j}d}	|d kr|tkp|tk}|rd}
|tj|
dtj	|
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| _| j \}}tjtt| j| j|| j|||||t|t|}|| | S )Nr   i  r#   r   r    r   r   r%   r   r   z<HHQQz'Filesize would require ZIP64 extensionsl    )r`   re   rj   rk   rl   r0   ZIP64_LIMITrB   packcalcsizer   ZIP64_VERSIONra   r   r[   BZIP2_VERSIONr   LZMA_VERSIONrc   rS   _encodeFilenameFlagsstructFileHeaderstringFileHeaderrd   r-   )r{   zip64dtdosdatedostimerj   rk   rl   r0   min_versionfmtr>   re   headerr   r   r   
FileHeader  sF    $$



zZipInfo.FileHeaderc             C   s>   y| j jd| jfS  tk
r8   | j jd| jdB fS X d S )Nasciizutf-8i   )r>   encodere   UnicodeEncodeError)r{   r   r   r   r     s    zZipInfo._encodeFilenameFlagsc             C   s(  | j }tj}xt|dkr"|d|d d \}}|dkr|dkrZ|d|dd }nV|dkrv|d|dd	 }n:|d
kr|d|dd }n|dkrf }ntd||f d}| jdkr|| | _|d7 }| jdkr|| | _|d7 }| jdkr| j}|| | _|d7 }||d d  }qW d S )Nr   z<HHr      z<QQQ   r   z<QQr   r   z<Qr   r   z"Corrupt extra field %04x (size=%d)        )r   r   )r0   rB   r,   r-   r   rl   rk   ri   )r{   r0   r,   tplnZcountsidxoldr   r   r   _decodeExtra  s4    





zZipInfo._decodeExtrac             C   s   t |tjrtj|}tj|}tj|j}tj|j	}|dd }|d krP|}tj
jtj
j|d }x$|d tjtjfkr|dd  }qjW |r|d7 }| ||}|jd@ d> |_|rd|_| jdO  _n|j|_|S )Nr   r!   r   rq   i  r   )
isinstancert   PathLikefspathr   S_ISDIRst_modetime	localtimest_mtimepathnormpath
splitdriveru   altseprh   rl   st_size)clsr>   arcnamestr   mtimer`   zinfor   r   r   	from_file  s(    



zZipInfo.from_filec             C   s   | j d dkS )Nr   rq   )r>   )r{   r   r   r   r     s    zZipInfo.is_dir)r_   r>   r`   ra   r^   r0   rb   rS   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   rp   r   r   r   r   r   )ro   r   )N)N)r   r   r   	__slots__r|   r   r   r   r   classmethodr   r   r   r   r   r   r
   >  s8                      
+
.$!c               @   s8   e Zd Zdd ZdZdd Zdd Zdd	 Zd
d ZdS )_ZipDecrypterc              C   sh   d} dgd }xTt dD ]H}|}x6t dD ]*}|d@ rH|d? d@ | A }q*|d? d@ }q*W |||< qW |S )Nl    q[ r      r   r   i)range)Zpolytabler3   crcr4   r   r   r   _GenerateCRCTable%  s    
z_ZipDecrypter._GenerateCRCTableNc             C   s   |d? d@ | j ||A d@  A S )Nr   i    )crctable)r{   Zchr   r   r   r   _crc329  s    z_ZipDecrypter._crc32c             C   sB   t jd krt j t _d| _d| _d| _x|D ]}| j| q,W d S )NixV4igE#ixV4)r   r   r   key0key1key2_UpdateKeys)r{   pwdpr   r   r   r|   =  s    


z_ZipDecrypter.__init__c             C   sX   | j || j| _| j| jd@  d@ | _| jd d d@ | _| j | jd? d@ | j| _d S )Nr   l    ir   r   )r   r   r   r   )r{   cr   r   r   r   F  s    z_ZipDecrypter._UpdateKeysc             C   s0   | j dB }|||dA  d? d@ A }| j| |S )Nr   r   r   r   )r   r   )r{   r   kr   r   r   __call__L  s    

z_ZipDecrypter.__call__)	r   r   r   r   r   r   r|   r   r   r   r   r   r   r     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)_comp)r{   r   r   r   r|   W  s    zLZMACompressor.__init__c             C   sF   t jdt ji}t jt jt jt j|gd| _tjdddt	|| S )Nid)filtersz<BBHr#   r   )
lzmaZ_encode_filter_propertiesFILTER_LZMA1r   
FORMAT_RAW_decode_filter_propertiesr   rB   r   r-   )r{   Zpropsr   r   r   _initZ  s    zLZMACompressor._initc             C   s*   | j d kr| j | j j| S | j j|S )N)r   r   compress)r{   rR   r   r   r   r   a  s    
zLZMACompressor.compressc             C   s&   | j d kr| j | j j  S | j j S )N)r   r   flush)r{   r   r   r   r   f  s    
zLZMACompressor.flushN)r   r   r   r|   r   r   r   r   r   r   r   r   U  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eof)r{   r   r   r   r|   n  s    zLZMADecompressor.__init__c             C   s   | j d kr|  j|7  _t| jdkr*dS tjd| jdd \}t| jd| krXdS tjtjtjtj	| jdd|  gd| _ | jd| d  }| `| j j
|}| j j| _|S )Nr   r*   z<Hr   )r   )r   r   r-   rB   r,   r   r   r   r   r   
decompressr   )r{   rR   Zpsizer?   r   r   r   r   s  s    

zLZMADecompressor.decompressN)r   r   r   r|   r   r   r   r   r   r   l  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   s@   | t krtjtjtjdS | tkr*tj S | tkr8t	 S d S d S )Nr'   i)
r   r   ZcompressobjZZ_DEFAULT_COMPRESSIONZDEFLATEDr   r   ZBZ2Compressorr   r   )ra   r   r   r   _get_compressor  s    
r   c             C   sn   | t krd S | tkrtjdS | tkr.tj S | tkr<t S t	j
| }|r\td| |f ntd| f d S )Nr'   zcompression type %d (%s)zcompression type %di)r   r   r   Zdecompressobjr   r   ZBZ2Decompressorr   r   r   r   r   )ra   Zdescrr   r   r   _get_decompressor  s    

r   c               @   s0   e Zd Zdd ZdddZdddZd	d
 ZdS )_SharedFilec             C   s2   || _ || _|| _|| _|| _|j| _|j| _d S )N)_file_pos_close_lock_writingseekablerV   )r{   fileposcloselockwritingr   r   r   r|     s    z_SharedFile.__init__r   c          	   C   sB   | j 2 | j rtd| jj| j | jj | _| jS Q R X d S )Nz}Can't reposition in the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)r   r   rw   r   r@   r   rV   )r{   rP   whencer   r   r   r@     s    z_SharedFile.seekr   c          	   C   sL   | j < | j rtd| jj| j | jj|}| jj | _|S Q R X d S )NzyCan'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   rw   r   r@   r   r:   rV   )r{   nrR   r   r   r   r:     s    z_SharedFile.readc             C   s$   | j d k	r | j }d | _ | j| d S )N)r   r   )r{   fileobjr   r   r   r     s    
z_SharedFile.closeN)r   r   )r   )r   r   r   r|   r@   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   )r8   rP   )r{   r8   r   r   r   r|     s    z_Tellable.__init__c             C   s   | j j|}|  j|7  _|S )N)r8   writerP   )r{   rR   r   r   r   r   r     s    z_Tellable.writec             C   s   | j S )N)rP   )r{   r   r   r   rV     s    z_Tellable.tellc             C   s   | j j  d S )N)r8   r   )r{   r   r   r   r     s    z_Tellable.flushc             C   s   | j j  d S )N)r8   r   )r{   r   r   r   r     s    z_Tellable.closeN)r   r   r   r|   r   rV   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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 ).
ZipExtFiler   r   i   r   NFc             C   s   || _ || _|| _|j| _|j| _|j| _t	| j| _
d| _d| _d| _d | _| jd k	rf|  jd8  _|| _|j| _t|dr|j| _td| _nd | _d| _y4|j r|j | _|j| _|j| _| j| _d| _W n tk
r   Y nX d S )NFr*   r   r   rj   T)_fileobj
_decrypter_close_fileobjra   _compress_typerk   _compress_leftrl   _leftr   _decompressor_eof_readbuffer_offsetnewlinesmoder>   namer<   rj   _expected_crccrc32_running_crc	_seekabler   rV   _orig_compress_start_orig_compress_size_orig_file_size_orig_start_crcAttributeError)r{   r   r	  zipinfoZ	decrypterZclose_fileobjr   r   r   r|     s:    



zZipExtFile.__init__c             C   sv   d| j j| j jf g}| jsX|jd| j| jf  | jtkrb|jdt	j
| j| j  n
|jd |jd dj|S )Nz<%s.%sz name=%r mode=%rz compress_type=%sz	 [closed]r}   r~   )r   r   r   closedr.   r
  r	  r  r   r   r   r/   )r{   r?   r   r   r   r   ?  s    


zZipExtFile.__repr__c             C   sL   |dk r>| j jd| jd }|dkr>| j | j| }|| _|S tjj| |S )Nr      
r   )r  rr   r  ioBufferedIOBasereadline)r{   limitr3   liner   r   r   r  M  s    zZipExtFile.readlinec             C   sr   |t | j| j kr\| j|}t || jkrJ|| j| jd   | _d| _n|  jt |8  _| j| j| jd  S )Nr   i   )r-   r  r  r:   )r{   r   chunkr   r   r   peek]  s    
zZipExtFile.peekc             C   s   dS )NTr   )r{   r   r   r   readablej  s    zZipExtFile.readablec             C   s  |d ks|dk rL| j | jd  }d| _ d| _x| jsF|| j| j7 }q.W |S || j }|t| j k r~| j | j| }|| _|S |t| j  }| j | jd  }d| _ d| _x^|dko| j r| j|}|t|k r|| _ || _||d | 7 }P ||7 }|t|8 }qW |S )Nr   r*   )r  r  r  _read1MAX_Nr-   )r{   r   bufendrR   r   r   r   r:   m  s4    

zZipExtFile.readc             C   s@   | j d krd S t|| j| _| jr<| j| j kr<td| j d S )NzBad CRC-32 for file %r)r  r  r  r  r   r
  )r{   newdatar   r   r   _update_crc  s
    
zZipExtFile._update_crcc             C   s  |d ks|dk rV| j | jd  }d| _ d| _x$| jsP| j| j}|r.||7 }P q.W |S || j }|t| j k r| j | j| }|| _|S |t| j  }| j | jd  }d| _ d| _|dkrxN| js
| j|}|t|k r|| _ || _||d | 7 }P |r||7 }P qW |S )Nr   r*   )r  r  r  r  r   r-   )r{   r   r!  rR   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|| j|t| 7 }n
| j|}| jtkrj| jdk| _ nx| jtkrt	|| j
}| jj||}| jjp| jdko| jj | _ | j r|| jj 7 }n | jj|}| jjp| jdk| _ |d | j }|  jt|8  _| jdkrd| _ | j| |S )Nr   r*   T)r  r  r   r  Zunconsumed_tailr-   _read2r   r  r[   MIN_READ_SIZEr   r   r   r  r$  )r{   r   rR   r   r   r   r    s2    





zZipExtFile._read1c             C   sj   | j dkrdS t|| j}t|| j }| jj|}|  j t|8  _ |sLt| jd k	rft	t
| j|}|S )Nr   r*   )r  r[   r'  minr   r:   r-   EOFErrorr   bytesmap)r{   r   rR   r   r   r   r&    s    

zZipExtFile._read2c          
      s&   z| j r| jj  W d t j  X d S )N)r   r   r   super)r{   )r   r   r   r     s    zZipExtFile.closec             C   s   | j S )N)r  )r{   r   r   r   r     s    zZipExtFile.seekabler   c             C   s,  | j stjd| j }|dkr&|}n.|dkr8|| }n|dkrL| j| }ntd|| jkrd| j}|dk rpd}|| }|| j }|dkr|t| jk r|| _d}nR|dk r| j	j
| j | j| _| j| _| j| _d| _d| _tj| j| _d| _|}x,|dkr"t| j|}| j| ||8 }qW | j S )Nz!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  UnsupportedOperationrV   r  rw   r  r-   r  r   r@   r  r  r  r  r  r  Zzipfiler   r  r  r  r(  MAX_SEEK_READr:   )r{   rP   r   Zcurr_posZnew_posZread_offsetZbuff_offsetZread_lenr   r   r   r@     sD    




zZipExtFile.seekc             C   s0   | j stjd| j| j t| j | j }|S )Nz!underlying stream is not seekable)r  r  r-  r  r  r-   r  r  )r{   Zfileposr   r   r   rV   *  s    
zZipExtFile.tell   i   @i   )NFr   )r   )r   r   )r   )r   )r   r   r   r   r'  r.  r|   r   r  r  r  r:   r$  r%  r  r&  r   r   r@   rV   __classcell__r   r   )r   r   r     s$    
*


!
%$
/r   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   s4   || _ || _|| _t|j| _d| _d| _d| _d S )Nr   )	_zinfo_zip64_zipfiler   ra   _compressor
_file_size_compress_size_crc)r{   zfr   r   r   r   r   r|   2  s    z_ZipWriteFile.__init__c             C   s   | j jS )N)r4  r8   )r{   r   r   r   r   ;  s    z_ZipWriteFile._fileobjc             C   s   dS )NTr   )r{   r   r   r   writable?  s    z_ZipWriteFile.writablec             C   sf   | j rtdt|}|  j|7  _t|| j| _| jrV| jj|}|  jt|7  _| j	j
| |S )NzI/O operation on closed file.)r  rw   r-   r6  r  r8  r5  r   r7  r   r   )r{   rR   nbytesr   r   r   r   B  s    z_ZipWriteFile.writec                sX  | j r
d S t j  | jrN| jj }|  jt|7  _| jj| | j| j	_
n
| j| j	_
| j| j	_| j| j	_| j	jd@ r| jrdnd}| jjtj|t| j	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 d| j_| jjj| j	 | j	| jj| j	j < d S )Nr   z<LLQQz<LLLLz+File size unexpectedly exceeded ZIP64 limitz1Compressed size unexpectedly exceeded ZIP64 limitF)!r  r,  r   r5  r   r7  r-   r   r   r2  rk   r6  r8  rj   rl   re   r3  rB   r   _DD_SIGNATURErV   r4  	start_dirr   r   r@   ri   r   r   filelistr.   
NameToInfor>   )r{   r!  r   )r   r   r   r   N  s8    






z_ZipWriteFile.close)
r   r   r   r|   propertyr   r:  r   r   r0  r   r   )r   r   r1  1  s
   	r1  c               @   s  e Zd ZdZdZdedfddZdd Zdd	 Zd
d Z	dd Z
dd Zdd Zd;d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dAd/d0ZdBd1d2Zd3d4 Zd5d6 Z d7d8 Z!d9d: Z"dS )Cr   NrTc             C   sF  |dkrt dt| || _d| _d| _i | _g | _|| _|| _d | _	d| _
t|tjrdtj|}t|trd| _|| _d	d
ddd
ddd}|| }x^ytj||| _W n( tk
r   ||kr|| }w Y nX P qW nd| _|| _t|dd | _d| _tj | _d| _d| _y|dkr*| j  n|dkrd| _y| jj | _W n2 t tfk
r|   t!| j| _d| _d| _Y n6X y| jj"| j W n  t tfk
r   d| _Y nX nf|dkry| j  | jj"| j W n6 t#k
r   | jj"dd d| _| jj | _Y nX nt dW n$   | j}d | _| j$|  Y nX d S )NrA  wxaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Fr   r*   r;   zw+bzx+bzr+bwbZxb)rA  rB  rC  rD  zr+bzw+bzx+br   r
  Tr   z"Mode must be 'r', 'w', 'x', or 'a')rA  rB  rC  rD  )rB  rC  )%rw   r   _allowZip64
_didModifydebugr?  r>  r   r	  r   _commentr   rt   r   r   str_filePassedr>   r  r=   r8   r7   getattr_fileRefCnt	threadingRLockr   r  r   _RealGetContentsrV   r=  r  r   r@   r   _fpclose)r{   r   r	  r   
allowZip64ZmodeDictr   r8   r   r   r   r|     s    







zZipFile.__init__c             C   s   | S )Nr   )r{   r   r   r   	__enter__  s    zZipFile.__enter__c             C   s   | j   d S )N)r   )r{   typevalue	tracebackr   r   r   __exit__  s    zZipFile.__exit__c             C   s   d| j j| j jf g}| jd k	rd| jr8|jd| j  n| jd k	rR|jd| j  |jd| j  n
|jd |jd dj|S )Nz<%s.%sz file=%rz filename=%rz mode=%rz	 [closed]r}   r~   )	r   r   r   r8   rK  r.   r>   r	  r/   )r{   r?   r   r   r   r     s    



zZipFile.__repr__c             C   s  | j }yt|}W n tk
r.   tdY nX |s<td| jdkrNt| |t }|t }|t | _	|t
 | | }|t tkr|tt 8 }| jdkr|| }td||| || | _|j| jd |j|}tj|}d}x||k r|jt}	t|	tkrtdtjt|	}	|	t tkr0td| jdkrDt|	 |j|	t }
|	d }|d	@ rp|
jd
}
n
|
jd}
t|
}|j|	t |_|j|	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|j4  |j#| |_#| j5j6| || j7|j8< |t |	t  |	t  |	t   }| jdkrtd| qW | j}x*t9| j5dd ddD ]}||_:|j#}qW d S )NzFile is not a zip filer   r   zgiven, inferred, offsetr   zTruncated central directoryz&Bad magic number for central directoryr    i   zutf-8cp437r   zzip file version %.1fr$   r'   r)   r#   i  r   r%   r   totalc             S   s   | j S )N)ri   )r   r   r   r   <lambda>I  s    z*ZipFile._RealGetContents.<locals>.<lambda>T)keyreverse);r8   r6   r7   r   rH  printrM   rN   _ECD_COMMENTrI  _ECD_LOCATIONrH   rG   rE   rA   r=  r@   r:   r  BytesIOsizeCentralDirr-   rB   r,   structCentralDir_CD_SIGNATUREstringCentralDir_CD_FILENAME_LENGTHdecoder
   _CD_EXTRA_FIELD_LENGTHr0   _CD_COMMENT_LENGTHr^   _CD_LOCAL_HEADER_OFFSETri   rS   rb   rc   rd   re   ra   rj   rk   rl   MAX_EXTRACT_VERSIONr   rf   rg   rh   rm   r`   r   r>  r.   r?  r>   sortedrn   )r{   r8   rQ   Zsize_cdZ	offset_cdconcatZinferredrR   rY  centdirr>   flagsrC  tdZ
end_offsetr   r   r   r   rP    s|    









4  
zZipFile._RealGetContentsc             C   s   dd | j D S )Nc             S   s   g | ]
}|j qS r   )r>   ).0rR   r   r   r   
<listcomp>P  s    z$ZipFile.namelist.<locals>.<listcomp>)r>  )r{   r   r   r   namelistN  s    zZipFile.namelistc             C   s   | j S )N)r>  )r{   r   r   r   infolistR  s    zZipFile.infolistc             C   sP   t dd	 |d x:| jD ]0}d|jd d  }t d|j||jf |d qW d S )
Nz%-46s %19s %12s	File NameModified    Size)r   z%d-%02d-%02d %02d:%02d:%02dr!   z%-46s %s %12d)ru  rv  rw  )r]  r>  r`   r>   rl   )r{   r   r   Zdater   r   r   printdirW  s    zZipFile.printdirc             C   s^   d}xT| j D ]J}y.| j|jd}x|j|r0q$W W d Q R X W q tk
rT   |jS X qW d S )Nr   r   rA  i   )r>  r=   r>   r:   r   )r{   Z
chunk_sizer   fr   r   r   testzip`  s    zZipFile.testzipc             C   s$   | j j|}|d kr td| |S )Nz(There is no item named %r in the archive)r?  r   KeyError)r{   r
  infor   r   r   getinfom  s
    
zZipFile.getinfoc             C   s8   |r"t |t r"tdt|j |r.|| _nd | _d S )Nzpwd: expected bytes, got %s)r   r*  	TypeErrorrT  r   r   )r{   r   r   r   r   setpasswordv  s
    zZipFile.setpasswordc             C   s   | j S )N)rI  )r{   r   r   r   r^     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~  rT  r   r-   ZIP_MAX_COMMENTwarningswarnrI  rG  )r{   r^   r  r   r   r   r^     s    
c          	   C   s"   | j |d|
}|j S Q R X d S )NrA  )r=   r:   )r{   r
  r   r8   r   r   r   r:     s    zZipFile.readF)force_zip64c               s  |d!krt d|r2t|t r2tdt|j |rF|dkrFt d jsTt dt|trd|}n$|dkr~t|} j|_	n
 j
|}|dkr j||dS  jrt d  jd	7  _t j|j j j fd
d}y|jt}t|tk rtdtjt|}|t tkr td|j|t }|t rF|j|t  |jd@ rZtd|jd@ rntd|jd@ r|jd}	n
|jd}	|	|j krtd|j |f |j!d k	r|j" |j# |j!krtd|j d|jd	@ }
d }|
r|s j$}|st%d| t&|}|jd}t't(||dd }|jd@ rX|j)d? d@ }n|j*d? d@ }|d |krt%d| t+||||d S    |j,   Y nX d S )"NrA  rB  zopen() requires mode "r" or "w"zpwd: expected bytes, got %sz'pwd is only supported for reading filesz2Attempt to use ZIP archive that was already closed)r  zyCan't read from the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.r   c                  s    j S )N)r   r   )r{   r   r   rZ    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)i   zutf-8rX  z/File name in directory %r and header %r differ.zOverlapped entries: z (possible zip bomb)z6File %r is encrypted, password required for extractionr   r   r   r   r   r%   zBad password for file %rT>   rA  rB  )-rw   r   r*  r~  rT  r   r8   r
   r   ra   r}  _open_to_writer   rM  r   ri   rQ  r   r:   sizeFileHeaderr-   r   rB   r,   r   _FH_SIGNATUREr   _FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHre   r   rf  r_   rn   rV   rk   r   r   r   rZ   r+  rm   rj   r   r   )r{   r
  r	  r   r  r   Zzef_fileZfheaderfnameZ	fname_strZis_encryptedZzdr   hZ
check_byter   )r{   r   r=     s    








zZipFile.openc             C   s   |r| j  rtd| jr"tdt|ds2d|_d|_d|_d|_|jt	kr\| jdO  _| j
sp| jdO  _|js|d|_| j o|p|jd	 tk}| j
r| jj| j | jj |_| j| d
| _| jj|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.rl   r   r   r   i  r   g?Ti  )rF  rw   r   r<   rl   rk   rj   re   ra   r   r  rh   r   r8   r@   r=  rV   ri   _writecheckrG  r   r   r1  )r{   r   r  r   r   r   r   r    s4    


zZipFile._open_to_writec             C   s*   |d krt j }n
t j|}| j|||S )N)rt   getcwdr   _extract_member)r{   memberr   r   r   r   r   extract6  s    

zZipFile.extractc             C   sL   |d kr| j  }|d kr"tj }n
tj|}x|D ]}| j||| q2W d S )N)rs  rt   r  r   r  )r{   r   membersr   r  r   r   r   
extractallC  s    


zZipFile.extractallc             C   s^   | j }|s(d}tj|dt| }|| _ |j|}dd |j|D }|jdd |D }|S )Nz:<>|"?*_c             s   s   | ]}|j d V  qdS ).N)rstrip)rq  rC  r   r   r   	<genexpr>^  s    z1ZipFile._sanitize_windows_name.<locals>.<genexpr>c             s   s   | ]}|r|V  qd S )Nr   )rq  rC  r   r   r   r  `  s    )!_windows_illegal_name_trans_tablerJ  	maketransr-   	translatesplitr/   )r   r   pathsepr   Zillegalr   r   r   _sanitize_windows_nameT  s    
zZipFile._sanitize_windows_namec                sN  t |ts| j|}|jjdtjj}tjjrB|jtjjtjj}tjj	|d }dtjj
tjjf tjjj fdd|jtjjD }tjjdkr| j|tjj}tjj||}tjj|}tjj|}|rtjj| rtj| |j rtjj|s
tj| |S | j||d(}t|d}tj|| W d Q R X W d Q R X |S )	Nrq   r   r~   c             3   s   | ]}| kr|V  qd S )Nr   )rq  rC  )invalid_path_partsr   r   r  t  s    z*ZipFile._extract_member.<locals>.<genexpr>\)r   rE  )r   r
   r}  r>   rv   rt   r   ru   r   r   curdirpardirr/   r  r  r   dirnameexistsmakedirsr   r   mkdirr=   shutilcopyfileobj)r{   r  Z
targetpathr   r   Z	upperdirssourcetargetr   )r  r   r  c  s.    

&


 zZipFile._extract_memberc             C   s   |j | jkr(dd l}|jd|j  dd | jdkr:td| jsHtd	t|j | j	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  rB  rC  rD  z&write() requires mode 'w', 'x', or 'a'z4Attempt to write ZIP archive that was already closedzFiles countZFilesizezZipfile sizez would require ZIP64 extensions)rB  rC  rD  )r>   r?  r  r  r	  rw   r8   r   ra   rF  r-   r>  ZIP_FILECOUNT_LIMITrl   r   ri   r   )r{   r   r  requires_zip64r   r   r   r    s(    



zZipFile._writecheckc             C   s0  | j std| jrtdtj||}|j r>d|_d|_n|d k	rN||_n| j	|_|j r| j
 | jrz| j j| j | j j |_|jtkr| jdO  _| j| d| _| jj| || j|j< | j j|jd | j j | _W d Q R X n<t|d,}| j|d}tj||d W d Q R X W d Q R X d S )Nz7Attempt to write to ZIP archive that was already closedz>Can't write to ZIP archive while an open writing handle existsr   r   TFr;   rB  i   r   i    )r8   rw   r   r
   r   r   rk   rj   ra   r   r   r  r@   r=  rV   ri   r   re   r  rG  r>  r.   r?  r>   r   r   r=   r  r  )r{   r>   r   ra   r   srcdestr   r   r   r     s8    

zZipFile.writec             C   s   t |tr|jd}t |tspt|tjtj d d d}| j|_|jd dkrhd|_	| j	dO  _	qtd|_	n|}| j
std	| jrtd
|d k	r||_t||_| j* | j|dd}|j| W d Q R X W d Q R X d S )Nzutf-8r!   )r>   r`   r   rq   iA  r   i  z7Attempt to write to ZIP archive that was already closedz?Can't write to ZIP archive while an open writing handle exists.rB  )r	  r   i  Ai  )r   rJ  r   r
   r   r   r   ra   r>   rh   r8   rw   r   r-   rl   r   r=   r   )r{   Zzinfo_or_arcnamerR   ra   r   r  r   r   r   writestr  s.    



zZipFile.writestrc             C   s   | j   d S )N)r   )r{   r   r   r   __del__  s    zZipFile.__del__c             C   s|   | j d krd S | jrtdzB| jdkr\| jr\| j" | jrJ| j j| j | j	  W d Q R X W d | j }d | _ | j
| X d S )NzvCan't close the ZIP file while there is an open writing handle on it. Close the writing handle before closing the zip.rB  rC  rD  )rB  rC  rD  )r8   r   rw   r	  rG  r   r  r@   r=  _write_end_recordrQ  )r{   r8   r   r   r   r     s    
zZipFile.closec             C   sr  xP| j D ]D}|j}|d d d> |d d> B |d B }|d d> |d	 d> B |d d B }g }|jtksv|jtkr|j|j |j|j d
}d
}n|j}|j}|jtkr|j|j d
}n|j}|j}	d}
|rt|	d}	t	j
ddt|  ddt| f| |	 }	t}
|jtkr(tt|
}
n|jtkr>tt|
}
t|
|j}t|
|j}yZ|j \}}t	j
tt||j||j||j|||j||t|t|	t|jd|j|j|}W nl tk
r   ttt||j||j|j |j|||j||t|j!t|	t|jd|j|j|ft"j#d  Y nX | j$j%| | j$j%| | j$j%|	 | j$j%|j q
W | j$j& }t| j }|| j' }| j'}d }|t(krd}n|tkrd}n|tkrd}|r*| j)st*|d t	j
t+t,ddddd||||}| j$j%| t	j
t-t.d|d}| j$j%| t/|d}t/|d
}t/|d
}t	j
t0t1dd||||t| j2	}| j$j%| | j$j%| j2 | j$j3  d S )Nr   i  r#   r   r    r   r   r%   r   l    z<HHQr   )r   zFiles countzCentral directory offsetzCentral directory sizez would require ZIP64 extensions,   r   i  )r   )4r>  r`   rl   r   rk   r.   ri   r0   r5   rB   r   r-   r   ra   r   r[   r   r   r   rc   rS   r   rb  rd  rb   rd   rj   r^   rg   rh   DeprecationWarningr]  re   r>   rx   stderrr8   r   rV   r=  r  rF  r   rF   rG   rC   rD   r(  rY   rX   rI  r   )r{   r   r   r   r   r0   rl   rk   ri   Z
extra_datar   rc   rS   r>   re   rm  Zpos2ZcentDirCountZcentDirSizeZcentDirOffsetr  Zzip64endrecZzip64locrecrQ   r   r   r   r    s    $$



















zZipFile._write_end_recordc             C   s*   |  j d8  _ | j  r&| j r&|j  d S )Nr   )rM  rK  r   )r{   r8   r   r   r   rQ  r  s    zZipFile._fpclose)N)N)rA  N)F)NN)NNN)NN)N)#r   r   r   r8   r  r   r|   rS  rW  r   rP  rs  rt  rx  rz  r}  r  r@  r^   setterr:   r=   r  r  r  r   r  r  r  r   r  r  r   r  rQ  r   r   r   r   r   {  s:   WT
			
u
+

*
*
$fc               @   s0   e Zd ZdeddfddZddd	Zd
d ZdS )r   rA  Tr   c             C   s   t j| ||||d || _d S )N)r	  r   rR  )r   r|   	_optimize)r{   r   r	  r   rR  optimizer   r   r   r|   |  s    zPyZipFile.__init__r~   Nc             C   s  t j|}|rF|| rF| jrBt jj|r.dnd}td||f  d S t jj|\}}t jj|rnt jj|d}t jj|r|rd||f }n|}| jrtd|d| | j	|dd |\}}	| jrtd
|	 | j
||	 t j|}
|
jd x|
D ]}t jj||}t jj|\}}t jj|rRt jjt jj|dr| j|||d q|dkr|r|| r| jrtd|  q| j	|dd |\}}	| jrtd
|	 | j
||	 qW n| jrtd| xt j|D ]}t jj||}t jj|\}}|dkr|r0|| r0| jrtd|  q| j	|dd |\}}	| jrZtd
|	 | j
||	 qW nP|dd  dkrtd| j	|dd |\}}	| jrtd|	 | j
||	 d S )Nr   r   z%s %r skipped by filterfuncz__init__.pyz%s/%szAdding package inasr   r   ZAdding)
filterfuncz.pyzfile %r skipped by filterfunczAdding files from directoryz.Files added with writepy() must end with ".py"zAdding filer  r  r  r  )rt   r   rH  r   r   r]  r  r/   isfile_get_codenamer   listdirremovesplitextwritepyr   )r{   pathnamebasenamer  Zlabeldirr
  Zinitnamer  r   Zdirlistr>   r   rootZextr   r   r   r    sx    












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j|rtj|jtj|jkr| }	}
ntjj|rtj|jtj|jkr|}
|}	ntjj|rtj|jtj|jkr|}
|}	nvtjj|rtj|jtj|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 j}t|tjj|
otj|
jtj|jks|| jds| }
}	tjj|	d }|rd||f }|
|fS )Nr   c                s^   dd l } jrtd|  y|j| d|d W n, |jk
rX } zt|j dS d }~X nX dS )Nr   Z	CompilingT)doraiser  F)
py_compilerH  r]  compilePyCompileErrormsg)r   r  r  err)r{   r   r   _compile  s    

z)PyZipFile._get_codename.<locals>._compilez.pyz.pycr~   )optimizationr   r   z"invalid value for 'optimize': {!r})r  z%s/%sr   )r   r   )	importlibutilcache_from_sourcer  rt   r   r  r   r   rx   rn  r  formatrw   r  )r{   r  r  r  Zfile_pyZfile_pycZpycache_opt0Zpycache_opt1Zpycache_opt2r   r  r  Zarchivenamer   )r{   r   r    s`    


zPyZipFile._get_codenamer   )r~   N)r   r   r   r   r|   r  r  r   r   r   r   r   y  s   
Rc                s  dd l }|jd}| d kr(tjdd  } |  s:| d dkrLt| tjd | d dkrt| dkrvt| tjd t| d d	}|j  W d Q R X n|| d dkr
t| dkrt| tjd t| d d	}|j	 }W d Q R X | rtd
j
| td n| d dkrbt| dkr8t| tjd t| d d	}|j| d  W d Q R X n| d dkrt| dk rt| tjd  fdd t| d dh}x`| dd  D ]P}tjj|}|stjjtjj|}|dtjtjfkrd} ||| qW W d Q R X d S )Nr   aE          Usage:
            zipfile.py -l zipfile.zip        # Show listing of a zipfile
            zipfile.py -t zipfile.zip        # Test if a zipfile is valid
            zipfile.py -e zipfile.zip target # Extract zipfile into target dir
            zipfile.py -c zipfile.zip src ... # Create zipfile from sources
        r   -l-c-e-tr   rA  z.The following enclosed file is corrupted: {!r}zDone testingr   c                sp   t jj|r| j||t nPt jj|rl|r8| j|| x2t j|D ]$} | t jj||t jj|| qDW d S )N)rt   r   r  r   r   r   r  r/   )r9  r   zippathZnm)addToZipr   r   r  U  s    zmain.<locals>.addToZiprB  r~   )r  r  r  r  )textwrapdedentrx   argvr]  exitr-   r   rx  rz  r  r  rt   r   r  r  r  r  )argsr  ZUSAGEr9  Zbadfiler   r  r   )r  r   main'  sT    




r  __main__l        ii   i  i   i  )N)r  rt   reimportlib.utilr  rx   r   r   r  rB   ZbinasciirN  ImportErrorZdummy_threadingr   r  r   r   __all__	Exceptionr   r   r   r   r   r  r  r   r   r   r   rz   r   r   r   rj  rY   rX   r   rW   rH   rI   rJ   rK   rL   rM   rN   r]   r^  r_  rb  rd  ra  rc  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_SIZEre  rg  rh  Z_CD_DISK_NUMBER_STARTZ_CD_INTERNAL_FILE_ATTRIBUTESZ_CD_EXTERNAL_FILE_ATTRIBUTESri  r   r   r  r  Z_FH_EXTRACT_VERSIONZ_FH_EXTRACT_SYSTEMZ_FH_GENERAL_PURPOSE_FLAG_BITSZ_FH_COMPRESSION_METHODZ_FH_LAST_MOD_TIMEZ_FH_LAST_MOD_DATEZ_FH_CRCZ_FH_COMPRESSED_SIZEZ_FH_UNCOMPRESSED_SIZEr  r  rC   rD   rA   rF   rG   rE   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_CENTDIRr<  ZStructr+   r5   r9   r	   rT   r6   objectr
   r   r   r   r   r   r   r   r   r   r  r   r1  r   r   r  r   r   r   r   r   <module>   sB  









+= [=&  -J       /
B
