<!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?h± ã                   @   s  d Z dZdZddlm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W n eyŠ   dZY n0 zddlZW n ey®   dZY n0 eefZzeef7 ZW n eyØ   Y n0 g d¢ZdZdZe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(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2e2Z3e!e"e#e$e'e(e)e%e&e*e+e,fZ4e!e"e)e,fZ5e*e+e,fZ6dZ7h d£Z8e9e9e9e:e:e:d œZ;ej<d!kr´d"Z=ne >¡ Z=d#d$„ Z?d%d&„ Z@d'd(„ ZAd)e3fd*d+„ZBd,d-„ ZCdedfd.d/„ZDd0d1„ ZEG d2d3„ d3eFƒZGG d4d5„ d5eGƒZHG d6d7„ d7eGƒZIG d8d9„ d9eGƒZJG d:d;„ d;eGƒZKG d<d=„ d=eGƒZLG d>d?„ d?eLƒZMG d@dA„ dAeLƒZNG dBdC„ dCeLƒZOG dDdE„ dEeLƒZPG dFdG„ dGeLƒZQG dHdI„ dIƒZRG dJdK„ dKƒZSG dLdM„ dMeTƒZUG dNdO„ dOeTƒZVG dPdQ„ dQejWƒZXG dRdS„ dSeGƒZYG dTdU„ dUeYƒZZG dVdW„ dWeYƒZ[G dXdY„ dYeYƒZ\G dZd[„ d[eYƒZ]G d\d]„ d]eYƒZ^G d^d_„ d_eYƒZ_eYeeHfZ`dtdadb„Zadcdd„ Zbdedf„ Zcdgdh„ ZdebeceddiœZeeTƒ Zfe gdj¡ZhG dkdl„ dleTƒZiG dmdn„ dneTƒZjdodp„ ZkejjZdqdr„ Zlemdskrþelƒ  dS )uz0.9.0u"   Lars GustÃ¤bel (lars@gustaebel.de)u4   Gustavo Niemeyer, Niels GustÃ¤bel, Richard Townsend.é    )ÚopenN)ÚTarFileÚTarInfoÚ
is_tarfileÚTarErrorÚ	ReadErrorÚCompressionErrorÚStreamErrorÚExtractErrorÚHeaderErrorÚENCODINGÚUSTAR_FORMATÚ
GNU_FORMATÚ
PAX_FORMATÚDEFAULT_FORMATr   ó    i   é   s   ustar   s   ustar 00éd   é›   ó   0ó   1ó   2ó   3ó   4ó   5ó   6ó   7ó   Ló   Kó   Só   xó   gó   Xé   é   )ÚpathÚlinkpathÚsizeÚmtimeÚuidÚgidÚunameÚgname>   r+   r%   r,   r&   )ZatimeÚctimer(   r)   r*   r'   Úntúutf-8c                 C   s8   | d u rt dƒ‚|  ||¡} | d |… |t| ƒ t  S )Nzmetadata cannot contain None)Ú
ValueErrorÚencodeÚlenÚNUL)ÚsÚlengthÚencodingÚerrors© r8   ú,/opt/alt/python39/lib64/python3.9/tarfile.pyÚstn    s    r:   c                 C   s*   |   d¡}|dkr| d |… } |  ||¡S )Nr   éÿÿÿÿ)ÚfindÚdecode)r4   r6   r7   Úpr8   r8   r9   Únts¨   s    
r?   c                 C   s¤   | d dv rbd}t t| ƒd ƒD ]}|dK }|| |d  7 }q | d dkr dt| ƒd  |  }n>z"t| ddƒ} t|  ¡ p|d	dƒ}W n tyž   td
ƒ‚Y n0 |S )Nr   )é€   éÿ   r#   é   rA   é   ÚasciiÚstrictÚ0úinvalid header)Úranger2   r?   ÚintÚstripr0   ÚInvalidHeaderError)r4   ÚnÚir8   r8   r9   Únti°   s    rN   rB   c                 C   sØ   t | ƒ} d|   kr$d|d  k rDn ntd|d | f dƒt }n|tkrÌd|d   |   krrd|d  k rÌn nV| dkrŠtdgƒ}ntdgƒ}d| |  } t|d ƒD ]}| d| d@ ¡ | dL } q¬ntd	ƒ‚|S )
Nr   rB   r#   z%0*orD   rC   r@   rA   zoverflow in number field)rI   Úbytesr3   r   Ú	bytearrayrH   Úinsertr0   )rL   ÚdigitsÚformatr4   rM   r8   r8   r9   ÚitnÄ   s     2
rT   c                 C   s0   dt t d| ¡ƒ }dt t d| ¡ƒ }||fS )NrC   Z
148B8x356BZ
148b8x356b)ÚsumÚstructZunpack_from)ÚbufZunsigned_chksumZsigned_chksumr8   r8   r9   Úcalc_chksumsá   s    	rX   c           	      C   s¦   |pd}|dkrd S |d u r.t  | ||¡ d S t||ƒ\}}t|ƒD ],}|  |¡}t|ƒ|k rf|dƒ‚| |¡ qD|dkr¢|  |¡}t|ƒ|k r˜|dƒ‚| |¡ d S )Ni @  r   úunexpected end of data)ÚshutilÚcopyfileobjÚdivmodrH   Úreadr2   Úwrite)	ÚsrcZdstr5   Ú	exceptionÚbufsizeÚblocksÚ	remainderÚbrW   r8   r8   r9   r[   î   s$    


r[   c                 C   s8   t tjdd ƒ}|d ur(|  |d¡ |¡} t| dd d S )Nr6   Úbackslashreplaceú )Úend)ÚgetattrÚsysÚstdoutr1   r=   Úprint)r4   r6   r8   r8   r9   Ú_safe_print  s    rl   c                   @   s   e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__r8   r8   r8   r9   r     s   r   c                   @   s   e Zd ZdS )r
   Nrm   r8   r8   r8   r9   r
     s   r
   c                   @   s   e Zd ZdS )r   Nrm   r8   r8   r8   r9   r     s   r   c                   @   s   e Zd ZdS )r   Nrm   r8   r8   r8   r9   r     s   r   c                   @   s   e Zd ZdS )r	   Nrm   r8   r8   r8   r9   r	     s   r	   c                   @   s   e Zd ZdS )r   Nrm   r8   r8   r8   r9   r     s   r   c                   @   s   e Zd ZdS )ÚEmptyHeaderErrorNrm   r8   r8   r8   r9   rq      s   rq   c                   @   s   e Zd ZdS )ÚTruncatedHeaderErrorNrm   r8   r8   r8   r9   rr   #  s   rr   c                   @   s   e Zd ZdS )ÚEOFHeaderErrorNrm   r8   r8   r8   r9   rs   &  s   rs   c                   @   s   e Zd ZdS )rK   Nrm   r8   r8   r8   r9   rK   )  s   rK   c                   @   s   e Zd ZdS )ÚSubsequentHeaderErrorNrm   r8   r8   r8   r9   rt   ,  s   rt   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_LowLevelFilec                 C   sF   t jt jt jB t jB dœ| }tt dƒr2|t jO }t  ||d¡| _d S )N©ÚrÚwÚO_BINARYi¶  )	ÚosÚO_RDONLYÚO_WRONLYÚO_CREATÚO_TRUNCÚhasattrry   r   Úfd)ÚselfÚnameÚmoder8   r8   r9   Ú__init__9  s    þý

z_LowLevelFile.__init__c                 C   s   t  | j¡ d S ©N)rz   Úcloser€   ©r   r8   r8   r9   r†   B  s    z_LowLevelFile.closec                 C   s   t  | j|¡S r…   )rz   r]   r€   ©r   r'   r8   r8   r9   r]   E  s    z_LowLevelFile.readc                 C   s   t  | j|¡ d S r…   )rz   r^   r€   ©r   r4   r8   r8   r9   r^   H  s    z_LowLevelFile.writeN)rn   ro   rp   r„   r†   r]   r^   r8   r8   r8   r9   ru   3  s   	ru   c                   @   sn   e Z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d„Zdd„ Zdd„ Zdd„ ZdS )Ú_Streamc           	      C   sÞ  d| _ |d u rt||ƒ}d| _ |dkr6t|ƒ}| ¡ }|p<d| _|| _|| _|| _|| _d| _	d| _
d| _zF|dkrÔzdd l}W n tyœ   tdƒ‚Y n0 || _| d¡| _|d	krÊ|  ¡  |j| _n|  ¡  nÜ|d
kr6zdd l}W n ty   tdƒ‚Y n0 |d	kr*d| _| ¡ | _t| _n
| ¡ | _nz|dkršzdd l}W n tyh   tdƒ‚Y n0 |d	krŽd| _| ¡ | _|j| _n
| ¡ | _n|dkr°td| ƒ‚W n&   | j sÌ| j ¡  d| _‚ Y n0 d S )NTFÚ*Ú ó    r   Úgzzzlib module is not availablerw   Úbz2úbz2 module is not availableÚxzúlzma module is not availableÚtarúunknown compression type %r) Ú_extfileobjru   Ú_StreamProxyÚgetcomptyper‚   rƒ   ÚcomptypeÚfileobjra   rW   ÚposÚclosedÚzlibÚImportErrorr   Úcrc32ÚcrcÚ_init_read_gzÚerrorr`   Ú_init_write_gzr   ÚdbufZBZ2DecompressorÚcmpÚOSErrorZBZ2CompressorÚlzmaZLZMADecompressorÚ	LZMAErrorZLZMACompressorr†   )	r   r‚   rƒ   r˜   r™   ra   rœ   r   r¦   r8   r8   r9   r„   V  sl    












z_Stream.__init__c                 C   s   t | dƒr| js|  ¡  d S )Nr›   )r   r›   r†   r‡   r8   r8   r9   Ú__del__œ  s    z_Stream.__del__c                 C   s’   | j  d| j j| j j | j jd¡| _t dtt	 	¡ ƒ¡}|  
d| d ¡ | j d¡rf| jd d… | _tj | j¡| _|  
| j dd	¡t ¡ d S )
Né	   r   ú<Ls   ‹s   ÿú.gzéýÿÿÿz
iso-8859-1Úreplace)rœ   ZcompressobjZDEFLATEDÚ	MAX_WBITSZDEF_MEM_LEVELr¤   rV   ÚpackrI   ÚtimeÚ_Stream__writer‚   Úendswithrz   r%   Úbasenamer1   r3   )r   Z	timestampr8   r8   r9   r¢      s    ýz_Stream._init_write_gzc                 C   sR   | j dkr| j || j¡| _|  jt|ƒ7  _| j dkrD| j |¡}|  |¡ d S )NrŽ   r“   )	r˜   rœ   rž   rŸ   rš   r2   r¤   Úcompressr±   r‰   r8   r8   r9   r^   °  s    

z_Stream.writec                 C   sN   |  j |7  _ t| j ƒ| jkrJ| j | j d | j… ¡ | j | jd … | _ qd S r…   )rW   r2   ra   r™   r^   r‰   r8   r8   r9   Z__writeº  s    z_Stream.__writec                 C   sÂ   | j r
d S d| _ zš| jdkr:| jdkr:|  j| j ¡ 7  _| jdkr˜| jr˜| j | j¡ d| _| jdkr˜| j t 	d| j
¡¡ | j t 	d| jd@ ¡¡ W | js¾| j ¡  n| js¼| j ¡  0 d S )NTrx   r“   r   rŽ   rª   l   ÿÿ )r›   rƒ   r˜   rW   r¤   Úflushr™   r^   rV   r¯   rŸ   rš   r•   r†   r‡   r8   r8   r9   r†   Ã  s     
ÿz_Stream.closec                 C   sê   | j  | j j ¡| _d| _|  d¡dkr0tdƒ‚|  d¡dkrFtdƒ‚t|  d¡ƒ}|  d¡ |d	@ rt|  d¡ƒd
t|  d¡ƒ  }|  	|¡ |d@ r²|  d¡}|r²|t
kr˜q²q˜|d@ rÔ|  d¡}|rÔ|t
krºqÔqº|d@ ræ|  d¡ d S )Nr   r$   s   ‹únot a gzip filer#   ó   zunsupported compression methodé   é   rC   rB   é   )rœ   Zdecompressobjr®   r¤   r£   Ú_Stream__readr   r   Úordr]   r3   )r   ÚflagZxlenr4   r8   r8   r9   r    Ù  s*    
 


z_Stream._init_read_gzc                 C   s   | j S r…   )rš   r‡   r8   r8   r9   Útellø  s    z_Stream.tellr   c                 C   sX   || j  dkrJt|| j  | jƒ\}}t|ƒD ]}|  | j¡ q,|  |¡ ntdƒ‚| j S )Nr   z seeking backwards is not allowed)rš   r\   ra   rH   r]   r	   )r   rš   rb   rc   rM   r8   r8   r9   Úseeký  s    z_Stream.seekc                 C   s    |   |¡}|  jt|ƒ7  _|S r…   )Ú_readrš   r2   )r   r'   rW   r8   r8   r9   r]   
  s    
z_Stream.readc                 C   sÀ   | j dkr|  |¡S t| jƒ}| jg}||k rœ| jrB| j}d| _n| j | j¡}|sVqœz| j 	|¡}W n | j
y‚   tdƒ‚Y n0 | |¡ |t|ƒ7 }q&d |¡}||d … | _|d |… S )Nr“   r   zinvalid compressed data)r˜   r»   r2   r£   rW   r™   r]   ra   r¤   Ú
decompressr`   r   ÚappendÚjoin©r   r'   ÚcÚtrW   r8   r8   r9   rÀ     s(    




z_Stream._readc                 C   sj   t | jƒ}| jg}||k rF| j | j¡}|s.qF| |¡ |t |ƒ7 }qd |¡}||d … | _|d |… S )Nr   )r2   rW   r™   r]   ra   rÂ   rÃ   rÄ   r8   r8   r9   Z__read,  s    


z_Stream.__readN)r   )rn   ro   rp   r„   r¨   r¢   r^   r±   r†   r    r¾   r¿   r]   rÀ   r»   r8   r8   r8   r9   rŠ   K  s   F
	
rŠ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r–   c                 C   s   || _ | j  t¡| _d S r…   )r™   r]   Ú	BLOCKSIZErW   )r   r™   r8   r8   r9   r„   B  s    z_StreamProxy.__init__c                 C   s   | j j| _| jS r…   )r™   r]   rW   rˆ   r8   r8   r9   r]   F  s    
z_StreamProxy.readc                 C   sP   | j  d¡rdS | j dd… dkr8| j dd… dkr8d	S | j  d
¡rHdS dS d S )Ns   ‹rŽ   r   é   s   BZhr¹   é
   s   1AY&SYr   )s   ]  €s   ý7zXZr‘   r“   )rW   Ú
startswithr‡   r8   r8   r9   r—   J  s    $z_StreamProxy.getcomptypec                 C   s   | j  ¡  d S r…   )r™   r†   r‡   r8   r8   r9   r†   T  s    z_StreamProxy.closeN)rn   ro   rp   r„   r]   r—   r†   r8   r8   r8   r9   r–   =  s   
r–   c                   @   sf   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	j
fdd„Zddd„Zdd„ Zdd„ ZdS )Ú_FileInFileNc                 C   sÊ   || _ || _|| _d| _t|dd ƒ| _d| _|d u r>d|fg}d| _g | _d}| j}|D ]L\}}||kr|| j 	d||d f¡ | j 	d||| |f¡ ||7 }|| }qX|| jk rÆ| j 	d|| jd f¡ d S )Nr   r‚   FT)
r™   Úoffsetr'   Úpositionrh   r‚   r›   Ú	map_indexÚmaprÂ   )r   r™   rÌ   r'   Z	blockinfoZlastposZrealposr8   r8   r9   r„   a  s(    


z_FileInFile.__init__c                 C   s   d S r…   r8   r‡   r8   r8   r9   rµ   z  s    z_FileInFile.flushc                 C   s   dS ©NTr8   r‡   r8   r8   r9   Úreadable}  s    z_FileInFile.readablec                 C   s   dS )NFr8   r‡   r8   r8   r9   Úwritable€  s    z_FileInFile.writablec                 C   s
   | j  ¡ S r…   )r™   Úseekabler‡   r8   r8   r9   rÓ   ƒ  s    z_FileInFile.seekablec                 C   s   | j S r…   )rÍ   r‡   r8   r8   r9   r¾   †  s    z_FileInFile.tellc                 C   s   |t jkr tt|dƒ| jƒ| _nj|t jkr\|dk rFt| j| dƒ| _qŠt| j| | jƒ| _n.|t jkr‚tt| j| | jƒdƒ| _ntdƒ‚| jS )Nr   zInvalid argument)	ÚioÚSEEK_SETÚminÚmaxr'   rÍ   ÚSEEK_CURÚSEEK_ENDr0   )r   rÍ   Úwhencer8   r8   r9   r¿   ‹  s    


z_FileInFile.seekc           	      C   s
  |d u r| j | j }nt|| j | j ƒ}d}|dkr| j| j \}}}}|| j  kr`|k rhqŽ nqŽq6|  jd7  _| jt| jƒkr6d| _q6t||| j ƒ}|râ| j || j|  ¡ | j |¡}t|ƒ|krØt	dƒ‚||7 }n|t
| 7 }||8 }|  j|7  _q,|S )Nr   r   r#   rY   )r'   rÍ   rÖ   rÏ   rÎ   r2   r™   r¿   r]   r   r3   )	r   r'   rW   ÚdataÚstartÚstoprÌ   r5   rd   r8   r8   r9   r]   ›  s,    

z_FileInFile.readc                 C   s&   |   t|ƒ¡}||d t|ƒ…< t|ƒS r…   )r]   r2   )r   rd   rW   r8   r8   r9   Úreadintoº  s    z_FileInFile.readintoc                 C   s
   d| _ d S rÐ   )r›   r‡   r8   r8   r9   r†   ¿  s    z_FileInFile.close)N)N)rn   ro   rp   r„   rµ   rÑ   rÒ   rÓ   r¾   rÔ   rÕ   r¿   r]   rÞ   r†   r8   r8   r8   r9   rË   [  s   

rË   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚExFileObjectc                    s&   t |j|j|j|jƒ}tƒ  |¡ d S r…   )rË   r™   Úoffset_datar'   ÚsparseÚsuperr„   )r   ÚtarfileÚtarinfor™   ©Ú	__class__r8   r9   r„   Å  s    
ÿzExFileObject.__init__©rn   ro   rp   r„   Ú__classcell__r8   r8   rå   r9   rß   Ã  s   rß   c                   @   s   e Zd ZdS )ÚFilterErrorNrm   r8   r8   r8   r9   ré   Ð  s   ré   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚAbsolutePathErrorc                    s    || _ tƒ  d|j›d¡ d S )Nzmember z has an absolute path©rä   râ   r„   r‚   ©r   rä   rå   r8   r9   r„   Ô  s    zAbsolutePathError.__init__rç   r8   r8   rå   r9   rê   Ó  s   rê   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚOutsideDestinationErrorc                    s.   || _ || _tƒ  |j›d|›dd ¡ d S )Nz would be extracted to ú, ú which is outside the destination©rä   Ú_pathrâ   r„   r‚   ©r   rä   r%   rå   r8   r9   r„   Ù  s
    ÿz OutsideDestinationError.__init__rç   r8   r8   rå   r9   rí   Ø  s   rí   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSpecialFileErrorc                    s   || _ tƒ  |j›d¡ d S )Nz is a special filerë   rì   rå   r8   r9   r„   à  s    zSpecialFileError.__init__rç   r8   r8   rå   r9   ró   ß  s   ró   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚAbsoluteLinkErrorc                    s   || _ tƒ  |j›d¡ d S )Nz is a link to an absolute pathrë   rì   rå   r8   r9   r„   å  s    zAbsoluteLinkError.__init__rç   r8   r8   rå   r9   rô   ä  s   rô   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚLinkOutsideDestinationErrorc                    s.   || _ || _tƒ  |j›d|›dd ¡ d S )Nz would link to rî   rï   rð   rò   rå   r8   r9   r„   ê  s
    ÿz$LinkOutsideDestinationError.__init__rç   r8   r8   rå   r9   rõ   é  s   rõ   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚLinkFallbackErrorc                    s2   || _ || _tƒ  d|j›dd|›d ¡ d S )Nzlink z would be extracted as a zcopy of z, which was rejectedrð   rò   rå   r8   r9   r„   ñ  s
    
ÿzLinkFallbackError.__init__rç   r8   r8   rå   r9   rö   ð  s   rö   Tc                 C   s"  i }| j }tjj|tjjd}| dtjf¡rH| j dtj ¡ }|d< tj |¡r\t	| ƒ‚tjjtj 
||¡tjjd}tj ||g¡|kr˜t| |ƒ‚| j}|d ur|d@ }|rü|  ¡ sÄ|  ¡ rÞ|d@ sÔ|dM }|dO }n|  ¡ sî|  ¡ rôd }nt| ƒ‚|| jkr||d< |r| jd ur*d |d	< | jd ur>d |d
< | jd urRd |d< | jd urfd |d< |  ¡ sz|  ¡ rtj | j¡r’t| ƒ‚tj | j¡}|| jkr´||d< |  ¡ rÚtj 
|tj |¡| j¡}ntj 
|| j¡}tjj|tjjd}tj ||g¡|krt| |ƒ‚|S )N)rE   ú/r‚   ií  é@   i¶ÿÿÿé€  rƒ   r)   r*   r+   r,   Úlinkname)r‚   rz   r%   ÚrealpathÚALLOW_MISSINGrÊ   ÚsepÚlstripÚisabsrê   rÃ   Ú
commonpathrí   rƒ   ÚisregÚislnkÚisdirÚissymró   r)   r*   r+   r,   rú   rô   ÚnormpathÚdirnamerõ   )ÚmemberÚ	dest_pathZfor_dataÚ	new_attrsr‚   Ztarget_pathrƒ   Z
normalizedr8   r8   r9   Ú_get_filtered_attrsü  sl    ÿ




þÿÿ
r
  c                 C   s   | S r…   r8   )r  r  r8   r8   r9   Úfully_trusted_filter@  s    r  c                 C   s,   t | |dƒ}|r(| jf i |¤ddi¤ŽS | S )NFÚdeep©r
  r­   ©r  r  r	  r8   r8   r9   Ú
tar_filterC  s    r  c                 C   s,   t | |dƒ}|r(| jf i |¤ddi¤ŽS | S )NTr  Fr  r  r8   r8   r9   Údata_filterI  s    r  )Zfully_trustedr“   rÛ   s   ([0-9]{1,20}) c                   @   sÖ  e Zd Zeddddddddd	d
dddddddddddZdhdd„Zedd„ ƒZejdd„ ƒZedd„ ƒZ	e	jdd„ ƒZ	dd„ Z
eeeeeeeeded œ
d!d"„Zd#d$„ Zeed%fd&d'„Zd(d)„ Zd*d+„ Zd,d-„ Zed.d/„ ƒZd0d1„ Zed2d3„ ƒZed4d5„ ƒZed6d7„ ƒZed8d9„ ƒZed:d;„ ƒZed<d=„ ƒZd>d?„ Zd@dA„ ZdBdC„ Z dDdE„ Z!dFdG„ Z"dHdI„ Z#dJdK„ Z$dLdM„ Z%dNdO„ Z&dPdQ„ Z'dRdS„ Z(dTdU„ Z)dVdW„ Z*dXdY„ Z+dZd[„ Z,d\d]„ Z-d^d_„ Z.d`da„ Z/dbdc„ Z0ddde„ Z1dfdg„ Z2dS )ir   zName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader checksum.z–File type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.z
User name.zGroup name.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)r‚   rƒ   r)   r*   r'   r(   ÚchksumÚtyperú   r+   r,   ÚdevmajorÚdevminorrÌ   rà   Úpax_headersrá   rã   Ú_sparse_structsÚ_link_targetrŒ   c                 C   sj   || _ d| _d| _d| _d| _d| _d| _t| _d| _	d| _
d| _d| _d| _d| _d| _d | _i | _d S )Ni¤  r   rŒ   )r‚   rƒ   r)   r*   r'   r(   r  ÚREGTYPEr  rú   r+   r,   r  r  rÌ   rà   rá   r  ©r   r‚   r8   r8   r9   r„   ‚  s"    zTarInfo.__init__c                 C   s   | j S r…   ©r‚   r‡   r8   r8   r9   r%   š  s    zTarInfo.pathc                 C   s
   || _ d S r…   r  r  r8   r8   r9   r%   Ÿ  s    c                 C   s   | j S r…   ©rú   r‡   r8   r8   r9   r&   £  s    zTarInfo.linkpathc                 C   s
   || _ d S r…   r  )r   rú   r8   r8   r9   r&   ¨  s    c                 C   s   d| j j| jt| ƒf S )Nz<%s %r at %#x>)ræ   rn   r‚   Úidr‡   r8   r8   r9   Ú__repr__¬  s    zTarInfo.__repr__T)
r‚   r(   rƒ   rú   r)   r*   r+   r,   r  Ú_KEEPc       
         C   sŽ   |	rt  | ¡}n
t   | ¡}||
ur(||_||
ur6||_||
urD||_||
urR||_||
ur`||_||
urn||_||
ur|||_||
urŠ||_	|S r…   )
ÚcopyZdeepcopyr‚   r(   rƒ   rú   r)   r*   r+   r,   )r   r‚   r(   rƒ   rú   r)   r*   r+   r,   r  r  Úresultr8   r8   r9   r­   ¯  s(    
zTarInfo.replacec                 C   s€   | j d u rd }n
| j d@ }| j|| j| j| j| j| j| j| j| j	| j
| j| jdœ}|d tkr||d  d¡s||d  d7  < |S )Néÿ  )r‚   rƒ   r)   r*   r'   r(   r  r  rú   r+   r,   r  r  r  r‚   r÷   )rƒ   r‚   r)   r*   r'   r(   r  r  rú   r+   r,   r  r  ÚDIRTYPEr²   )r   rƒ   Úinfor8   r8   r9   Úget_infoË  s(    

ózTarInfo.get_infoÚsurrogateescapec                 C   sz   |   ¡ }| ¡ D ]\}}|d u rtd| ƒ‚q|tkrD|  |||¡S |tkrZ|  |||¡S |tkrn|  ||¡S tdƒ‚d S )Nz%s may not be Nonezinvalid format)	r$  Úitemsr0   r   Úcreate_ustar_headerr   Úcreate_gnu_headerr   Úcreate_pax_header)r   rS   r6   r7   r#  r‚   Úvaluer8   r8   r9   Útobufç  s    zTarInfo.tobufc                 C   sn   t |d< t|d  ||¡ƒtkr(tdƒ‚t|d  ||¡ƒtkr^|  |d ||¡\|d< |d< |  |t||¡S )NÚmagicrú   zlinkname is too longr‚   Úprefix)	ÚPOSIX_MAGICr2   r1   ÚLENGTH_LINKr0   ÚLENGTH_NAMEÚ_posix_split_nameÚ_create_headerr   )r   r#  r6   r7   r8   r8   r9   r'  ø  s    zTarInfo.create_ustar_headerc                 C   s€   t |d< d}t|d  ||¡ƒtkr<||  |d t||¡7 }t|d  ||¡ƒtkrl||  |d t||¡7 }||  |t	||¡ S )Nr,  r   rú   r‚   )
Ú	GNU_MAGICr2   r1   r/  Ú_create_gnu_long_headerÚGNUTYPE_LONGLINKr0  ÚGNUTYPE_LONGNAMEr2  r   )r   r#  r6   r7   rW   r8   r8   r9   r(    s    zTarInfo.create_gnu_headerc              	   C   sL  t |d< | j ¡ }ddtfddtfddfD ]h\}}}||v r>q*z||  dd	¡ W n" tyt   || ||< Y q*Y n0 t|| ƒ|kr*|| ||< q*d
D ]„\}}d}|| }	t|	t	ƒ}
|
rÂt
|	ƒn|	}d|  krâd|d  k sòn d||< d}n|
r|||< d}|r˜||vr˜t|	ƒ||< q˜|r4|  |t|¡}nd}||  |tdd¡ S )Nr,  r‚   r%   rú   r&   )r+   r+   é    )r,   r,   r7  rD   rE   ))r)   rB   )r*   rB   )r'   é   )r(   r8  Fr   rB   r#   Tr   r­   )r.  r  r  r0  r/  r1   ÚUnicodeEncodeErrorr2   Ú
isinstanceÚfloatÚroundÚstrÚ_create_pax_generic_headerÚXHDTYPEr2  r   )r   r#  r6   r  r‚   Zhnamer5   rR   Z	needs_paxÚvalZval_is_floatZval_intrW   r8   r8   r9   r)    s>    
þ

zTarInfo.create_pax_headerc                 C   s   |   |td¡S )Nr/   )r>  ÚXGLTYPE)Úclsr  r8   r8   r9   Úcreate_pax_global_headerM  s    z TarInfo.create_pax_global_headerc                 C   s~   |  d¡}tdt|ƒƒD ]T}d |d |… ¡}d ||d … ¡}t| ||¡ƒtkrt| ||¡ƒtkr qvqtdƒ‚||fS )Nr÷   r#   zname is too long)ÚsplitrH   r2   rÃ   r1   ÚLENGTH_PREFIXr0  r0   )r   r‚   r6   r7   Z
componentsrM   r-  r8   r8   r9   r1  S  s    
ÿzTarInfo._posix_split_namec                 C   s¦  |   d¡ttfv }|r@t|   dd¡d|ƒ}t|   dd¡d|ƒ}ntdd||ƒ}tdd||ƒ}|   dt¡}|d u rxtdƒ‚t|   dd¡d	||ƒt|   d
d¡d@ d|ƒt|   dd¡d|ƒt|   dd¡d|ƒt|   dd¡d|ƒt|   dd¡d|ƒd|t|   dd¡d	||ƒ|   dt¡t|   dd¡d||ƒt|   dd¡d||ƒ||t|   dd¡d||ƒg}t 	dt
 d |¡¡}	t|	t
 d … ƒd }
|	d d… td|
 dƒ |	dd …  }	|	S )Nr  r  r   rB   r  rŒ   zTarInfo.type must not be Noner‚   r   rƒ   r!  r)   r*   r'   r8  r(   s           rú   r,  r+   r7  r,   r-  r   z%dsr   i”þÿÿz%06o rD   i›þÿÿ)ÚgetÚCHRTYPEÚBLKTYPErT   r:   r  r0   r.  rV   r¯   rÇ   rÃ   rX   rO   )r#  rS   r6   r7   Zhas_device_fieldsr  r  ZfiletypeÚpartsrW   r  r8   r8   r9   r2  c  s:    
ñ&zTarInfo._create_headerc                 C   s.   t t| ƒtƒ\}}|dkr*| t| t 7 } | S )Nr   )r\   r2   rÇ   r3   )Zpayloadrb   rc   r8   r8   r9   Ú_create_payload  s    zTarInfo._create_payloadc                 C   sR   |  ||¡t }i }d|d< ||d< t|ƒ|d< t|d< |  |t||¡|  |¡ S )Nz././@LongLinkr‚   r  r'   r,  )r1   r3   r2   r3  r2  r   rJ  )rB  r‚   r  r6   r7   r#  r8   r8   r9   r4  —  s    ÿzTarInfo._create_gnu_long_headerc              	   C   s0  d}|  ¡ D ]6\}}z| dd¡ W q ty@   d}Y  qDY q0 qd}|rT|d7 }|  ¡ D ]\}}| d¡}|r€| |d¡}n
| d¡}t|ƒt|ƒ d }d	 }	}
|tt|
ƒƒ }	|	|
krÀqÆ|	}
q¦|tt|
ƒd
ƒd | d | d 7 }q\i }d|d< ||d< t|ƒ|d< t|d< |  |td
d¡|  	|¡ S )NFr/   rE   Tr   s   21 hdrcharset=BINARY
r%  rÈ   r   rD   ó    ó   =ó   
z././@PaxHeaderr‚   r  r'   r,  r­   )
r&  r1   r9  r2   r=  rO   r.  r2  r   rJ  )rB  r  r  r6   ZbinaryÚkeywordr*  ZrecordsÚlrL   r>   r#  r8   r8   r9   r>  ¨  s<    

(ÿz"TarInfo._create_pax_generic_headerc              	   C   st  t |ƒdkrtdƒ‚t |ƒtkr(tdƒ‚| t¡tkr>tdƒ‚t|dd… ƒ}|t|ƒvrbt	dƒ‚| ƒ }t
|dd… ||ƒ|_t|dd	… ƒ|_t|d	d
… ƒ|_t|d
d… ƒ|_t|dd… ƒ|_t|dd… ƒ|_||_|dd… |_t
|dd… ||ƒ|_t
|dd… ||ƒ|_t
|dd… ||ƒ|_t|dd… ƒ|_t|dd… ƒ|_t
|dd… ||ƒ}|jtkr†|j d¡r†t|_|jtkr6d}g }tdƒD ]j}	z0t|||d … ƒ}
t||d |d … ƒ}W n tyò   Y  qY n0 | |
|f¡ |d7 }q¢t|d ƒ}t|dd… ƒ}|||f|_ | !¡ rN|j "d¡|_|rp|jt#vrp|d |j |_|S )Nr   zempty headerztruncated headerzend of file headeré”   éœ   zbad checksumr   él   ét   é|   éˆ   é   i  i	  i)  iI  iQ  iY  iô  r÷   i‚  r¹   r8  é   iâ  iã  iï  )$r2   rq   rÇ   rr   Úcountr3   rs   rN   rX   rK   r?   r‚   rƒ   r)   r*   r'   r(   r  r  rú   r+   r,   r  r  ÚAREGTYPEr²   r"  ÚGNUTYPE_SPARSErH   r0   rÂ   Úboolr  r  ÚrstripÚ	GNU_TYPES)rB  rW   r6   r7   r  Úobjr-  rš   ÚstructsrM   rÌ   ÚnumbytesÚ
isextendedÚorigsizer8   r8   r9   ÚfrombufÛ  sZ    
zTarInfo.frombufc                 C   s8   |j  t¡}|  ||j|j¡}|j  ¡ t |_| |¡S r…   )	r™   r]   rÇ   rc  r6   r7   r¾   rÌ   Ú_proc_member)rB  rã   rW   r^  r8   r8   r9   Úfromtarfile  s    zTarInfo.fromtarfilec                 C   sT   | j ttfv r|  |¡S | j tkr,|  |¡S | j tttfv rF|  	|¡S |  
|¡S d S r…   )r  r6  r5  Ú_proc_gnulongrZ  Ú_proc_sparser?  rA  ÚSOLARIS_XHDTYPEÚ	_proc_paxÚ_proc_builtin)r   rã   r8   r8   r9   rd  /  s    



zTarInfo._proc_memberc                 C   sR   |j  ¡ | _| j}|  ¡ s$| jtvr4||  | j¡7 }||_|  	|j
|j|j¡ | S r…   )r™   r¾   rà   r  r  ÚSUPPORTED_TYPESÚ_blockr'   rÌ   Ú_apply_pax_infor  r6   r7   )r   rã   rÌ   r8   r8   r9   rj  <  s    zTarInfo._proc_builtinc                 C   s„   |j  |  | j¡¡}z|  |¡}W n ty<   tdƒ‚Y n0 | j|_| jt	krdt
||j|jƒ|_n| jtkr€t
||j|jƒ|_|S )Nú missing or bad subsequent header)r™   r]   rl  r'   re  r   rt   rÌ   r  r6  r?   r6   r7   r‚   r5  rú   )r   rã   rW   Únextr8   r8   r9   rf  M  s    

zTarInfo._proc_gnulongc           
   	   C   sØ   | j \}}}| ` |r¨|j t¡}d}tdƒD ]l}z0t|||d … ƒ}t||d |d … ƒ}	W n tyx   Y  qšY n0 |r|	r| ||	f¡ |d7 }q,t|d ƒ}q|| _	|j 
¡ | _| j|  | j¡ |_|| _| S )Nr   é   r8  rW  iø  )r  r™   r]   rÇ   rH   rN   r0   rÂ   r[  rá   r¾   rà   rl  r'   rÌ   )
r   rã   r_  ra  rb  rW   rš   rM   rÌ   r`  r8   r8   r9   rg  c  s(    
zTarInfo._proc_sparsec                 C   sÈ  |j  |  | j¡¡}| jtkr&|j}n
|j ¡ }d}d }g }t|ƒ|krh|| dkrht	 
||¡ }sptdƒ‚zt| d¡ƒ}W n tyœ   tdƒ‚Y n0 |dk r®tdƒ‚|| t|ƒkrÆtdƒ‚| d¡| d }	|| d¡d |	… }
|
 d¡\}}}|r|dks||	 dkr$tdƒ‚| |||f¡ |dkr^|d u r^|dkrZ|j}nd	}||7 }q<|d u rvd	}|D ]X\}}}|  |d	d	|j¡}|tv r¶|  |||j|j¡}n|  |d	d	|j¡}|||< qzz|  |¡}W n tyþ   td
ƒ‚Y n0 d|v r|  ||¡ nFd|v r0|  ||¡ n.| d¡dkr^| d¡dkr^|  |||¡ | jttfv rÄ|  ||j|j¡ | j!|_!d|v rÄ|j"}| #¡ s®|jt$vr¾|| |j¡7 }||_!|S )Nr   rG   r#   é   rL  rÉ   s
   hdrcharsets   BINARYr/   rn  úGNU.sparse.mapúGNU.sparse.sizezGNU.sparse.majorÚ1zGNU.sparse.minorrF   r'   )%r™   r]   rl  r'   r  rA  r  r  r2   Ú_header_length_prefix_reÚmatchrK   rI   Úgroupr0   rÜ   rg   Ú	partitionrÂ   r6   Ú_decode_pax_fieldr7   ÚPAX_NAME_FIELDSre  r   rt   Ú_proc_gnusparse_01Ú_proc_gnusparse_00rF  Ú_proc_gnusparse_10r?  rh  rm  rÌ   rà   r  rk  )r   rã   rW   r  rš   r6   Úraw_headersrv  r5   Zheader_value_end_offsetZkeyword_and_valueZraw_keywordZequalsZ	raw_valuerN  r*  ro  rÌ   r8   r8   r9   ri    s|    





ÿ
ÿ
ÿ

 
zTarInfo._proc_paxc              	   C   s¢   g }g }|D ]€\}}}|dkrRz|  t| ¡ ƒ¡ W qŒ tyN   tdƒ‚Y qŒ0 q|dkrz|  t| ¡ ƒ¡ W q tyŠ   tdƒ‚Y q0 qtt||ƒƒ|_d S )Ns   GNU.sparse.offsetrG   s   GNU.sparse.numbytes)rÂ   rI   r=   r0   rK   ÚlistÚziprá   )r   ro  r~  Zoffsetsr`  Ú_rN  r*  r8   r8   r9   r|  ø  s    zTarInfo._proc_gnusparse_00c                 C   s@   dd„ |d   d¡D ƒ}tt|d d d… |dd d… ƒƒ|_d S )Nc                 S   s   g | ]}t |ƒ‘qS r8   )rI   )Ú.0Úxr8   r8   r9   Ú
<listcomp>  r   z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>rr  ú,r$   r#   )rD  r  r€  rá   )r   ro  r  rá   r8   r8   r9   r{    s    zTarInfo._proc_gnusparse_01c                 C   s¨   d }g }|j  t¡}| dd¡\}}t|ƒ}t|ƒ|d k rtd|vrT||j  t¡7 }| dd¡\}}| t|ƒ¡ q,|j  ¡ |_t	t
|d d d… |dd d… ƒƒ|_d S )NrM  r#   r$   )r™   r]   rÇ   rD  rI   r2   rÂ   r¾   rà   r  r€  rá   )r   ro  r  rã   Úfieldsrá   rW   Znumberr8   r8   r9   r}    s    zTarInfo._proc_gnusparse_10c              	   C   sÀ   |  ¡ D ]¨\}}|dkr&t| d|ƒ q|dkr@t| dt|ƒƒ q|dkrZt| dt|ƒƒ q|tv r|tv r’zt| |ƒ}W n ty   d}Y n0 |dkr¤| d¡}t| ||ƒ q| ¡ | _d S )NzGNU.sparse.namer%   rs  r'   zGNU.sparse.realsizer   r÷   )	r&  ÚsetattrrI   Ú
PAX_FIELDSÚPAX_NUMBER_FIELDSr0   r\  r  r  )r   r  r6   r7   rN  r*  r8   r8   r9   rm  "  s"    

zTarInfo._apply_pax_infoc                 C   s2   z|  |d¡W S  ty,   |  ||¡ Y S 0 d S )NrE   )r=   ÚUnicodeDecodeError)r   r*  r6   Zfallback_encodingZfallback_errorsr8   r8   r9   ry  9  s    zTarInfo._decode_pax_fieldc                 C   s"   t |tƒ\}}|r|d7 }|t S )Nr#   )r\   rÇ   )r   rX  rb   rc   r8   r8   r9   rl  A  s    zTarInfo._blockc                 C   s
   | j tv S r…   )r  ÚREGULAR_TYPESr‡   r8   r8   r9   r  J  s    zTarInfo.isregc                 C   s   |   ¡ S r…   )r  r‡   r8   r8   r9   ÚisfileN  s    zTarInfo.isfilec                 C   s
   | j tkS r…   )r  r"  r‡   r8   r8   r9   r  R  s    zTarInfo.isdirc                 C   s
   | j tkS r…   )r  ÚSYMTYPEr‡   r8   r8   r9   r  V  s    zTarInfo.issymc                 C   s
   | j tkS r…   )r  ÚLNKTYPEr‡   r8   r8   r9   r  Z  s    zTarInfo.islnkc                 C   s
   | j tkS r…   )r  rG  r‡   r8   r8   r9   Úischr^  s    zTarInfo.ischrc                 C   s
   | j tkS r…   )r  rH  r‡   r8   r8   r9   Úisblkb  s    zTarInfo.isblkc                 C   s
   | j tkS r…   )r  ÚFIFOTYPEr‡   r8   r8   r9   Úisfifof  s    zTarInfo.isfifoc                 C   s
   | j d uS r…   )rá   r‡   r8   r8   r9   Úissparsej  s    zTarInfo.issparsec                 C   s   | j tttfv S r…   )r  rG  rH  r‘  r‡   r8   r8   r9   Úisdevm  s    zTarInfo.isdev)rŒ   )3rn   ro   rp   ÚdictÚ	__slots__r„   Úpropertyr%   Úsetterr&   r  r  r­   r$  r   r   r+  r'  r(  r)  ÚclassmethodrC  r1  Ústaticmethodr2  rJ  r4  r>  rc  re  rd  rj  rf  rg  ri  r|  r{  r}  rm  ry  rl  r  rŒ  r  r  r  r  r  r’  r“  r”  r8   r8   r8   r9   r   _  sš   è




ý:

)
	

2
>
y	r   c                   @   sú  e Zd ZdZdZdZdZeZe	Z
dZeZeZdZdjdd„Zedddefd	d
„ƒZedkdd„ƒZedldd„ƒZedmdd„ƒZedndd„ƒZdddddœZdd„ Zdd„ Zdd„ Zdd „ Zdod!d"„Zdpdd$œd%d&„Zdqdd'œd(d)„Z drd*d+„Z!d,d-„ Z"dsddd/œd0d1„Z#d2d3„ Z$dtddd/œd5d6„Z%d7d8„ Z&dud9d:„Z'd;d<„ Z(d=d>„ Z)d?d@„ Z*dvdddAœdBdC„Z+dDdE„ Z,dFdG„ Z-dHdI„ Z.dJdK„ Z/dLdM„ Z0dNdO„ Z1dPdQ„ Z2dRdS„ Z3dTdU„ Z4dVdW„ Z5dXdY„ Z6dwdZd[„Z7d\d]„ Z8dxd^d_„Z9d`da„ Z:dbdc„ Z;ddde„ Z<dfdg„ Z=dhdi„ Z>dS )yr   r   Fr#   Nrw   r%  c              
   C   sª  dddddœ}||vrt dƒ‚|| _|| | _|sh| jdkrTtj |¡sTd| _d| _t|| jƒ}d	| _n@|d u rt|d
ƒrt	|j
ttfƒr|j
}t|dƒr¢|j| _d| _|r¸tj |¡nd | _
|| _|d urÒ|| _|d urà|| _|d urî|| _|d urü|| _|d ur|| _|	| _|
d ur0| jtkr0|
| _ni | _|d urF|| _|d urV|| _|| _d	| _g | _d	| _| j ¡ | _i | _zþ| jdkržd | _ |  !¡ | _ | jdkr2| j "| j¡ z| j #| ¡}| j $|¡ W nX t%yü   | j "| j¡ Y q2Y n2 t&y, } zt't|ƒƒ‚W Y d }~n
d }~0 0 qª| jdv r|d| _| jr|| j (| j )¡ ¡}| j *|¡ |  jt+|ƒ7  _W n&   | js˜| j ,¡  d| _‚ Y n0 d S )NÚrbzr+bÚwbZxb©rw   Úarx   rƒ  ú!mode must be 'r', 'a', 'w' or 'x'rž  rx   Fr‚   rƒ   Trw   ©rž  rx   rƒ  )-r0   rƒ   Ú_moderz   r%   ÚexistsÚ	bltn_openr•   r   r:  r‚   r=  rO   Úabspathr™   rS   rä   ÚdereferenceÚignore_zerosr6   r7   r   r  ÚdebugÚ
errorlevelÚcopybufsizer›   ÚmembersÚ_loadedr¾   rÌ   ÚinodesÚfirstmemberro  r¿   re  rÂ   rs   r   r   rC  r  r^   r2   r†   )r   r‚   rƒ   r™   rS   rä   r¥  r¦  r6   r7   r  r§  r¨  r©  ZmodesÚerW   r8   r8   r9   r„   Ž  sŠ    
ÿ





&
zTarFile.__init__c              
      sÈ  |s|st dƒ‚|dv r¬‡ fdd„}tˆ j|dD ]l}tˆ ˆ j| ƒ}|d urV| ¡ }	z||d|fi |¤ŽW   S  ttfyœ   |d ur”| |	¡ Y q2Y q20 q2tdƒ‚nd|v r| dd	¡\}
}|
pÌd}
|pÔd
}|ˆ jv ròtˆ ˆ j| ƒ}ntd| ƒ‚|||
|fi |¤ŽS d|v rœ| dd	¡\}
}|
p4d}
|p>d
}|
dvrRt dƒ‚t	||
|||ƒ}zˆ ||
|fi |¤Ž}W n   | 
¡  ‚ Y n0 d|_|S |dv r¼ˆ j|||fi |¤ŽS t dƒ‚d S )Nznothing to open)rw   úr:*c                    s   ˆ j |  dkS )NÚtaropen)Ú	OPEN_METH)r˜   ©rB  r8   r9   Únot_compressed'  s    z$TarFile.open.<locals>.not_compressed)Úkeyrw   z%file could not be opened successfullyú:r#   r“   r”   ú|rv   zmode must be 'r' or 'w'Fr   zundiscernible mode)r0   Úsortedr±  rh   r¾   r   r   r¿   rD  rŠ   r†   r•   r°  )rB  r‚   rƒ   r™   ra   Úkwargsr³  r˜   ÚfuncZ	saved_posÚfilemodeÚstreamrÆ   r8   r²  r9   r   ý  sP    %







zTarFile.openc                 K   s$   |dvrt dƒ‚| |||fi |¤ŽS )Nr  rŸ  )r0   )rB  r‚   rƒ   r™   r¸  r8   r8   r9   r°  X  s    zTarFile.taropenr©   c                 K   sæ   |dvrt dƒ‚zddlm} W n ty:   tdƒ‚Y n0 z|||d ||ƒ}W n, ty~   |d urx|dkrxtdƒ‚‚ Y n0 z| j|||fi |¤Ž}W n@ tyÆ   | ¡  |dkrÀtdƒ‚‚ Y n   | ¡  ‚ Y n0 d	|_	|S )
N©rw   rx   rƒ  úmode must be 'r', 'w' or 'x'r   )ÚGzipFilezgzip module is not availablerd   rw   r¶   F)
r0   Zgzipr¾  r   r   r¥   r   r°  r†   r•   )rB  r‚   rƒ   r™   Úcompresslevelr¸  r¾  rÆ   r8   r8   r9   Úgzopen`  s0    zTarFile.gzopenc              	   K   s¸   |dvrt dƒ‚zddlm} W n ty:   tdƒ‚Y n0 ||pD|||d}z| j|||fi |¤Ž}W nD ttfy˜   | ¡  |dkr’t	dƒ‚‚ Y n   | ¡  ‚ Y n0 d	|_
|S )
Nr¼  r½  r   )ÚBZ2Filer   )r¿  rw   znot a bzip2 fileF)r0   r   rÁ  r   r   r°  r¥   ÚEOFErrorr†   r   r•   )rB  r‚   rƒ   r™   r¿  r¸  rÁ  rÆ   r8   r8   r9   Úbz2open  s&    zTarFile.bz2openc           	   	   K   s¼   |dvrt dƒ‚zddlm}m} W n ty>   tdƒ‚Y n0 ||pH|||d}z| j|||fi |¤Ž}W nD |tfyœ   | ¡  |dkr–t	dƒ‚‚ Y n   | ¡  ‚ Y n0 d	|_
|S )
Nr¼  r½  r   )ÚLZMAFiler§   r’   )Úpresetrw   znot an lzma fileF)r0   r¦   rÄ  r§   r   r   r°  rÂ  r†   r   r•   )	rB  r‚   rƒ   r™   rÅ  r¸  rÄ  r§   rÆ   r8   r8   r9   Úxzopen  s&    zTarFile.xzopenr°  rÀ  rÃ  rÆ  )r“   rŽ   r   r‘   c                 C   s˜   | j r
d S d| _ zp| jdv rn| j ttd  ¡ |  jtd 7  _t| jtƒ\}}|dkrn| j tt|  ¡ W | j	s”| j 
¡  n| j	s’| j 
¡  0 d S )NTr   r$   r   )r›   rƒ   r™   r^   r3   rÇ   rÌ   r\   Ú
RECORDSIZEr•   r†   )r   rb   rc   r8   r8   r9   r†   Ä  s    
ÿzTarFile.closec                 C   s(   |   | d¡¡}|d u r$td| ƒ‚|S )Nr÷   zfilename %r not found)Ú
_getmemberr\  ÚKeyError)r   r‚   rä   r8   r8   r9   Ú	getmemberÙ  s    zTarFile.getmemberc                 C   s   |   ¡  | js|  ¡  | jS r…   )Ú_checkr«  Ú_loadrª  r‡   r8   r8   r9   Ú
getmembersä  s    zTarFile.getmembersc                 C   s   dd„ |   ¡ D ƒS )Nc                 S   s   g | ]
}|j ‘qS r8   r  )r‚  rä   r8   r8   r9   r„  ò  r   z$TarFile.getnames.<locals>.<listcomp>)rÍ  r‡   r8   r8   r9   Úgetnamesî  s    zTarFile.getnamesc                 C   sZ  |   d¡ |d ur|j}|d u r$|}tj |¡\}}| tjd¡}| d¡}|  ¡ }| |_	|d u r€| j
stt |¡}qŽt |¡}nt | ¡ ¡}d}|j}t |¡rþ|j|jf}	| j
sæ|jdkræ|	| jv ræ|| j|	 kræt}
| j|	 }nt}
|	d rü|| j|	< nht |¡rt}
nVt |¡r"t}
nDt |¡r>t}
t |¡}n(t |¡rPt}
nt  |¡rbt!}
nd S ||_||_"|j#|_$|j%|_&|
tkr–|j'|_(nd|_(|j)|_*|
|_+||_,t-râzt- .|j$¡d |_/W n t0yà   Y n0 t1rzt1 2|j&¡d |_3W n t0y   Y n0 |
tt!fv rVt4tdƒrVt4tdƒrVt 5|j6¡|_7t 8|j6¡|_9|S )NÚawxr÷   rŒ   r#   r   ÚmajorÚminor):rË  r‚   rz   r%   Ú
splitdriver­   rý   rþ   rä   rã   r¥  ÚlstatÚstatÚfstatÚfilenoÚst_modeÚS_ISREGÚst_inoÚst_devÚst_nlinkr¬  rŽ  r  ÚS_ISDIRr"  ÚS_ISFIFOr‘  ÚS_ISLNKr  ÚreadlinkÚS_ISCHRrG  ÚS_ISBLKrH  rƒ   Úst_uidr)   Úst_gidr*   Úst_sizer'   Úst_mtimer(   r  rú   ÚpwdÚgetpwuidr+   rÉ  ÚgrpZgetgrgidr,   r   rÐ  Úst_rdevr  rÑ  r  )r   r‚   Úarcnamer™   Zdrvrä   Zstatresrú   ZstmdÚinoder  r8   r8   r9   Ú
gettarinfoô  s„    	


ÿÿ

zTarFile.gettarinfoT)rª  c                C   s*  |   ¡  |d u r| }|D ]
}|rÎ|jd u r6tdƒ ntt |j¡ƒ td|jpT|j|jp^|jf ƒ | 	¡ sv| 
¡ rtdd|j|jf  ƒ ntd|j ƒ |jd u r²tdƒ ntdt |j¡d d…  ƒ t|j| ¡ ràd	nd
 ƒ |r| ¡ rtd|j ƒ | ¡ rtd|j ƒ tƒ  qd S )Nz
??????????z%s/%sz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02dr¸   r÷   rŒ   z-> zlink to )rË  rƒ   rl   rÔ  rº  r+   r)   r,   r*   r  r  r  r  r'   r(   r°   Ú	localtimer‚   r  r  rú   r  rk   )r   Úverboserª  rä   r8   r8   r9   r  W  s8    



ÿÿ

ÿ

zTarFile.list©Úfilterc                C   sL  |   d¡ |d u r|}| jd urFtj |¡| jkrF|  dd| ¡ d S |  d|¡ |  ||¡}|d u rz|  dd| ¡ d S |d ur¦||ƒ}|d u r¦|  dd| ¡ d S | ¡ ræt|dƒ}|  	||¡ W d   ƒ n1 sÚ0    Y  nb| 
¡ r>|  	|¡ |rHtt |¡ƒD ],}| jtj ||¡tj ||¡||d qn
|  	|¡ d S )	NrÏ  r$   ztarfile: Skipped %rr#   ztarfile: Unsupported type %rútarfile: Excluded %rr›  rï  )rË  r‚   rz   r%   r¤  Ú_dbgrì  r  r£  Úaddfiler  r·  ÚlistdirÚaddrÃ   )r   r‚   rê  Ú	recursiverð  rä   Úfr8   r8   r9   rõ  }  s6    

,

ÿzTarFile.addc                 C   s¾   |   d¡ t |¡}| | j| j| j¡}| j |¡ |  jt	|ƒ7  _| j
}|d ur®t|| j|j|d t|jtƒ\}}|dkrœ| j tt|  ¡ |d7 }|  j|t 7  _| j |¡ d S )NrÏ  )ra   r   r#   )rË  r  r+  rS   r6   r7   r™   r^   rÌ   r2   r©  r[   r'   r\   rÇ   r3   rª  rÂ   )r   rä   r™   rW   ra   rb   rc   r8   r8   r9   ró  °  s    

zTarFile.addfilec                 C   sp   |d u r0| j }|d u rtS t|tƒr,tdƒ‚|S t|ƒr<|S z
t| W S  tyj   td|›dƒd ‚Y n0 d S )NzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z
 not found)	Úextraction_filterr  r:  r=  Ú	TypeErrorÚcallableÚ_NAMED_FILTERSrÉ  r0   )r   rð  r8   r8   r9   Ú_get_filter_functionÉ  s    
ÿ
zTarFile._get_filter_functionÚ.)Únumeric_ownerrð  c                C   sº  g }|   |¡}|d u r| }|D ]L}|  |||¡\}}	|d u r>q| ¡ rP| |	¡ | j||| ¡  ||d q|jdd„ dd |D ]0}	zúz||	|ƒ}W nB tyÚ }
 z*|  |	t|
ƒ¡ W Y d }
~
W q‚W Y d }
~
n
d }
~
0 0 |d u rô|  |	d¡ W q‚t	j
 ||j¡}zt	 |¡}W n& ty8   |  |d¡ Y W q‚Y n0 t |j¡sX|  |d¡ W q‚| j|||d	 |  ||¡ |  ||¡ W q‚ ty² } z|  |¡ W Y d }~q‚d }~0 0 q‚d S )
N)Ú	set_attrsrþ  Úfilter_functionc                 S   s   | j S r…   r  )rž  r8   r8   r9   Ú<lambda>þ  r   z$TarFile.extractall.<locals>.<lambda>T)r´  Úreversezexcluded by filterZmissingznot a directory)rþ  )rü  Ú_get_extract_tarinfor  rÂ   Ú_extract_oneÚsortÚ_FILTER_ERRORSÚ_log_no_directory_fixupÚreprrz   r%   rÃ   r‚   rÓ  ÚFileNotFoundErrorrÔ  rÜ  r×  ÚchownÚutimeÚchmodr
   Ú_handle_nonfatal_error)r   r%   rª  rþ  rð  Zdirectoriesr   r  rä   Ú
unfilteredÚexcÚdirpathrÓ  r®  r8   r8   r9   Ú
extractallÛ  sV    
ÿ
þ
$ÿzTarFile.extractallc                 C   s   |   dd|j|f ¡ d S )Nr$   z(tarfile: Not fixing up directory %r (%s))rò  r‚   )r   r  Úreasonr8   r8   r9   r   	  s    ÿzTarFile._log_no_directory_fixuprŒ   c          	      C   s8   |   |¡}|  |||¡\}}|d ur4|  ||||¡ d S r…   )rü  r  r  )	r   r  r%   rÿ  rþ  rð  r   rä   r  r8   r8   r9   Úextract$	  s    
ÿzTarFile.extractc              
   C   sÖ   t |tƒr|  |¡}n|}d }z|||ƒ}W n^ ttfy^ } z|  |¡ W Y d }~n6d }~0  tyŠ } z|  |¡ W Y d }~n
d }~0 0 |d u rª|  dd|j	 ¡ dS | 
¡ rÎt |¡}tj ||j¡|_||fS )Nr$   rñ  )NN)r:  r=  rÊ  r¥   ré   Ú_handle_fatal_errorr
   r  rò  r‚   r  r  rz   r%   rÃ   rú   r  )r   r  r   r%   r  Úfilteredr®  r8   r8   r9   r  8	  s"    
 
zTarFile._get_extract_tarinfoc              
   C   s   |   d¡ z&| j|tj ||j¡||||d W nZ ty^ } z|  |¡ W Y d }~n6d }~0  tyŠ } z|  	|¡ W Y d }~n
d }~0 0 d S )Nrw   )rÿ  rþ  r   Úextraction_root)
rË  Ú_extract_memberrz   r%   rÃ   r‚   r¥   r  r
   r  )r   rä   r%   rÿ  rþ  r   r®  r8   r8   r9   r  V	  s    
ü
zTarFile._extract_onec                 C   s"   | j dkr‚ n|  dd| ¡ d S )Nr#   útarfile: %s)r¨  rò  ©r   r®  r8   r8   r9   r  j	  s    
zTarFile._handle_nonfatal_errorc                 C   sn   | j dkr‚ n\t|tƒrP|jd u r6|  dd|j ¡ qj|  dd|j|jf ¡ n|  ddt|ƒj|f ¡ d S )Nr   r#   r  ztarfile: %s %rztarfile: %s %s)r¨  r:  r¥   Úfilenamerò  Ústrerrorr  rn   r  r8   r8   r9   r  q	  s    


zTarFile._handle_fatal_errorc                 C   s‚   |   d¡ t|tƒr |  |¡}n|}| ¡ s6|jtvrB|  | |¡S | ¡ sR| 	¡ rzt| j
tƒrhtdƒ‚q~|  |  |¡¡S nd S d S )Nrw   z'cannot extract (sym)link as file object)rË  r:  r=  rÊ  r  r  rk  Ú
fileobjectr  r  r™   rŠ   r	   ÚextractfileÚ_find_link_target)r   r  rä   r8   r8   r9   r  }	  s    


zTarFile.extractfile©r   r  c                C   sZ  |  d¡}| dtj¡}tj |¡}|r>tj |¡s>t |¡ | ¡ sN| 	¡ rh|  
dd|j|jf ¡ n|  
d|j¡ | ¡ rŒ|  ||¡ n”| ¡ r¢|  ||¡ n~| ¡ r¸|  ||¡ nh| ¡ sÈ| ¡ rÖ|  ||¡ nJ| ¡ sæ| 	¡ rú| j||||d n&|jtvr|  ||¡ n|  ||¡ |rV|  |||¡ | 	¡ sV|  ||¡ |  ||¡ d S )Nr÷   r#   z%s -> %sr  )r\  r­   rz   rý   r%   r  r¢  Úmakedirsr  r  rò  r‚   rú   r  Úmakefiler  Úmakedirr’  Úmakefifor  r  ÚmakedevÚmakelink_with_filterr  rk  Úmakeunknownr
  r  r  )r   rä   Ú
targetpathrÿ  rþ  r   r  Z	upperdirsr8   r8   r9   r  	  s<    

ý
zTarFile._extract_memberc                 C   s>   z&|j d u rt |¡ nt |d¡ W n ty8   Y n0 d S )NiÀ  )rƒ   rz   ÚmkdirÚFileExistsError©r   rä   r'  r8   r8   r9   r"  Õ	  s    
zTarFile.makedirc                 C   s¢   | j }| |j¡ | j}t|dƒl}|jd urn|jD ]"\}}| |¡ t|||t|ƒ q4| |j¡ | 	¡  nt|||jt|ƒ W d   ƒ n1 s”0    Y  d S )Nrœ  )
r™   r¿   rà   r©  r£  rá   r[   r   r'   Útruncate)r   rä   r'  Úsourcera   ÚtargetrÌ   r'   r8   r8   r9   r!  ã	  s    


zTarFile.makefilec                 C   s"   |   ||¡ |  dd|j ¡ d S )Nr#   z9tarfile: Unknown file type %r, extracted as regular file.)r!  rò  r  r*  r8   r8   r9   r&  ó	  s    ÿzTarFile.makeunknownc                 C   s"   t tdƒrt |¡ ntdƒ‚d S )NÚmkfifozfifo not supported by system)r   rz   r.  r
   r*  r8   r8   r9   r#  û	  s    
zTarFile.makefifoc                 C   sj   t tdƒrt tdƒstdƒ‚|j}|d u r.d}| ¡ rB|tjO }n
|tjO }t ||t 	|j
|j¡¡ d S )NÚmknodr$  z'special devices not supported by systemrù   )r   rz   r
   rƒ   r  rÔ  ÚS_IFBLKÚS_IFCHRr/  r$  r  r  )r   rä   r'  rƒ   r8   r8   r9   r$  
  s    
ÿzTarFile.makedevc                 C   s   |   ||d d ¡S r…   )r%  r*  r8   r8   r9   Úmakelink
  s    zTarFile.makelinkc           	   
   C   s(  d}zX|  ¡ r8tj |¡r$t |¡ t |j|¡ W d S tj |j¡rZt 	|j|¡ W d S W n t
yr   d}Y n0 z|  |¡}W n" ty¤   |ržtdƒ‚n‚ Y n0 |d u r´|}nT|d u rÄtdƒ‚z|||ƒ}W n4 ty } zt||jƒ|‚W Y d }~n
d }~0 0 |d ur$| j||||d d S )NFTz%unable to resolve link inside archivez[makelink_with_filter: if filter_function is not None, extraction_root must also not be Noner  )r  rz   r%   ÚlexistsÚunlinkÚsymlinkrú   r¢  r  ÚlinkÚsymlink_exceptionr  rÉ  r
   r  rö   r‚   r  )	r   rä   r'  r   r  Zkeyerror_to_extracterrorr  r  Úcauser8   r8   r9   r%  
  sF    	


ÿÿ$
þzTarFile.makelink_with_filterc                 C   sö   t tdƒròt ¡ dkrò|j}|j}|sŠztrB|jrBt |j¡d }W n tyV   Y n0 zt	rt|j
rtt	 |j
¡d }W n tyˆ   Y n0 |d u r–d}|d u r¢d}z4| ¡ rÆt tdƒrÆt |||¡ nt |||¡ W n tyð   tdƒ‚Y n0 d S )NÚgeteuidr   r$   r;   Úlchownzcould not change owner)r   rz   r9  r*   r)   rè  r,   ZgetgrnamrÉ  ræ  r+   Úgetpwnamr  r:  r
  r¥   r
   )r   rä   r'  rþ  ÚgÚur8   r8   r9   r
  J
  s0    

zTarFile.chownc                 C   s@   |j d u rd S zt ||j ¡ W n ty:   tdƒ‚Y n0 d S )Nzcould not change mode)rƒ   rz   r  r¥   r
   r*  r8   r8   r9   r  k
  s    
zTarFile.chmodc                 C   sT   |j }|d u rd S ttdƒs d S zt |||f¡ W n tyN   tdƒ‚Y n0 d S )Nr  z"could not change modification time)r(   r   rz   r  r¥   r
   )r   rä   r'  r(   r8   r8   r9   r  u
  s    
zTarFile.utimec                 C   sl  |   d¡ | jd ur$| j}d | _|S | j| j ¡ krZ| j | jd ¡ | j d¡sZtdƒ‚d }z| j 	| ¡}W qJ t
yÌ } zD| jr¶|  dd| j|f ¡ |  jt7  _W Y d }~q^W Y d }~qJd }~0  tyD } z`| jr|  dd| j|f ¡ |  jt7  _W Y d }~q^n| jdkr.tt|ƒƒ‚W Y d }~qJd }~0  tyj   | jdkrftdƒ‚Y nÚ ty¦ } z$| jdkr’tt|ƒƒ‚W Y d }~n¦d }~0  tyÖ } ztt|ƒƒ‚W Y d }~nvd }~0  tyB } zTz.dd l}t||jƒrtd|› ƒ‚n|‚W n ty,   |‚Y n0 W Y d }~n
d }~0 0 qJq^|d urb| j |¡ nd	| _|S )
NZrar#   rY   r$   z0x%X: %sr   z
empty filezzlib error: T)rË  r­  rÌ   r™   r¾   r¿   r]   r   rä   re  rs   r¦  rò  rÇ   rK   r=  rq   rr   rt   Ú	Exceptionrœ   r:  r¡   r   rª  rÂ   r«  )r   Úmrä   r®  rœ   r8   r8   r9   ro  ƒ
  sZ    

""   
zTarFile.nextc           	      C   s´   |   ¡ }d}|d urFz| |¡}W n ty8   d}Y n0 |d |… }|rVtj |¡}t|ƒD ]D}|rx|j|jkr^d}q^|rŒtj |j¡}n|j}||kr^|  S q^|r°t|ƒ‚d S )NFT)	rÍ  Úindexr0   rz   r%   r  ÚreversedrÌ   r‚   )	r   r‚   rä   Ú	normalizerª  Zskippingr@  r  Úmember_namer8   r8   r9   rÈ  Â
  s,    

zTarFile._getmemberc                 C   s   |   ¡ }|d u r qq d| _d S rÐ   )ro  r«  rì   r8   r8   r9   rÌ  ê
  s    zTarFile._loadc                 C   s:   | j rtd| jj ƒ‚|d ur6| j|vr6td| j ƒ‚d S )Nz%s is closedzbad operation for mode %r)r›   r¥   ræ   rn   rƒ   )r   rƒ   r8   r8   r9   rË  ô
  s    zTarFile._checkc                 C   s`   |  ¡ r.d td tj |j¡|jfƒ¡}d }n
|j}|}| j||dd}|d u r\t	d| ƒ‚|S )Nr÷   T)rä   rB  zlinkname %r not found)
r  rÃ   rð  rz   r%   r  r‚   rú   rÈ  rÉ  )r   rä   rú   Úlimitr  r8   r8   r9   r  ý
  s     zTarFile._find_link_targetc                 c   sŠ   | j r| jE d H  d S d}| jd ur:|  ¡ }|d7 }|V  |t| jƒk rT| j| }n"| j sr|  ¡ }|svd| _ d S nd S |d7 }|V  q:d S )Nr   r#   T)r«  rª  r­  ro  r2   )r   r@  rä   r8   r8   r9   Ú__iter__  s$    
zTarFile.__iter__c                 C   s   || j krt|tjd d S )N©Úfile)r§  rk   ri   Ústderr)r   ÚlevelÚmsgr8   r8   r9   rò  /  s    
zTarFile._dbgc                 C   s   |   ¡  | S r…   )rË  r‡   r8   r8   r9   Ú	__enter__5  s    zTarFile.__enter__c                 C   s,   |d u r|   ¡  n| js"| j  ¡  d| _d S rÐ   )r†   r•   r™   r›   )r   r  r*  Ú	tracebackr8   r8   r9   Ú__exit__9  s
    

zTarFile.__exit__)Nrw   NNNNNNr%  NNNN)rw   N)rw   Nr©   )rw   Nr©   )rw   NN)NNN)T)NT)N)rý  N)rŒ   T)N)TF)NF)N)?rn   ro   rp   r§  r¥  r¦  r¨  r   rS   r   r6   r7   r   rä   rß   r  rø  r„   r™  rÇ  r   r°  rÀ  rÃ  rÆ  r±  r†   rÊ  rÍ  rÎ  rì  r  rõ  ró  rü  r  r  r  r  r  r  r  r  r  r"  r!  r&  r#  r$  r2  r%  r
  r  r  ro  rÈ  rÌ  rË  r  rE  rò  rK  rM  r8   r8   r8   r9   r   r  sš       ý
oZ ü


c&3
ÿEÿ ÿ
   ÿþ82!
?
(

	r   c                 C   sF   z,t | dƒrt| d}nt| ƒ}| ¡  W dS  ty@   Y dS 0 d S )Nr]   )r™   TF)r   r   r†   r   )r‚   rÆ   r8   r8   r9   r   G  s    
r   c               	   C   s`  dd l } d}| j|d}|jdddddd	 |jd
dtd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rº|jd u rº| d"d#¡ |j	d urJ|j	}t
|ƒr4t|d$ƒ*}| ¡  t| ¡ tjd% W d   ƒ n1 s0    Y  |jrFtd& |¡ƒ n| d"d' |¡¡ n|jd urº|j}t
|ƒr¤t |d(¡}|j|jd) W d   ƒ n1 s˜0    Y  n| d"d' |¡¡ n¢|jd ur¤t|jƒd"krè|jd }tj}n,t|jƒd*kr|j\}}n| d"| ¡ ¡ t
|ƒrt |d(¡ }|j||jd+ W d   ƒ n1 sR0    Y  |jr¢|d,krzd- |¡}	nd. ||¡}	t|	ƒ n| d"d' |¡¡ n¸|jd ur\|j d¡}
tj |
¡\}}d/d/d0d0d1d1d1d1d2œ}||v rød3||  nd4}|j}t |
|¡&}|D ]}| |¡ qW d   ƒ n1 s<0    Y  |jr\td5 |
¡ƒ d S )6Nr   z3A simple command-line interface for tarfile module.)Údescriptionz-vz	--verboseÚ
store_trueFzVerbose output)ÚactionÚdefaultÚhelpz--filterz<filtername>zFilter for extraction)ÚmetavarÚchoicesrR  T)Zrequiredz-lz--listú	<tarfile>zShow listing of a tarfile)rS  rR  z-ez	--extractú+)rU  z<output_dir>zExtract tarfile into target dir)ÚnargsrS  rR  z-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#   z&--filter is only valid for extraction
rw   rF  z{!r} is a tar archive.z{!r} is not a tar archive.
r¯  )rî  r$   )r%   rð  rý  z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.rŽ   r‘   r   )r«   z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rx   z{!r} file created.)ÚargparseÚArgumentParserÚadd_argumentrû  Zadd_mutually_exclusive_groupÚ
parse_argsrð  r  ÚexitÚtestr   r   rÍ  rk   ri   rH  rî  rS   r  r   r2   rz   ÚcurdirZformat_helpr  ZcreateÚpopr%   Úsplitextrõ  )rX  rN  Úparserrw  Úargsr_   r“   Ztfr^  rJ  Ztar_namer  ZextZcompressionsZtar_modeZ	tar_filesÚ	file_namer8   r8   r9   ÚmainZ  s     ÿþ
ÿ
þ
þ
ÿ
2
0

0
ÿ
õ.rd  Ú__main__)T)nÚversionÚ
__author__Ú__credits__Úbuiltinsr   r£  ri   rz   rÔ   rZ   rÔ  r°   rV   r  ÚreÚwarningsræ  r   rè  ÚAttributeErrorÚNotImplementedErrorr7  r¥   Ú	NameErrorÚ__all__r3   rÇ   rÇ  r3  r.  r0  r/  rE  r  rY  rŽ  r  rG  rH  r"  r‘  ZCONTTYPEr6  r5  rZ  r?  rA  rh  r   r   r   r   rk  r‹  r]  rˆ  rz  r;  rI   r‰  r‚   r   Úgetfilesystemencodingr:   r?   rN   rT   rX   r[   rl   r>  r   r
   r   r   r	   r   rq   rr   rs   rK   rt   ru   rŠ   Úobjectr–   rË   ÚBufferedReaderrß   ré   rê   rí   ró   rô   rõ   rö   r  r
  r  r  r  rû  r  Úcompileru  r   r   r   rd  rn   r8   r8   r8   r9   Ú<module>    s  

	üÿÿú sh


Dý
               ^_
