
    -hh?                       S r SrSrSSKJr  SSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKr SSKr SSKr\\\4r/ SQrSrSr\S	-  rS
rSrSrSrSrSrSr Sr!Sr"Sr#Sr$Sr%Sr&Sr'Sr(Sr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0\0r1\\ \!\"\%\&\'\#\$\(\)\*4r2\\ \'\*4r3\(\)\*4r4Sr51 Skr6\7\7\7\8\8\8S .r9\Rt                  S!:X  a  S"r;O\Rx                  " 5       r;S# r=S$ r>S% r?S&\14S' jr@S( rAS\S4S) jrBS* rC " S+ S,\D5      rE " S- S.\E5      rF " S/ S0\E5      rG " S1 S2\E5      rH " S3 S4\E5      rI " S5 S6\E5      rJ " S7 S8\J5      rK " S9 S:\J5      rL " S; S<\J5      rM " S= S>\J5      rN " S? S@\J5      rO " SA SB5      rP " SC SD5      rQ " SE SF\R5      rS " SG SH\R5      rT " SI SJ\R                  5      rV " SK SL\E5      rW " SM SN\W5      rX " SO SP\W5      rY " SQ SR\W5      rZ " SS ST\W5      r[ " SU SV\W5      r\ " SW SX\W5      r]\W\\F4r^SfSY jr_SZ r`S[ raS\ rb\`\a\bS].rc\R" 5       rd\R                  " S^5      rf " S_ S`\R5      rg " Sa Sb\R5      rhSc ri\hR                  rSd rj\kSe:X  a  \j" 5         gg! \ a    Sr GN*f = f! \ a    Sr GN4f = f)gz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   fully_trusted_filterdata_filter
tar_filterFilterErrorAbsoluteLinkErrorOutsideDestinationErrorSpecialFileErrorAbsolutePathErrorLinkOutsideDestinationErrorLinkFallbackError    i      s   ustar   s   ustar 00d         0   1   2   3   4   5   6   7   L   K   S   x   g   X      )pathlinkpathsizemtimeuidgidunamegname>   r0   r7   r6   r1   )atimectimer3   r4   r5   r2   ntutf-8c                 v    U c  [        S5      eU R                  X#5      n U S U U[        U 5      -
  [        -  -   $ )Nzmetadata cannot contain None)
ValueErrorencodelenNUL)slengthencodingerrorss       0/opt/python-3.13.8/usr/lib/python3.13/tarfile.pystnrF      sA     	y788	"AWf:#a&C///    c                 \    U R                  S5      nUS:w  a  U S U n U R                  X5      $ )Nr   )finddecode)rA   rC   rD   ps       rE   ntsrM      s2     	
uABwbqE88H%%rG   c                 J   U S   S;   aO  Sn[        [        U 5      S-
  5       H  nUS-  nXUS-      -  nM     U S   S:X  a  S[        U 5      S-
  -  U-
  * nU$  [        U SS5      n [        U R	                  5       =(       d    S	S5      nU$ ! [
         a    [        S
5      ef = f)Nr   )      r.      rP      asciistrict0invalid header)ranger?   rM   intstripr=   InvalidHeaderError)rA   nis      rE   ntir]      s    
 	t~s1vz"A!GA1q5MA # Q45=#a&1*%)*A H	7Aw)AAGGI$a(A H  	7$%566	7s   0B B"rQ   c                    U n[        U 5      n SU s=::  a  SUS-
  -  :  a   O  O[        SUS-
  U 4-  S5      [        -   nU$ U[        :X  au  SUS-
  -  * U s=::  a  SUS-
  -  :  a[  O  OXU S:  a  [	        S/5      nO[	        S/5      nSU-  U -   n [        US-
  5       H  nUR                  SU S-  5        U S-  n M     U$ [        S	5      e)
Nr   rQ   r.   z%0*orS   rR   rO   rP   zoverflow in number field)rX   bytesr@   r   	bytearrayrW   insertr=   )r[   digitsformat
original_nrA   r\   s         rE   itnre      s     JAAA!fqj!!&FQJ?*G4s: H 
:	36A:#6"6!"Qcfqj>Q"Q65'"A5'"Av!Avz"AHHQE	"!GA # H 344rG   c                     S[        [        R                  " SU 5      5      -   nS[        [        R                  " SU 5      5      -   nX4$ )NrR   
148B8x356B
148b8x356b)sumstructunpack_from)bufunsigned_chksumsigned_chksums      rE   calc_chksumsro      sE     C 2 2< EFFO#f00sCDDM))rG   c                    U=(       d    SnUS:X  a  g Uc  [         R                  " XU5        g [        X$5      u  pV[        U5       H<  nU R	                  U5      n[        U5      U:  a  U" S5      eUR                  U5        M>     US:w  a9  U R	                  U5      n[        U5      U:  a  U" S5      eUR                  U5        g )Ni @  r   unexpected end of data)shutilcopyfileobjdivmodrW   readr?   write)	srcdstrB   	exceptionbufsizeblocks	remainderbrl   s	            rE   rs   rs      s     "G{~3W-v/F6]hhws8g455		#	  A~hhy!s8i455		#
rG   c                     [        [        R                  SS 5      nUb!  U R                  US5      R	                  U5      n [        U SS9  g )NrC   backslashreplace )end)getattrsysstdoutr>   rK   print)rA   rC   s     rE   _safe_printr     s@    szz:t4HHHX1299(C	!rG   c                       \ rS rSrSrg)r   i   N__name__
__module____qualname____firstlineno____static_attributes__r   rG   rE   r   r         rG   r   c                       \ rS rSrSrg)r   i  r   Nr   r   rG   rE   r   r     r   rG   r   c                       \ rS rSrSrg)r   i  r   Nr   r   rG   rE   r   r     r   rG   r   c                       \ rS rSrSrg)r	   i  r   Nr   r   rG   rE   r	   r	     r   rG   r	   c                       \ rS rSrSrg)r
   i  r   Nr   r   rG   rE   r
   r
     r   rG   r
   c                       \ rS rSrSrg)r   i  r   Nr   r   rG   rE   r   r     r   rG   r   c                       \ rS rSrSrg)EmptyHeaderErrori  r   Nr   r   rG   rE   r   r     r   rG   r   c                       \ rS rSrSrg)TruncatedHeaderErrori"  r   Nr   r   rG   rE   r   r   "  r   rG   r   c                       \ rS rSrSrg)EOFHeaderErrori%  r   Nr   r   rG   rE   r   r   %  r   rG   r   c                       \ rS rSrSrg)rZ   i(  r   Nr   r   rG   rE   rZ   rZ   (  r   rG   rZ   c                       \ rS rSrSrg)SubsequentHeaderErrori+  r   Nr   r   rG   rE   r   r   +  r   rG   r   c                   ,    \ rS rSrS rS rS rS rSrg)_LowLevelFilei2  c                    [         R                  [         R                  [         R                  -  [         R                  -  S.U   n[        [         S5      (       a  U[         R                  -  n[         R                  " XS5      U l        g )NrwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr   r   fd)selfnamemodes      rE   __init___LowLevelFile.__init__8  sb    rzz)BJJ6
  2z""BKKD''$e,rG   c                 D    [         R                  " U R                  5        g N)r   closer   r   s    rE   r   _LowLevelFile.closeA  s    
rG   c                 D    [         R                  " U R                  U5      $ r   )r   ru   r   r   r2   s     rE   ru   _LowLevelFile.readD  s    wwtww%%rG   c                 F    [         R                  " U R                  U5        g r   )r   rv   r   r   rA   s     rE   rv   _LowLevelFile.writeG  s    
!rG   )r   N)	r   r   r   r   r   r   ru   rv   r   r   rG   rE   r   r   2  s    -&rG   r   c                   `    \ rS rSrS rS rS rS rS rS r	S r
S	 rSS
 jrS rS rS rSrg)_StreamiJ  c                 Z   SU l         Uc  [        X5      nSU l         US:X  a  [        U5      nUR                  5       nUb  [        R
                  " U5      OSU l        X l        X0l        X@l	        XPl
        SU l        SU l        SU l         US:X  a[   SS KnXpl        UR#                  S5      U l        US	:X  a"  UR&                  U l        U R+                  5         g U R-                  U5        g US
:X  aJ   SS KnUS	:X  a(  SU l        UR3                  5       U l        [6        U l        g UR9                  U5      U l        g US:X  aO   SS Kn	US	:X  a.  SU l        U	R=                  5       U l        U	R>                  U l        g U	RA                  5       U l        g US:w  a  [!        SU-  5      eg ! [         a    [!        S5      S ef = f! [         a    [!        S5      S ef = f! [         a    [!        S5      S ef = f!   U R                   (       d  U R                  RC                  5         SU l        e = f)NTF* rG   r   gzzzlib module is not availabler   bz2bz2 module is not availablexzlzma module is not availabletarunknown compression type %r)"_extfileobjr   _StreamProxygetcomptyper   fspathr   r   comptypefileobjrz   rl   posclosedzlibImportErrorr	   crc32crcerrorry   _init_read_gz_init_write_gzr   dbufBZ2DecompressorcmpOSErrorBZ2CompressorlzmaLZMADecompressor	LZMAErrorLZMACompressorr   )
r   r   r   r   r   rz   compresslevelr   r   r   s
             rE   r   _Stream.__init__V  s     ?#D/G$Ds? #7+G**,H+/+;		$		 -	4U !	::c?3;%)ZZDN&&(''6U"T 3; #DI"224DH%,DN"00?DHT!U 3; #DI#446DH%)^^DN#224DHU"&'Dx'OPP #E # U*+IJPTTU # T*+HItST # U*+IJPTTU	##""$DKsy   G5 F' AG5 G5 -G5 4G 8-G5 &G5 =G5 G 3G5 <G5 G5 'F>>G5 GG5 G22G5 55H*c                 l    [        U S5      (       a#  U R                  (       d  U R                  5         g g g )Nr   )r   r   r   r   s    rE   __del___Stream.__del__  s&    4""4;;JJL ,7"rG   c                    U R                   R                  UU R                   R                  U R                   R                  * U R                   R                  S5      U l        [        R                  " S[        [        R                  " 5       5      5      nU R                  SU-   S-   5        U R                  R                  S5      (       a  U R                  S S U l        [        R                  R                  U R                  5      U l        U R                  U R                  R!                  SS5      ["        -   5        g )	Nr   <Ls   s   .gzz
iso-8859-1replace)r   compressobjDEFLATED	MAX_WBITSDEF_MEM_LEVELr   rj   packrX   time_Stream__writer   endswithr   r0   basenamer>   r@   )r   r   	timestamps      rE   r   _Stream._init_write_gz  s     99(()-););*.))*=*=)=)-)@)@)*	,
 KKc$))+&67	(94{BC99e$$		#2DIGG$$TYY/	TYY%%lI>DErG   c                 ,   U R                   S:X  a*  U R                  R                  XR                  5      U l        U =R                  [        U5      -  sl        U R                   S:w  a  U R                  R                  U5      nU R                  U5        g )Nr   r   )	r   r   r   r   r   r?   r   compressr   r   s     rE   rv   _Stream.write  se     ==D yyq((3DHCF==E!!!!$AQrG   c                 `   U =R                   U-  sl         [        U R                   5      U R                  :  av  U R                  R	                  U R                   S U R                   5        U R                   U R                  S  U l         [        U R                   5      U R                  :  a  Mu  g g r   )rl   r?   rz   r   rv   r   s     rE   __write_Stream.__write  sr     	A$((mdll*LLtxx67xx.DH $((mdll*rG   c                 4   U R                   (       a  g SU l          U R                  S:X  a=  U R                  S:w  a-  U =R                  U R                  R                  5       -  sl        U R                  S:X  a  U R                  (       a  U R                  R                  U R                  5        SU l        U R                  S:X  aw  U R                  R                  [        R                  " SU R                  5      5        U R                  R                  [        R                  " SU R                  S-  5      5        U R                  (       d  U R                  R                  5         g g ! U R                  (       d  U R                  R                  5         f f = f)NTr   r   rG   r   r   l    )r   r   r   rl   r   flushr   rv   rj   r   r   r   r   r   r   s    rE   r   _Stream.close  s	    ;;	%yyCDMMU$:DHHNN,,yyCDHH""488,==D(LL&&v{{4'BCLL&&v{{4J9N'OP##""$ $4##""$ $s   D!E) ).Fc                    U R                   R                  U R                   R                  * 5      U l        SU l        U R                  S5      S:w  a  [        S5      eU R                  S5      S:w  a  [        S5      e[        U R                  S5      5      nU R                  S5        US	-  (       aI  [        U R                  S5      5      S
[        U R                  S5      5      -  -   nU R                  U5        US-  (       a&   U R                  S5      nU(       a
  U[        :X  a  OM%  US-  (       a&   U R                  S5      nU(       a
  U[        :X  a  OM%  US-  (       a  U R                  S5        g g )NrG   r/   s   not a gzip filer.      zunsupported compression method      rR   rQ      )r   decompressobjr   r   r   _Stream__readr   r	   ordru   r@   )r   flagxlenrA   s       rE   r   _Stream._init_read_gz  s+    99**DII,?,?+?@	 ;;q>[(-..;;q>W$"#CDD4;;q>"A!8t{{1~&s4;;q>/B)BBDIIdO!8KKNAH  "9KKNAH  !8KKN rG   c                     U R                   $ r   )r   r   s    rE   tell_Stream.tell  s     xxrG   c                    XR                   -
  S:  an  [        XR                   -
  U R                  5      u  p#[        U5       H  nU R	                  U R                  5        M      U R	                  U5        U R                   $ [        S5      e)Nr   z seeking backwards is not allowed)r   rt   rz   rW   ru   r
   )r   r   r{   r|   r\   s        rE   seek_Stream.seek  sn     >Q &sXX~t|| DF6]		$,,' #IIi  xx @AArG   c                 d    U R                  U5      nU =R                  [        U5      -  sl        U$ r   )_readr   r?   )r   r2   rl   s      rE   ru   _Stream.read  s)     jjCH
rG   c                 @   U R                   S:X  a  U R                  U5      $ [        U R                  5      nU R                  /nX!:  a  U R                  (       a  U R                  nSU l        O-U R
                  R                  U R                  5      nU(       d  OB U R                  R                  U5      nUR                  U5        U[        U5      -  nX!:  a  M  SR                  U5      nX1S  U l        US U $ ! U R                   a  n[        S5      UeS nAff = f)Nr   rG   zinvalid compressed data)r   r  r?   r   rl   r   ru   rz   r   
decompressry   r   appendjoin)r   r2   ctrl   es         rE   r  _Stream._read  s     ==E!;;t$$		NYYKhxxhhll''5Bhh))#. HHSMSMA h HHQKeH	$x >> B 9:ABs   C< <DDDc                 4   [        U R                  5      nU R                  /nX!:  aS  U R                  R                  U R                  5      nU(       d  O&UR                  U5        U[        U5      -  nX!:  a  MS  SR                  U5      nX1S  U l        US U $ )NrG   )r?   rl   r   ru   rz   r  r  )r   r2   r  r  rl   s        rE   __read_Stream.__read.  s     MXXJh,,##DLL1CHHSMSMA h HHQKU8$xrG   )r   rl   rz   r   r   r   r   r   ry   r   r   r   r   r   N)r   )r   r   r   r   r   r   r   rv   r   r   r   r  r  ru   r  r  r   r   rG   rE   r   r   J  sA    ENF"/%,>
6rG   r   c                   ,    \ rS rSrS rS rS rS rSrg)r   i?  c                 X    Xl         U R                   R                  [        5      U l        g r   )r   ru   	BLOCKSIZErl   )r   r   s     rE   r   _StreamProxy.__init__D  s    <<$$Y/rG   c                 P    U R                   R                  U l        U R                  $ r   )r   ru   rl   r   s     rE   ru   _StreamProxy.readH  s    LL%%	xxrG   c                     U R                   R                  S5      (       a  gU R                   SS S:X  a  U R                   SS S:X  a  g	U R                   R                  S
5      (       a  gg)Ns   r   r      s   BZhr  
   s   1AY&SYr   )s   ]  s   7zXZr   r   )rl   
startswithr   s    rE   r   _StreamProxy.getcomptypeL  s\    88//XXa]f$!B9)DXX  !CDDrG   c                 8    U R                   R                  5         g r   )r   r   r   s    rE   r   _StreamProxy.closeV  s    rG   )rl   r   ru   N)	r   r   r   r   r   ru   r   r   r   r   rG   rE   r   r   ?  s    
0rG   r   c                       \ rS rSrSS jrS r\S 5       rS rS r	S r
S	 r\R                  4S
 jrSS jrS rS rSrg)_FileInFilei]  Nc                    Xl         X l        X0l        SU l        X@l        SU l        Uc  SU4/nSU l        / U l        SnU R                  nU HQ  u  p#X&:  a  U R                  R                  SXbS 45        U R                  R                  SX"U-   U45        Xs-  nX#-   nMS     X`R                  :  a)  U R                  R                  SX`R                  S 45        g g )Nr   FT)	r   offsetr2   positionr   r   	map_indexmapr  )r   r   r.  r2   r   	blockinfolastposrealposs           rE   r   _FileInFile.__init__c  s    		TI ++%LF >?HHOOT6D='BCOGmG & YYHHOOUGYY=> rG   c                     g r   r   r   s    rE   r   _FileInFile.flush|  s    rG   c                     g)Nrbr   r   s    rE   r   _FileInFile.mode  s    rG   c                     gNTr   r   s    rE   readable_FileInFile.readable  s    rG   c                     gNFr   r   s    rE   writable_FileInFile.writable  s    rG   c                 6    U R                   R                  5       $ r   )r   seekabler   s    rE   rD  _FileInFile.seekable  s    ||$$&&rG   c                     U R                   $ r   )r/  r   s    rE   r  _FileInFile.tell       }}rG   c                 8   U[         R                  :X  a1  [        [        US5      U R                  5      U l        U R
                  $ U[         R                  :X  ae  US:  a*  [        U R
                  U-   S5      U l        U R
                  $ [        U R
                  U-   U R                  5      U l         U R
                  $ U[         R                  :X  a>  [        [        U R                  U-   U R                  5      S5      U l        U R
                  $ [        S5      e)Nr   zInvalid argument)	ioSEEK_SETminmaxr2   r/  SEEK_CURSEEK_ENDr=   )r   r/  whences      rE   r  _FileInFile.seek  s     R[[ Ha 0$))<DM }} r{{"!| #DMMH$<a @ }} !$DMMH$<dii H
 }}	 r{{"DII$8$)) DaHDM }} /00rG   c                    Uc  U R                   U R                  -
  nO"[        XR                   U R                  -
  5      nSnUS:  Ga)   U R                  U R                     u  p4pVX@R                  s=::  a  U:  a  O  OOAU =R                  S-  sl        U R                  [        U R                  5      :X  a  SU l        Mw  [        XU R                  -
  5      nU(       ad  U R                  R                  X`R                  U-
  -   5        U R                  R                  U5      n[        U5      U:w  a  [        S5      eX(-  nOU[        U-  -  nX-  nU =R                  U-  sl        US:  a  GM)  U$ )NrG   r   r.   rq   )r2   r/  rL  r1  r0  r?   r   r  ru   r   r@   )	r   r2   rl   datastartstopr.  rB   r}   s	            rE   ru   _FileInFile.read  s4    <99t}},DtYY67DQh,0HHT^^,D)TMM0D0NNa'N~~TXX6)*  dmm34F!!&MME,A"BCLL%%f-q6V##$<==sV|#NDMMV#M' Qh( 
rG   c                 f    U R                  [        U5      5      nX!S [        U5      & [        U5      $ r   )ru   r?   )r   r}   rl   s      rE   readinto_FileInFile.readinto  s*    iiA)3s83xrG   c                     SU l         g r<  )r   r   s    rE   r   _FileInFile.close  s	    rG   )r   r   r1  r0  r   r.  r/  r2   r   )r   r   r   r   r   r   propertyr   r=  rA  rD  r  rJ  rK  r  ru   rX  r   r   r   rG   rE   r,  r,  ]  sQ    ?2  '
 %'KK  >
rG   r,  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )ExFileObjecti  c                    > [        UR                  UR                  UR                  UR                  UR
                  5      n[        TU ]  U5        g r   )r,  r   offset_datar2   r   sparsesuperr   )r   tarfiletarinfor   	__class__s       rE   r   ExFileObject.__init__  s;    goow/B/BgllGNN<!rG   r   r   r   r   r   r   r   __classcell__re  s   @rE   r^  r^    s    " "rG   r^  c                       \ rS rSrSrg)r   i  r   Nr   r   rG   rE   r   r     s    rG   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i  c                 N   > Xl         [        TU ]	  SUR                  < S35        g )Nzmember z has an absolute pathrd  rb  r   r   r   rd  re  s     rE   r   AbsolutePathError.__init__  s$    77<<"22GHIrG   rd  rg  ri  s   @rE   r   r     s    J JrG   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i  c                 f   > Xl         X l        [        TU ]  UR                  < SU< S3S-   5        g )Nz would be extracted to ,  which is outside the destinationrd  _pathrb  r   r   r   rd  r0   re  s      rE   r    OutsideDestinationError.__init__  s7    
GLL++B4("M=> 	?rG   rv  rd  rg  ri  s   @rE   r   r         ? ?rG   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i  c                 L   > Xl         [        TU ]	  UR                  < S35        g )Nz is a special filerm  rn  s     rE   r   SpecialFileError.__init__  s"    GLL++=>?rG   rp  rg  ri  s   @rE   r   r     s    @ @rG   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i  c                 L   > Xl         [        TU ]	  UR                  < S35        g )Nz is a link to an absolute pathrm  rn  s     rE   r   AbsoluteLinkError.__init__  s"    GLL++IJKrG   rp  rg  ri  s   @rE   r   r     s    L LrG   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i  c                 f   > Xl         X l        [        TU ]  UR                  < SU< S3S-   5        g )Nz would link to rs  rt  ru  rw  s      rE   r   $LinkOutsideDestinationError.__init__  s6    
GLL+?4("E=> 	?rG   ry  rg  ri  s   @rE   r   r     rz  rG   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i  c                 j   > Xl         X l        [        TU ]  SUR                  < S3SU< S3-   5        g )Nzlink z would be extracted as a zcopy of z, which was rejectedru  rw  s      rE   r   LinkFallbackError.__init__  s?    
5 00IJ%dX-ABC 	DrG   ry  rg  ri  s   @rE   r   r     s    D DrG   r   c                    0 nU R                   n[        R                  R                  U[        R                  R                  S9nUR                  S[        R                  45      (       a0  U R                  R                  S[        R                  -   5      =oCS'   [        R                  R                  U5      (       a  [        U 5      e[        R                  R                  [        R                  R                  X5      [        R                  R                  S9n[        R                  R                  XQ/5      U:w  a  [        X5      eU R                  nUb  US-  nU(       aw  U R                  5       (       d  U R                  5       (       a  US-  (       d  US-  nUS-  nO8U R!                  5       (       d  U R#                  5       (       a  S nO[%        U 5      eX`R                  :w  a  XcS'   U(       Ga  U R&                  b  S US	'   U R(                  b  S US
'   U R*                  b  S US'   U R,                  b  S US'   U R                  5       (       d  U R#                  5       (       Gab  [        R                  R                  U R.                  5      (       a  [1        U 5      e[        R                  R3                  U R.                  5      nXpR.                  :w  a  XsS'   U R#                  5       (       aI  [        R                  R                  U[        R                  R5                  U5      U R.                  5      nO*[        R                  R                  UU R.                  5      n[        R                  R                  U[        R                  R                  S9n[        R                  R                  XQ/5      U:w  a  [7        X5      eU$ )N)rT   /r   i  @   i  r   r4   r5   r6   r7   linkname)r   r   r0   realpathALLOW_MISSINGr'  seplstripisabsr   r  
commonpathr   r   isregislnkisdirissymr   r4   r5   r6   r7   r  r   normpathdirnamer   )member	dest_pathfor_data	new_attrsr   target_pathr   
normalizeds           rE   _get_filtered_attrsr    s   I;;D  2773H3H II RVV}%%#);;#5#5cBFFl#CC 	ww}}T  ''''""277<<	#@*,''*?*? # AK	ww;23y@%f::;;De|||~~e|FND6<<>> 'v..;; $f::!#Ie::!#Ie<<#!%Ig<<#!%Ig<<>>V\\^^ww}}V__--'//))&//:J__,(2*%||~~ ggll9+-77??4+@+1??< !ggll9+1??<''**;24''2G2G + IKww!!;":;yH1&FFrG   c                     U $ r   r   )r  r  s     rE   r   r   F  s    MrG   c                 X    [        XS5      nU(       a  U R                  " S0 UDSS0D6$ U $ )NFdeepr   r  r   r  r  r  s      rE   r   r   I  s-    #Fu=I~~6	666MrG   c                 X    [        XS5      nU(       a  U R                  " S0 UDSS0D6$ U $ )NTr  Fr   r  r  s      rE   r   r   O  s-    #Ft<I~~6	666MrG   )fully_trustedr   rS  s   ([0-9]{1,20}) c                      \ rS rSr\" SW0 SS_SS_SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S%_S'S%_6rSXS( jr\S) 5       r\R                  S* 5       r\S+ 5       r
\
R                  S, 5       r
\S- 5       r\R                  S. 5       rS/ r\\\\\\\\S0\S1.
S2 jrS3 r\\S44S5 jrS6 rS7 rS8 r\S9 5       rS: r\S; 5       r\S< 5       r\S= 5       r\S> 5       r\S? 5       r\S@ 5       rSA r SB r!SC r"SD r#SE r$SF r%SG r&SH r'SI r(SJ r)SK r*SL r+SM r,SN r-SO r.SP r/SQ r0SR r1SS r2ST r3SU r4SVr5g%)Yr   ie  r   zName of the archive member.r   zPermission bits.r4   z6User ID of the user who originally stored this member.r5   z7Group ID of the user who originally stored this member.r2   zSize in bytes.r3   zTime of last modification.chksumzHeader checksum.typezFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.r  zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.r6   z
User name.r7   zGroup name.devmajorzDevice major number.devminorzDevice minor number.r.  zThe tar header starts here.r`  zThe file's data starts here.pax_headerszMA dictionary containing key-value pairs of an associated pax extended header.ra  zSparse member information._tarfileN_sparse_structs_link_targetc                     Xl         SU l        SU l        SU l        SU l        SU l        SU l        [        U l        SU l	        SU l
        SU l        SU l        SU l        SU l        SU l        S U l        0 U l        g )Ni  r   r   )r   r   r4   r5   r2   r3   r  REGTYPEr  r  r6   r7   r  r  r.  r`  ra  r  r   r   s     rE   r   TarInfo.__init__  s{     			
	

rG   c                 L    SS K nUR                  S[        SS9  U R                  $ Nr   zhThe undocumented "tarfile" attribute of TarInfo objects is deprecated and will be removed in Python 3.16r/   
stacklevelwarningswarnDeprecationWarningr  )r   r  s     rE   rc  TarInfo.tarfile  s-    A1 	 	. }}rG   c                 B    SS K nUR                  S[        SS9  Xl        g r  r  )r   rc  r  s      rE   rc  r    s(    A1 	 	.  rG   c                     U R                   $ r   r   r   s    rE   r0   TarInfo.path  s     yyrG   c                     Xl         g r   r  r  s     rE   r0   r    s    	rG   c                     U R                   $ r   r  r   s    rE   r1   TarInfo.linkpath  rH  rG   c                     Xl         g r   r  )r   r  s     rE   r1   r    s     rG   c                 `    SU R                   R                  U R                  [        U 5      4-  $ )Nz<%s %r at %#x>)re  r   r   idr   s    rE   __repr__TarInfo.__repr__  s&    4>>#:#:499RX"NNNrG   T)
r   r3   r   r  r4   r5   r6   r7   r  _KEEPc       
            U	(       a  [         R                  " U 5      nO[         R                   " U 5      nXLa  Xl        X*La  X+l        X:La  X;l        XJLa  XKl        XZLa  X[l        XjLa  Xkl        XzLa  X{l        XLa  Xl	        U$ r   )
copydeepcopyr   r3   r   r  r4   r5   r6   r7   )r   r   r3   r   r  r4   r5   r6   r7   r  r  results               rE   r   TarInfo.replace  s     ]]4(FYYt_FK LK &OJJ L LrG   c                    U R                   c  S nOU R                   S-  nU R                  UU R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S.nUS   [        :X  a&  US   R                  S5      (       d  US==   S-  ss'   U$ )N  )r   r   r4   r5   r2   r3   r  r  r  r6   r7   r  r  r  r   r  )r   r   r4   r5   r2   r3   r  r  r  r6   r7   r  r  DIRTYPEr   )r   r   infos      rE   get_infoTarInfo.get_info  s     99D99v%D				

		




  <7"4<+@+@+E+ELCLrG   surrogateescapec                 2   U R                  5       nUR                  5        H  u  pVUb  M
  [        SU-  5      e   U[        :X  a  U R	                  XBU5      $ U[
        :X  a  U R                  XBU5      $ U[        :X  a  U R                  XB5      $ [        S5      e)Nz%s may not be Nonezinvalid format)	r  itemsr=   r   create_ustar_headerr   create_gnu_headerr   create_pax_header)r   rc   rC   rD   r  r   values          rE   tobufTarInfo.tobuf  s     }}::<KD} !5!<== ( \!++DFCCz!))$&AAz!))$99-..rG   c                 (   [         US'   [        US   R                  X#5      5      [        :  a  [	        S5      e[        US   R                  X#5      5      [
        :  a  U R                  US   X#5      u  US'   US'   U R                  U[        X#5      $ )Nmagicr  zlinkname is too longr   prefix)	POSIX_MAGICr?   r>   LENGTH_LINKr=   LENGTH_NAME_posix_split_name_create_headerr   )r   r  rC   rD   s       rE   r  TarInfo.create_ustar_header  s     $WtJ&&x89KG344tF|""845C+/+A+A$v,PX+a(DNDL""4xHHrG   c                 N   [         US'   Sn[        US   R                  X#5      5      [        :  a  X@R	                  US   [
        X#5      -  n[        US   R                  X#5      5      [        :  a  X@R	                  US   [        X#5      -  nX@R                  U[        X#5      -   $ )Nr  rG   r  r   )
	GNU_MAGICr?   r>   r  _create_gnu_long_headerGNUTYPE_LONGLINKr  GNUTYPE_LONGNAMEr  r   )r   r  rC   rD   rl   s        rE   r  TarInfo.create_gnu_header  s     "WtJ&&x89KG//Z0@BRT\eeCtF|""845C//V>NPXaaC((z8LLLrG   c                    [         US'   U R                  R                  5       nSS[        4SS[        4SS4 H;  u  pEnXS;   a  M   X   R                  SS	5        [        X   5      U:  d  M5  X   X5'   M=     S
 Hu  u  pGSnX   n	[        U	[        5      n
U
(       a  [        U	5      OU	nSUs=::  a  SUS-
  -  :  d	  O  SX'   SnOU
(       a  XU'   SnU(       d  Ma  XC;  d  Mh  [        U	5      X4'   Mw     U(       a  U R                  U[        U5      nOSnXR                  U[        SS5      -   $ ! [         a    X   X5'    GM	  f = f)Nr  r   r0   r  r1   )r6   r6       )r7   r7   r  rS   rT   ))r4   rQ   )r5   rQ   )r2      )r3   r  Fr   rQ   r.   TrG   r   )r  r  r  r  r  r>   UnicodeEncodeErrorr?   
isinstancefloatroundstr_create_pax_generic_headerXHDTYPEr  r   )r   r  rC   r  r   hnamerB   rb   	needs_paxvalval_is_floatval_intrl   s                rE   r  TarInfo.create_pax_header+  sb   
 $W&&++-
 -
J/T&(>$@D #
!!'84
 4:'%)Z"!$@( RLDI*C%c51L$0eCjcG3!
"33
 	 %T
 	 yT4$'H!% R* 11+wQCC((|WiPPPG & %)Z"s   D--EEc                 0    U R                  U[        S5      $ )Nr;   )r  XGLTYPE)clsr  s     rE   create_pax_global_header TarInfo.create_pax_global_headere  s     --k7GLLrG   c                 T   UR                  S5      n[        S[        U5      5       Ht  nSR                  US U 5      nSR                  XES  5      n[        UR	                  X#5      5      [
        ::  d  MN  [        UR	                  X#5      5      [        ::  d  Mr    Xa4$    [        S5      e)Nr  r.   zname is too long)splitrW   r?   r  r>   LENGTH_PREFIXr  r=   )r   r   rC   rD   
componentsr\   r  s          rE   r  TarInfo._posix_split_namek  s     ZZ_
q#j/*AXXj!n-F88JrN+D6==23}DH56+E | + /00rG   c                 j   U R                  S5      [        [        4;   nU(       a;  [        U R                  SS5      SU5      n[        U R                  SS5      SU5      nO[	        SSX#5      n[	        SSX#5      nU R                  S[
        5      nUc  [        S5      e[	        U R                  SS5      S	X#5      [        U R                  S
S5      S-  SU5      [        U R                  SS5      SU5      [        U R                  SS5      SU5      [        U R                  SS5      SU5      [        U R                  SS5      SU5      SU[	        U R                  SS5      S	X#5      U R                  S[        5      [	        U R                  SS5      SX#5      [	        U R                  SS5      SX#5      UU[	        U R                  SS5      SX#5      /n[        R                  " S[        -  SR                  U5      5      n	[        U	[        * S  5      S   n
U	S S [        SU
-  S5      -   U	SS  -   n	U	$ )Nr  r  r   rQ   r  r   zTarInfo.type must not be Noner   r   r   r  r4   r5   r2   r  r3   s           r  r  r6   r  r7   r  r   z%dsrG   iz%06o rS   i)getCHRTYPEBLKTYPEre   rF   r  r=   r  rj   r   r   r  ro   r_   )r  rc   rC   rD   has_device_fieldsr  r  filetypepartsrl   r  s              rE   r  TarInfo._create_header{  s   
 !HHV,'0BB488J2Av>H488J2Av>H2q(3H2q(3H 88FG,<== $c8<#f,a8"Av."Av.#R0!$b&1R(#x@HHWk*"%r8<"%r8<2&X>
$ kk%)+SXXe_=c9*+./2%4j5F!2G<<s45zI
rG   c                 n    [        [        U 5      [        5      u  pUS:  a  U [        U-
  [        -  -  n U $ )Nr   )rt   r?   r   r@   )payloadr{   r|   s      rE   _create_payloadTarInfo._create_payload  s7    
 #3w<;q=	I-44GrG   c                     UR                  X45      [        -   n0 nSUS'   X%S'   [        U5      US'   [        US'   U R	                  U[
        X45      U R                  U5      -   $ )Nz././@LongLinkr   r  r2   r  )r>   r@   r?   r  r  r   r  )r  r   r  rC   rD   r  s         rE   r  TarInfo._create_gnu_long_header  sn    
 {{8,s2&VV4yV!W !!$hG##D)* 	*rG   c                    SnUR                  5        H  u  pV UR                  SS5        M     SnU(       a  US-  nUR                  5        H  u  pVUR                  S5      nU(       a  UR                  US5      nOUR                  S5      n[        U5      [        U5      -   S-   nS	=p U[        [	        U
5      5      -   n	X:X  a  OU	n
M!  U[        [	        U
5      S
5      S-   U-   S-   U-   S-   -  nM     0 nSUS'   X+S'   [        U5      US'   [        US'   U R                  U[        S
S5      U R                  U5      -   $ ! [         a    Sn   GM&  f = f)NFr;   rT   TrG   s   21 hdrcharset=BINARY
r  r%  r   rS          =   
z././@PaxHeaderr   r  r2   r  r   )
r  r>   r  r?   r  r_   r  r  r   r  )r  r  r  rC   binarykeywordr  recordslr[   rL   r  s               rE   r  "TarInfo._create_pax_generic_header  sw    )//1NGWh/ 2 00G)//1NGnnW-G X/@AW-Gs5z)A-AIACFO6	 
 uSVW-4w>EMPUUUG! 2( 'VV7|V#W !!$gyI##G,- 	-I & s   EEEc                    [        U5      S:X  a  [        S5      e[        U5      [        :w  a  [        S5      eUR	                  [
        5      [        :X  a  [        S5      e[        USS 5      nU[        U5      ;  a  [        S5      eU " 5       n[        USS X#5      Ul        [        USS	 5      Ul        [        US	S
 5      Ul        [        US
S 5      Ul        [        USS 5      Ul        [        USS 5      Ul        XEl        USS Ul        [        USS X#5      Ul        [        USS X#5      Ul        [        USS X#5      Ul        [        USS 5      Ul        [        USS 5      Ul        [        USS X#5      nUR$                  [0        :X  a+  UR                  R3                  S5      (       a  [4        Ul        UR$                  [6        :X  av  Sn/ n[9        S5       H>  n	 [        XUS-    5      n
[        XS-   US-    5      nUR=                  X45        US-  nM@     [?        US   5      n[        USS 5      nXU4Ul         URC                  5       (       a   UR                  RE                  S5      Ul        U(       a+  UR$                  [F        ;  a  US-   UR                  -   Ul        U$ ! [:         a       M  f = f)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  r     i  i  i  )$r?   r   r   r   countr@   r   r]   ro   rZ   rM   r   r   r4   r5   r2   r3   r  r  r  r6   r7   r  r  AREGTYPEr   r  GNUTYPE_SPARSErW   r=   r  boolr  r  rstrip	GNU_TYPES)r  rl   rC   rD   r  objr  r   structsr\   r.  numbytes
isextendedorigsizes                 rE   frombufTarInfo.frombuf  s    s8q=">22s8y &'9::99S>Y& !566SS\"c**$^44es1Sz84s3s|$c#cl#c#cl#s3s|$C%	
s3<3s3<:Ch7	Ch7	3s3<(3s3<(SS\84 88xCHH$5$5c$:$:CH
 88~%CG1X r!23F"3Rxb#9:H 12r	  c#hJ3s3<(H#*"AC 99;;xxs+CH chhi/|chh.CH
 " s   *#J66
KKc                     UR                   R                  [        5      nU R                  X!R                  UR
                  5      nUR                   R                  5       [        -
  Ul        UR                  U5      $ r   )	r   ru   r   r2  rC   rD   r  r.  _proc_member)r  rc  rl   r-  s       rE   fromtarfileTarInfo.fromtarfile2  s\    
 oo""9-kk#//@__))+i7
((rG   c                 $   U R                   [        [        4;   a  U R                  U5      $ U R                   [        :X  a  U R                  U5      $ U R                   [        [        [        4;   a  U R                  U5      $ U R                  U5      $ r   )r  r  r  _proc_gnulongr)  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   rc  s     rE   r5  TarInfo._proc_memberG  sx     99)+;<<%%g..YY.($$W--YY7G_==>>'**%%g..rG   c                    UR                   R                  5       U l        U R                  nU R                  5       (       d  U R                  [
        ;  a  X R                  U R                  5      -  nX!l        U R                  UR                  UR                  UR                  5        U R                  5       (       a   U R                  R                  S5      U l        U $ Nr  )r   r  r`  r  r  SUPPORTED_TYPES_blockr2   r.  _apply_pax_infor  rC   rD   r  r   r+  )r   rc  r.  s      rE   r=  TarInfo._proc_builtinT  s     #??//1!!::<<499O;kk$)),,F 	W00'2B2BGNNS ::<<		((-DIrG   c                 R   UR                   R                  U R                  U R                  5      5      n U R	                  U5      nU R                  Ul        U R                  [        :X  a&  [        X!R                  UR                  5      Ul        O9U R                  [        :X  a%  [        X!R                  UR                  5      Ul        UR#                  5       (       a   UR                  R%                  S5      Ul        U$ ! [
         a  n[        [        U5      5      S eS nAff = fr@  )r   ru   rB  r2   r6  r   r   r  r.  r  r  rM   rC   rD   r   r  r  r  removesuffix)r   rc  rl   nextr  s        rE   r9  TarInfo._proc_gnulongj  s     oo""4;;tyy#9:	:##G,D kk99((C!1!17>>BDIYY**%5%5w~~FDM ::<<		..s3DI!  	:'A/T9	:s   D 
D&D!!D&c                 0   U R                   u  p#nU ? U(       a  UR                  R                  [        5      nSn[	        S5       HL  n [        XVUS-    5      n[        XVS-   US-    5      n	U(       a  U	(       a  UR                  X45        US-  nMN     [        US   5      nU(       a  M  X l	        UR                  R                  5       U l        U R                  U R                  U R                  5      -   Ul        X@l        U $ ! [         a       M  f = f)Nr      r  r&  i  )r  r   ru   r   rW   r]   r=   r  r*  ra  r  r`  rB  r2   r.  )
r   rc  r.  r0  r1  rl   r   r\   r.  r/  s
             rE   r:  TarInfo._proc_sparse  s    )-(<(<%X  //&&y1CC2Y r!23F"3Rxb#9:H hNNF#56r	  c#hJ j "??//1))DKK		,BB	 " s   	#D
DDc                 H   UR                   R                  U R                  U R                  5      5      nU R                  [
        :X  a  UR                  nOUR                  R                  5       nSnS n/ n[        U5      U:  Ga(  X$   S:w  Ga  [        R                  X$5      =n(       d  [        S5      e [        UR                  S5      5      nUS:  a  [        S5      eXH-   [        U5      :  a  [        S5      eUR                  S5      U-   S-
  n	X'R!                  S5      S-   U	 n
U
R#                  S5      u  pnU(       a  US:w  d  X)   S:w  a  [        S5      eUR%                  XU45        US:X  a  Uc  US:X  a  UR&                  nOS	nXH-  n[        U5      U:  a  X$   S:w  a  GM  Uc  S	nU Hx  u  pnU R)                  US	S	UR*                  5      nU[,        ;   a(  U R)                  XUR&                  UR*                  5      nOU R)                  US	S	UR*                  5      nXU'   Mz      U R/                  U5      nS
U;   a  U R7                  UU5        OUSU;   a  U R9                  UU5        O<UR;                  S5      S:X  a'  UR;                  S5      S:X  a  U R=                  UX15        U R                  [>        [@        4;   a  URC                  X1R&                  UR*                  5        U RD                  Ul"        SU;   aZ  URF                  nURI                  5       (       d  UR                  [J        ;  a  UUR                  UR                  5      -  nUUl"        U$ ! [         a    [        S5      ef = f! [0         a  n[3        [5        U5      5      S eS nAff = f)Nr   rV   r.      r  r&  s
   hdrcharsets   BINARYr;   GNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrU   r2   )&r   ru   rB  r2   r  r  r  r  r?   _header_length_prefix_rematchrZ   rX   groupr=   rT  r   	partitionr  rC   _decode_pax_fieldrD   PAX_NAME_FIELDSr6  r   r   r  _proc_gnusparse_01_proc_gnusparse_00r  _proc_gnusparse_10r  r;  rC  r.  r`  r  rA  )r   rc  rl   r  r   rC   raw_headersrR  rB   header_value_end_offsetkeyword_and_valueraw_keywordequals	raw_valuer  r  rG  r  r.  s                      rE   r<  TarInfo._proc_pax  so   
 oo""4;;tyy#9:
 99!--K!--224K #hnT!15;;CEEEE()9::;U[[^,
 z()9::|c#h&()9::&+kk!nv&=&A# #IIaL1$45L M->-H-H-N*K &D.C4PTX4X()9::Y?@ m+0@	)&//H&HMCM #hnT!1R H /:*F ,,['7NN$G/)..yGDTDT( ..y'7( $) # /:(	:##G,D
 {*##D+6+-##D+6__/0C7KOOL^<_cf<f##D+?99/22  .>.>O++DK$ ))::<<499O#Cdkk$))44F!'y  ;()9::;|  	:'A/T9	:s$   7M$ 2M= $M:=
N!NN!c                 ~   / n/ nU Hh  u  pVnUS:X  a+   UR                  [        UR                  5       5      5        M7  US:X  d  M?   UR                  [        UR                  5       5      5        Mj     [        [        X45      5      Ul        g ! [         a    [	        S5      ef = f! [         a    [	        S5      ef = f)Ns   GNU.sparse.offsetrV   s   GNU.sparse.numbytes)r  rX   rK   r=   rZ   listzipra  )r   rG  rZ  offsetsr/  _r  r  s           rE   rX  TarInfo._proc_gnusparse_00  s     !,A..?NN3u||~#67 22?OOC$78 "- 3w12 " ?,-=>>? " ?,-=>>?s   (B(B&B#&B<c           	          US   R                  S5       Vs/ s H  n[        U5      PM     nn[        [        US S S2   USS S2   5      5      Ul        g s  snf )NrN  ,r/   r.   )r  rX   rb  rc  ra  )r   rG  r  xra  s        rE   rW  TarInfo._proc_gnusparse_01.  sZ     #..>"?"E"Ec"JK"JQ#a&"JK3vcc{F14a4L9: Ls   Ac           	         S n/ nUR                   R                  [        5      nUR                  SS5      u  pF[	        U5      n[        U5      US-  :  ai  SU;  a!  XcR                   R                  [        5      -  nUR                  SS5      u  pvUR                  [	        U5      5        [        U5      US-  :  a  Mi  UR                   R                  5       Ul        [        [        US S S2   USS S2   5      5      Ul        g )Nr  r.   r/   )r   ru   r   r  rX   r?   r  r  r`  rb  rc  ra  )r   rG  r  rc  fieldsra  rl   numbers           rE   rY  TarInfo._proc_gnusparse_104  s     oo""9-iiq)V&kFQJ&C++I66))E1-KFMM#f+&	 &kFQJ&
 #??//13vcc{F14a4L9:rG   c                    UR                  5        H  u  pEUS:X  a  [        U SU5        M  US:X  a  [        U S[        U5      5        M8  US:X  a  [        U S[        U5      5        MV  U[        ;   d  Mb  U[        ;   a   [        U   " U5      nUS:X  a  UR                  S5      n[        XU5        M     UR                  5       U l        g ! [
         a    Sn NKf = f)NzGNU.sparse.namer0   rO  r2   zGNU.sparse.realsizer   r  )	r  setattrrX   
PAX_FIELDSPAX_NUMBER_FIELDSr=   r+  r  r  )r   r  rC   rD   r  r  s         rE   rC  TarInfo._apply_pax_infoD  s     *//1NG++fe,--fc%j111fc%j1J&//" 1' :5 A f$!LL-Eu- 2" '++- & " !"s   >C

CCc                 j     UR                  US5      $ ! [         a    UR                  X45      s $ f = f)NrT   )rK   UnicodeDecodeError)r   r  rC   fallback_encodingfallback_errorss        rE   rU  TarInfo._decode_pax_field[  s:    	D<<(33! 	D<< 1CC	Ds    22c                 r    US:  a  [        S5      e[        U[        5      u  p#U(       a  US-  nU[        -  $ )Nr   zinvalid offsetr.   )rZ   rt   r   )r   r'  r{   r|   s       rE   rB  TarInfo._blockc  s=    
 19$%566"5)4aKF	!!rG   c                 (    U R                   [        ;   $ r   )r  REGULAR_TYPESr   s    rE   r  TarInfo.isrego  s    yyM))rG   c                 "    U R                  5       $ r   )r  r   s    rE   isfileTarInfo.isfiles  s    zz|rG   c                 (    U R                   [        :H  $ r   )r  r  r   s    rE   r  TarInfo.isdirw      yyG##rG   c                 (    U R                   [        :H  $ r   )r  SYMTYPEr   s    rE   r  TarInfo.issym{  r  rG   c                 (    U R                   [        :H  $ r   )r  LNKTYPEr   s    rE   r  TarInfo.islnk  r  rG   c                 (    U R                   [        :H  $ r   )r  r	  r   s    rE   ischrTarInfo.ischr  r  rG   c                 (    U R                   [        :H  $ r   )r  r
  r   s    rE   isblkTarInfo.isblk  r  rG   c                 (    U R                   [        :H  $ r   )r  FIFOTYPEr   s    rE   isfifoTarInfo.isfifo  s    yyH$$rG   c                     U R                   S L$ r   )ra  r   s    rE   issparseTarInfo.issparse  s    {{$&&rG   c                 >    U R                   [        [        [        4;   $ r   )r  r	  r
  r  r   s    rE   isdevTarInfo.isdev  s    yyWgx888rG   )r  r  r  r  r5   r7   r  r   r3   r   r.  r`  r  r2   ra  r  r4   r6   r   )r   )6r   r   r   r   dict	__slots__r   r\  rc  setterr0   r1   r  r  r   r  r   r   r  r  r  r  classmethodr   r  staticmethodr  r  r  r  r2  r6  r5  r=  r9  r:  r<  rX  rW  rY  rC  rU  rB  r  r  r  r  r  r  r  r  r  r  r   r   rG   rE   r   r   e  s     
,
!
 G
 H	

  
 -
 $
>
F
 
 
 *
  *!
" /#
$ 5%
&9'
* .+
, -
. /
0 1
I60   ^^      
[[    __! !O %eeuE88 *HEV /"IM8Qt M M
  ' 'R   * *  0- 0-d < <| ) )(/,68wr3(;; ..D
"*$$$$$%'9rG   r   c                      \ rS rSrSrSrSrSr\r	\
rSr\r\rSr    S<S jr\SSS\4S j5       r\S=S	 j5       r\S>S
 j5       r\S>S j5       r\S?S j5       rSSSSS.rS rS rS rS rS@S jrSASS.S jjr SBSS.S jjr!SCS jr"S r#SDSSS.S jjr$S r%SESSS.S  jjr&S! r' SCS" jr(S# r)S$ r*S% r+  SFSSS&.S' jjr,S( r-S) r.S* r/S+ r0S, r1S- r2S. r3S/ r4S0 r5S1 r6S2 r7SGS3 jr8S4 r9SCS5 jr:S6 r;S7 r<S8 r=S9 r>S: r?S;r@g)Hr   i  r   Fr.   Nr   c                 D   SSSSS.nX/;  a  [        S5      eX l        X   U l        U(       d_  U R                  S:X  a2  [        R                  R                  U5      (       d  SU l        SU l        [        XR                  5      nS	U l        OnUcB  [        US
5      (       a1  [        UR                  [        [        45      (       a  UR                  n[        US5      (       a  UR                  U l        SU l        U(       a  [        R                  R                  U5      OS U l
        X0l        Xl        Ub  X@l        Ub  XPl        Ub  X`l        Ub  Xpl        Ub  Xl        Xl        U
b  U R                   [,        :X  a  Xl        O0 U l        Ub  Xl        Ub  Xl        Xl        S	U l        / U l        S	U l        U R                  R=                  5       U l        0 U l          U R                  S:X  a  S U l!        U RE                  5       U l!        U R                  S:X  a_   U R                  RG                  U R>                  5         U R"                  RI                  U 5      nU R8                  RK                  U5        M^  U R                  S;   a  SU l        U R.                  (       am  U R"                  RS                  U R.                  RU                  5       5      nU R                  RW                  U5        U =R>                  [Y        U5      -  sl        g g g ! [L         a)    U R                  RG                  U R>                  5         M  [N         a  n[Q        [        U5      5      S eS nAff = f!   U R                  (       d  U R                  R[                  5         SU l        e = f)Nr9  zr+bwbxbr   ar   ri  !mode must be 'r', 'a', 'w' or 'x'r  r   Fr   r   Tr   r  r   ri  ).r=   r   _moder   r0   exists	bltn_openr   r   r  r   r  r_   abspathr   streamrc   rd  dereferenceignore_zerosrC   rD   r   r  debug
errorlevelcopybufsizer   members_loadedr  r.  inodesfirstmemberrG  r  r6  r  r   r   r   r   r  rv   r?   r   )r   r   r   r   rc   rd  r  r  rC   rD   r  r  r  r  r  modesr  rl   s                     rE   r   TarFile.__init__  s    T=@AA	[
yyCt(<(<	!
jj1G$D&!9!97<<#u66||w''$\\
#D-1BGGOOD)t	  K"L"*# ,$M"t{{j'@*!DJ!(O 'll'')	yyC#' #'99; yyC LL%%dkk2:"&,,":":4"@++G4	  yyO+###,,??@P@P@U@U@WXCLL&&s+KK3s8+K $ , * ))$++6& :'A/T9:	##""$DKs>    A"M* 6L 9BM* /M'M* 	M'M""M''M* *5Nc                   ^  U(       d  U(       d  [        S5      eUS;   az  U 4S jn/ n[        T R                  US9 H;  n[        T T R                  U   5      n	Ub  UR	                  5       n
 U	" USU40 UD6s  $    SR                  U5      n[        S	U 35      eS
U;   al  UR                  S
S5      u  pU=(       d    SnU=(       d    SnUT R                  ;   a  [        T T R                  U   5      n	O[        SU-  5      eU	" XU40 UD6$ SU;   ao  UR                  SS5      u  pU=(       d    SnU=(       d    SnUS;  a  [        S5      eUR                  SS5      n[        XXUU5      n T " XU40 UD6nSUl        U$ US;   a  T R                  " XU40 UD6$ [        S5      e! [
        [        4 a8  nUR                  SU SU< 35        Ub  UR                  W
5         S nAGM  S nAff = f!   UR                  5         e = f)Nznothing to open)r   r:*c                 (   > TR                   U    S:H  $ )Ntaropen)	OPEN_METH)r   r  s    rE   not_compressed$TarFile.open.<locals>.not_compressedN  s    }}X.);;rG   )keyr   z	- method z: 
z'file could not be opened successfully:
:r.   r   r   |r   zmode must be 'r' or 'w'r   	   Fr  zundiscernible mode)r=   sortedr  r   r  r   r	   r  r  r  r  popr   r   r   r  )r  r   r   r   rz   kwargsr  
error_msgsr   func	saved_posr  error_msgs_summaryfilemoder   r  r  s   `                rE   r   TarFile.open$  s%   J G.//<<J"3==nEsCMM($;<& 'Ic7=f== F "&:!6FGYFZ[\\D[!%C!3H3H(5H 3==(sCMM($;<&'Dx'OPP:6::D[!%C!3H3H(5Hz) !:;;"JJ:MTX*,F9&9 "AMH_$;;t7=f==-..W "#34 %%	(2aU&CD*Y/	Ds$   -
F'/
G2 'G/7,G**G/2Hc                 8    US;  a  [        S5      eU " XU40 UD6$ )Nr  r  )r=   )r  r   r   r   r  s        rE   r  TarFile.taropen  s+     ++@AA4w1&11rG   c                    US;  a  [        S5      e SSKJn   U" XS-   XC5      n U R                  " XU40 UD6nS	Ul	        U$ ! [         a    [	        S5      S ef = f! [
         a  nUb  US:X  a  [        S5      Uee S nAff = f! [
         a(  nUR                  5         US:X  a  [        S5      Uee S nAf  UR                  5         e = f)
Nr   r   ri  mode must be 'r', 'w' or 'x'r   )GzipFilezgzip module is not availabler}   r   r   F)
r=   gzipr  r   r	   r   r   r  r   r   )	r  r   r   r   r   r  r  r  r  s	            rE   gzopenTarFile.gzopen  s    
 &;<<	M%	tCZHG		D:6:A +  	M"#ABL	M
  	"ts{ 129	  	MMOs{ 129	MMOs9   A A B A
B(A>>B
C	#B33C	c                 Z   US;  a  [        S5      e SSKJn  U" U=(       d    UX$S9n U R
                  " XU40 UD6nS	Ul
        U$ ! [         a    [	        S5      S ef = f! [        [        4 a(  nUR                  5         US:X  a  [        S5      Uee S nAf  UR                  5         e = f)
Nr  r  r   )BZ2Filer   )r   r   znot a bzip2 fileF)r=   r   r  r   r	   r  r   EOFErrorr   r   r   )	r  r   r   r   r   r  r  r  r  s	            rE   bz2openTarFile.bz2open  s    
 &;<<	L# '/T4M		D:6:A !  	L"#@AtK	L " 	MMOs{ 23:	MMOs"   A A! A!B*1#BB*c                 V   US;  a  [        S5      e SSKJnJn  U" U=(       d    UX$S9n U R                  " XU40 UD6nS	Ul
        U$ ! [         a    [        S5      S ef = f! U[        4 a(  n	UR                  5         US:X  a  [        S5      U	ee S n	A	f  UR                  5         e = f)
Nr  r  r   )LZMAFiler   r   )presetr   znot an lzma fileF)r=   r   r  r   r   r	   r  r  r   r   r   )
r  r   r   r   r  r  r  r   r  r  s
             rE   xzopenTarFile.xzopen  s    
 &;<<	M0 7?dD@		D:6:A !  	M"#ABL	M 8$ 	MMOs{ 23:	MMOs"   A	 A# 	A #B(/#BB(r  r  r  r  )r   r   r   r   c                 2   U R                   (       a  g SU l          U R                  S;   a  U R                  R                  [        [
        S-  -  5        U =R                  [
        S-  -  sl        [        U R                  [        5      u  pUS:  a)  U R                  R                  [        [        U-
  -  5        U R                  (       d  U R                  R                  5         g g ! U R                  (       d  U R                  R                  5         f f = f)NTr  r/   r   )r   r   r   rv   r@   r   r.  rt   
RECORDSIZEr   r   )r   r{   r|   s      rE   r   TarFile.close  s     ;;	%yyO+""3)a-#89	A. %+4;;
$C!q=LL&&sj9.D'EF##""$ $4##""$ $s   B C( (.Dc                 h    U R                  UR                  S5      5      nUc  [        SU-  5      eU$ )Nr  zfilename %r not found)
_getmemberr+  KeyError)r   r   rd  s      rE   	getmemberTarFile.getmember  s6     //$++c"23?2T9::rG   c                 |    U R                  5         U R                  (       d  U R                  5         U R                  $ r   )_checkr  _loadr  r   s    rE   
getmembersTarFile.getmembers  s'     	||JJL||rG   c                 `    U R                  5        Vs/ s H  oR                  PM     sn$ s  snf r   )r  r   )r   rd  s     rE   getnamesTarFile.getnames  s'     -1OO,=>,=,=>>>s   +c                    U R                  S5        Ub  UR                  nUc  Un[        R                  R	                  U5      u  pBUR                  [        R                  S5      nUR                  S5      nU R                  5       nXl	        Uc?  U R                  (       d  [        R                  " U5      nO;[        R                  " U5      nO$[        R                  " UR                  5       5      nSnUR                  n[        R                   " U5      (       a  UR"                  UR$                  4n	U R                  (       dG  UR&                  S:  a7  XR(                  ;   a(  X R(                  U	   :w  a  [*        n
U R(                  U	   nO[,        n
U	S   (       a  X R(                  U	'   O[        R.                  " U5      (       a  [0        n
O[        R2                  " U5      (       a  [4        n
O}[        R6                  " U5      (       a  [8        n
[        R:                  " U5      nOE[        R<                  " U5      (       a  [>        n
O#[        R@                  " U5      (       a  [B        n
Og X%l        Xl"        URF                  Ul$        URJ                  Ul&        U
[,        :X  a  URN                  Ul(        OSUl(        URR                  Ul*        Xl+        Xul,        [Z        (       a)   [Z        R\                  " URH                  5      S   Ul/        [b        (       a)   [b        Rd                  " URL                  5      S   Ul3        U
[>        [B        4;   at  [i        [        S5      (       a_  [i        [        S5      (       aJ  [        Rj                  " URl                  5      Ul7        [        Rp                  " URl                  5      Ul9        U$ ! [`         a     Nf = f! [`         a     Nf = f)Nawxr  r   r.   r   majorminor):r  r   r   r0   
splitdriver   r  r  rd  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_ISCHRr	  S_ISBLKr
  r   st_uidr4   st_gidr5   st_sizer2   st_mtimer3   r  r  pwdgetpwuidr6   r  grpgetgrgidr7   r   r  st_rdevr  r  r  )r   r   arcnamer   drvrd  statresr  stmdinoder  s              rE   
gettarinfoTarFile.gettarinfo   s    	E <<D
 ?Gww))'2//"&&#...% ,,. ?##((4.''$-hhw~~/0G<<^^W^^4E##(8(81(<[[(WE8J-J ;;u- 8)0KK&\\$D]]4  D\\$D{{4(H\\$D\\$D nnnn7?"??GLGL((#3 #W[[ 9! < 3 #W[[ 9! < GW%%r7##G(<(<#%88GOO#< #%88GOO#<   
  s$   '(O	 (O 	
OO
O&%O&)r  c                8   [         [        R                  [        [        R                  [
        [        R                  [        [        R                  [        [        R                  [        [        R                  0nU R                  5         Uc  U nU GH  nU(       Ga^  UR                  c  [        S5        OGUR!                  UR"                  S5      n[        [        R$                  " XTR                  -  5      5        [        UR&                  =(       d    UR(                  < SUR*                  =(       d    UR,                  < 35        UR/                  5       (       d  UR1                  5       (       a(  [        SSUR2                  UR4                  4-  -  5        O[        SUR6                  -  5        UR8                  c  [        S5        O/[        S[:        R<                  " UR8                  5      S S	 -  5        [        UR>                  URA                  5       (       a  SOS
-   5        U(       aZ  URC                  5       (       a  [        SURD                  -   5        URG                  5       (       a  [        SURD                  -   5        [I        5         GM     g )Nz
??????????r   r  z%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02dr  r   z-> zlink to )%r  r  S_IFREGr  S_IFLNKr  S_IFIFOr	  S_IFCHRr  S_IFDIRr
  S_IFBLKr  r   r   r  r  r  r6   r4   r7   r5   r  r  r  r  r2   r3   r   	localtimer   r  r  r  r  r   )r   verboser  	type2moderd  modetypes         rE   rb  TarFile.list  s    dllGT\\t||WdlldllGT\\C	 	?GG<<'-(}}W\\1=Hh.E FGw}}'C'C'.}}'C'CE F==??gmmoo$(8(8':J:J'KK!M N   56==( 56 ="&.."?"C!D E w}}BGH==??(8(8 89==??
W-=-= =>G7 rG   filterc                   U R                  S5        Uc  UnU R                  bC  [        R                  R	                  U5      U R                  :X  a  U R                  SSU-  5        g U R                  SU5        U R                  X5      nUc  U R                  SSU-  5        g Ub!  U" U5      nUc  U R                  SSU-  5        g UR                  5       (       a'  [        US5       nU R                  XV5        S S S 5        g UR                  5       (       a  U R                  U5        U(       ar  [        [        R                  " U5      5       HN  nU R                  [        R                  R                  X5      [        R                  R                  X&5      X4S9  MP     g g U R                  U5        g ! , (       d  f       g = f)	Nr  r/   ztarfile: Skipped %rr.   ztarfile: Unsupported type %rtarfile: Excluded %rr9  r  )r  r   r   r0   r  _dbgr  r  r  addfiler  r  listdiraddr  )r   r   r  	recursiver   rd  fs          rE   r&  TarFile.add  sk    	E?G 99 RWW__T%:dii%GIIa.56		!T //$0?IIa7$>? WoG		!3d:; ==??4&!W( '& ]]__LL!

4 01AHHRWW\\$2BGGLL4L%  6 2  LL! '&s   (F55
Gc                    U R                  S5        Uc0  UR                  5       (       a  UR                  S:w  a  [        S5      e[        R                  " U5      nUR                  U R                  U R                  U R                  5      nU R                  R                  U5        U =R                  [        U5      -  sl        U R                  nUb  [        X R                  UR                  US9  [        UR                  [         5      u  pVUS:  a.  U R                  R                  ["        [         U-
  -  5        US-  nU =R                  U[         -  -  sl        U R$                  R'                  U5        g )Nr  r   z3fileobj not provided for non zero-size regular file)rz   r.   )r  r  r2   r=   r  r  rc   rC   rD   r   rv   r.  r?   r  rs   rt   r   r@   r  r  )r   rd  r   rl   rz   r{   r|   s          rE   r$  TarFile.addfile  s    	E?w}}7<<13DRSS))G$mmDKKD3s3x  w||WM &w||Y ?F1}""3)i*?#@A!KK6I--KG$rG   c                    UcP  U R                   nUc  SS KnUR                  S[        SS9  [        $ [        U[        5      (       a  [        S5      eU$ [        U5      (       a  U$  [        U   $ ! [         a    [        SU< S35      S ef = f)Nr   zPython 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata. Use the filter argument to control this behavior.r%  r  zrString 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  r   r  r  	TypeErrorcallable_NAMED_FILTERSr  r=   )r   r   r  s      rE   _get_filter_functionTarFile._get_filter_function  s    >++F~J '1	  6
 ,+&#&&67 7 MFM	G!&)) 	Gwvj
;<$F	Gs   'A0 0B)numeric_ownerr   c          	         / nU R                  U5      nUc  U nU Hg  nU R                  XvU5      u  pUc  M  UR                  5       (       a  UR                  U	5        U R	                  XUR                  5       (       + UUS9  Mi     UR                  S SS9  U H  n	  U" X5      nUc  U R                  U	S5        M$  [        R                  R                  XR                  5      n [        R                  " U5      n[        R                   " UR"                  5      (       d  U R                  US5        M  U R%                  XUS9  U R'                  X5        U R)                  X5        M     g ! [         a&  n
U R                  U	[        U
5      5         S n
A
M  S n
A
ff = f! [         a    U R                  US5         GM'  f = f! [*         a  nU R-                  U5         S nAGMM  S nAff = f)	N)	set_attrsr3  filter_functionc                     U R                   $ r   r  )r  s    rE   <lambda>$TarFile.extractall.<locals>.<lambda>8	  s    qvvrG   T)r  reversezexcluded by filtermissingznot a directory)r3  )r1  _get_extract_tarinfor  r  _extract_onesort_FILTER_ERRORS_log_no_directory_fixupreprr   r0   r  r   r  FileNotFoundErrorr  r  r  chownutimechmodr   _handle_nonfatal_error)r   r0   r  r3  r   directoriesr6  r  rd  
unfilteredexcdirpathr  r  s                 rE   
extractallTarFile.extractall	  s    33F;?GF"&";";#/G}} "":.g7==?7J,9.=  ?  	-t< &J/-j?G ?001EG'',,t\\:HHW-E ||EMM22 00:KL

7=
I

7,

7,5 & & 00T#YG ) 00)D   /++A../sl   E-&G=)G'F =7G62G-
F7FGFG G<G GG
G+G&&G+c                 N    U R                  SSUR                  < SU< S35        g )Nr/   z!tarfile: Not fixing up directory z ())r#  r   )r   r  reasons      rE   r@  TarFile._log_no_directory_fixupZ	  s    		!;;( 	)rG   c                z    U R                  U5      nU R                  XU5      u  pxUb  U R                  XrX45        g g r   )r1  r<  r=  )	r   r  r0   r5  r3  r   r6  rd  rH  s	            rE   extractTarFile.extract^	  sG     33F;"77T+gYF rG   c                    [        U[        5      (       a  U R                  U5      nOUnS n U" XC5      nUc   U R                  SSUR                  -  5        gUR                  5       (       aD  [        R                  " U5      n[        R                  R                  X5R                   5      Ul        XT4$ ! [        [        [
        4 a  nU R                  U5         S nANS nAf[         a  nU R                  U5         S nANS nAff = f)Nr/   r"  )NN)r  r  r  r   r  r   _handle_fatal_errorr   rF  r#  r   r  r  r   r0   r  r  r  )r   r  r6  r0   rH  filteredr  s          rE   r<  TarFile._get_extract_tarinfor	  s     fc""/JJ	+&z8H
 IIa/*//AB >>yy*H$&GGLL7H7H$IH!## +[9 	($$Q'' 	+''**	+s#   B4 4D	CD,DDc           	      @   U R                  S5         U R                  U[        R                  R	                  X!R
                  5      UUUUS9  g ! [        [        4 a  nU R                  U5         S nAg S nAf[         a  nU R                  U5         S nAg S nAff = f)Nr   )r5  r3  r6  extraction_root)r  _extract_memberr   r0   r  r   r   r  rU  r   rF  )r   rd  r0   r5  r3  r6  r  s          rE   r=  TarFile._extract_one	  s     	C		+  "'',,t\\*J+4/<1@15	 ! 7
 +, 	($$Q'' 	+''**	+s#   ;A BA55BBBc                 P    U R                   S:  a  e U R                  SSU-  5        g )Nr.   tarfile: %s)r  r#  r   r  s     rE   rF  TarFile._handle_nonfatal_error	  s$    ??QIIa*+rG   c                 b   U R                   S:  a  e [        U[        5      (       a\  UR                  c   U R	                  SSUR
                  -  5        g U R	                  SSUR
                  < SUR                  < 35        g U R	                  SS[        U5      R                  < SU< 35        g )Nr   r.   r]  z	tarfile: r   )r  r  r   filenamer#  strerrorr  r   r^  s     rE   rU  TarFile._handle_fatal_error	  sw    ??Q7##zz!		!]QZZ78		!QZZHIIIaT!W-=-=qABrG   c                    U R                  S5        [        U[        5      (       a  U R                  U5      nOUnUR	                  5       (       d  UR
                  [        ;  a  U R                  X5      $ UR                  5       (       d  UR                  5       (       aJ  [        U R                  [        5      (       a  [        S5      eU R                  U R                  U5      5      $ g )Nr   z'cannot extract (sym)link as file object)r  r  r  r  r  r  rA  
fileobjectr  r  r   r   r
   extractfile_find_link_target)r   r  rd  s      rE   rf  TarFile.extractfile	  s     	Cfc""nnV,GG==??gll/A??411]]__$,,00 ""KLL ''(>(>w(GHH rG   r6  rY  c                   UR                  S5      nUR                  S[        R                  5      n[        R                  R                  U5      nU(       a9  [        R                  R                  U5      (       d  [        R                  " USS9  UR                  5       (       d  UR                  5       (       a.  U R                  SUR                  < SUR                  < 35        OU R                  SUR                  5        UR                  5       (       a  U R                  X5        OUR                  5       (       a  U R!                  X5        OUR#                  5       (       a  U R%                  X5        OUR'                  5       (       d  UR)                  5       (       a  U R+                  X5        OsUR                  5       (       d  UR                  5       (       a  U R-                  XUUS9  O7UR.                  [0        ;  a  U R3                  X5        OU R                  X5        U(       aK  U R5                  XU5        UR                  5       (       d#  U R7                  X5        U R9                  X5        g g g )Nr  T)exist_okr.   z -> ri  )r+  r   r   r  r0   r  r  makedirsr  r  r#  r   r  r  makefiler  makedirr  makefifor  r  makedevmakelink_with_filterr  rA  makeunknownrC  rE  rD  )r   rd  
targetpathr5  r3  r6  rY  	upperdirss           rE   rZ  TarFile._extract_member	  s     &&s+
''RVV4
 GGOOJ/	RWW^^I66 KK	D1==??gmmooIIaw||W5E5EFGIIa&==??MM'.]]__LL-^^MM'.]]__LL-]]__%% / / & 1 \\0W1MM'.JJwM:==??

7/

7/ # rG   c                      UR                   c  [        R                  " U5        g [        R                  " US5        g ! [         a(    [        R                  R                  U5      (       d  e  g f = f)Ni  )r   r   mkdirFileExistsErrorr0   r  r   rd  rs  s      rE   rn  TarFile.makedir
  sW    
	||#$ U+ 	77==,, -	s   #> > /A0/A0c           	         U R                   nUR                  UR                  5        U R                  n[	        US5       nUR
                  bd  UR
                   H(  u  pgUR                  U5        [        X5U[        U5        M*     UR                  UR                  5        UR                  5         O[        X5UR                  [        U5        S S S 5        g ! , (       d  f       g = f)Nr  )
r   r  r`  r  r  ra  rs   r   r2   truncate)r   rd  rs  sourcerz   targetr.  r2   s           rE   rm  TarFile.makefile
  s     G''(""z4(F~~)$+NNLFKK'iI %3 GLL)!FGLL)WM )((s    BC
C%c                 d    U R                  X5        U R                  SSUR                  -  5        g )Nr.   z9tarfile: Unknown file type %r, extracted as regular file.)rm  r#  r  ry  s      rE   rr  TarFile.makeunknown.
  s1     	g*		! 24;LLA 	BrG   c                 p    [        [        S5      (       a  [        R                  " U5        g [        S5      e)Nmkfifozfifo not supported by system)r   r   r  r   ry  s      rE   ro  TarFile.makefifo6
  s)     2x  IIj!=>>rG   c                    [        [        S5      (       a  [        [        S5      (       d  [        S5      eUR                  nUc  SnUR	                  5       (       a  U[
        R                  -  nOU[
        R                  -  n[        R                  " X#[        R                  " UR                  UR                  5      5        g )Nmknodrp  z'special devices not supported by systemr  )r   r   r   r   r  r  r  r  r  rp  r  r  )r   rd  rs  r   s       rE   rp  TarFile.makedev>
  s     r7##72y+A+AHII||<D==??DLL DDLL D
G,,g.>.>?	ArG   c                 (    U R                  XS S 5      $ r   )rq  ry  s      rE   makelinkTarFile.makelinkP
  s    ((dDIIrG   c                    Sn UR                  5       (       a\  [        R                  R                  U5      (       a  [        R                  " U5        [        R
                  " UR                  U5        g [        R                  R                  UR                  5      (       a"  [        R                  " UR                  U5        g   U R                  U5      nUc  UnOUc  [        S5      e U" Xd5      nUb  U R#                  XrUUS9  g g ! [         a    Sn NSf = f! [         a    U(       a  [        S5      S ee f = f! [         a  n[        XR                   5      UeS nAff = f)NFTz%unable to resolve link inside archivez[makelink_with_filter: if filter_function is not None, extraction_root must also not be Noneri  )r  r   r0   lexistsunlinksymlinkr  r  r  linksymlink_exceptionrg  r  r   r?  r   r   rZ  )	r   rd  rs  r6  rY  keyerror_to_extracterrorrH  rV  causes	            rE   rq  TarFile.makelink_with_filterS
  s_    $) 	,}}77??:..IIj)

7++Z877>>'"6"677GGG00*= 8	//8J "!H&">? ?M*:G   1@1@ ! B  / ! 	,'+$	,
  	'";=BFG 	  " M'AuLMs=   A0D 5AD D -D? DDD<?
E$	EE$c                    [        [        S5      (       Ga  [        R                  " 5       S:X  Ga  UR                  nUR                  nU(       d   [
        (       a4  UR                  (       a#  [
        R                  " UR                  5      S   n [        (       a4  UR                  (       a#  [        R                  " UR                  5      S   nUc  SnUc  Sn UR                  5       (       a-  [        [        S5      (       a  [        R                  " X%U5        g [        R                  " X%U5        g g g ! [         a     Nf = f! [         a     Nf = f! [        [         4 a  n[#        S5      UeS nAff = f)Ngeteuidr   r/   rI   lchownzcould not change owner)r   r   r  r5   r4   r	  r7   getgrnamr  r  r6   getpwnamr  r  rC  r   OverflowErrorr   )r   rd  rs  r3  gur  s          rE   rC  TarFile.chown
  s%    2y!!bjjla&7AA sw}}LL7:sw}}LL7: yyD==??wr8'<'<IIjQ/HHZA./ '8!   
    ]+ D"#;<!CDsC   ?D7 ?E AE E 7
EE
EEE8'E33E8c                     UR                   c  g  [        R                  " X!R                   5        g ! [         a  n[	        S5      UeS nAff = f)Nzcould not change mode)r   r   rE  r   r   )r   rd  rs  r  s       rE   rE  TarFile.chmod
  sD     <<	?HHZ. 	?67Q>	?s    1 
AAAc                     UR                   nUc  g [        [        S5      (       d  g  [        R                  " X#U45        g ! [         a  n[        S5      UeS nAff = f)NrD  z"could not change modification time)r3   r   r   rD  r   r   )r   rd  rs  r3   r  s        rE   rD  TarFile.utime
  s[     =r7##	LHHZ0 	LCD!K	Ls   A 
AAAc                    U R                  S5        U R                  b  U R                  nS U l        U$ U R                  U R                  R	                  5       :w  ad  U R                  S:X  a  g U R                  R                  U R                  S-
  5        U R                  R                  S5      (       d  [        S5      eS n  U R                  R                  U 5      n Ub.  U R0                  (       d  U R2                  R5                  U5        U$ SU l        U$ ! [         a[  nU R                  (       a@  U R                  SSU R                  U4-  5        U =R                  [        -  sl         S nAM   S nANS nAf[         a  nU R                  (       aA  U R                  SSU R                  U4-  5        U =R                  [        -  sl         S nAGM  U R                  S:X  a  [        [        U5      5      S e S nAGN%S nAf[          a     U R                  S:X  a  [        S5      S e GNQ["         a0  nU R                  S:X  a  [        [        U5      5      S e S nAGNS nAf[$         a  n[        [        U5      5      S eS nAf[&         aE  n SS Kn[+        X4R,                  5      (       a  [        S	U 35      S eUe! [.         a    Uef = fS nAff = f)
Nrar   r.   rq   Tr/   z0x%X: %sz
empty filezzlib error: )r  r  r.  r   r  r  ru   r   rd  r6  r   r  r#  r   rZ   r  r   r   r   	Exceptionr   r  r   r   r  r  r  r  )r   mrd  r  r   s        rE   rG  TarFile.next
  s]   
 	D'  A#DH ;;$,,++--{{aLLdkkAo.<<$$Q'' 899 ,,2248< ;;##G,   DLM " $$IIat{{A.>!>?KK9,K % & 6$$IIat{{A.>!>?KK9,K[[A%#CF+5 &# <;;!##L1t; $' 6;;!##CF+5 $( 2A'T1 !!ZZ00',qc(:;E" Gsb   D 
K$AE::KAH%H)K0	K9%I$$K1JK/KKKKc                    U R                  5       nSnUb   UR                  U5      nUS U nU(       a  [        R                  R                  U5      n[        U5       Hn  nU(       a  UR                  UR                  :X  a  SnM(  U(       a*  [        R                  R                  UR                  5      nOUR                  nX:X  d  Ml  Us  $    U(       a  [        U5      eg ! [         a    Sn Nf = f)NFT)	r  indexr=   r   r0   r  reversedr.  r   )	r   r   rd  	normalizer  skippingr  r  member_names	            rE   r  TarFile._getmember  s    
 //# *g. "&5/77##D)Dw'F>>V]]2$H gg..v{{;$kk" ( W%% 1      s   C# #C21C2c                     U R                   (       d-  U R                  5       b   U R                  5       b  M  SU l        g g r<  )r  rG  r  r   s    rE   r  TarFile._load*  s4     {{))+) ))+)DL rG   c                     U R                   (       a"  [        SU R                  R                  -  5      eUb)  U R                  U;  a  [        SU R                  -  5      eg g )Nz%s is closedzbad operation for mode %r)r   r   re  r   r   )r   r   s     rE   r  TarFile._check3  sS     ;;.4>>+B+BBCC		 55		ABB !6rG   c                 0   UR                  5       (       aQ  SR                  [        S [        R                  R                  UR                  5      UR                  45      5      nS nOUR                  nUnU R                  X#SS9nUc  [        SU-  5      eU$ )Nr  T)rd  r  zlinkname %r not found)
r  r  r   r   r0   r  r   r  r  r  )r   rd  r  limitr  s        rE   rg  TarFile._find_link_target<  s     ==??xxtbggoogll.KWM]M]-^ _`HE ''HEDI>2X=>>rG   c              #   x  #    U R                   (       a  U R                   S h  vN   g SnU R                  b  U R                  5       nUS-  nUv    U[	        U R                  5      :  a  U R                  U   nO2U R                   (       d   U R                  5       nU(       d  SU l         g Og US-  nUv   Mf   N7f)Nr   r.   T)r  r  r  rG  r?   )r   r  rd  s      rE   __iter__TarFile.__iter__O  s      <<||##  'iikGQJEMs4<<((,,u-\\))+#'DL  QJEM  $s   !B:B8BB:c                 T    XR                   ::  a  [        U[        R                  S9  g g )Nfile)r  r   r   stderr)r   levelmsgs      rE   r#  TarFile._dbgn  s!     JJ#CJJ' rG   c                 &    U R                  5         U $ r   )r  r   s    rE   	__enter__TarFile.__enter__t  s    rG   c                     Uc  U R                  5         g U R                  (       d  U R                  R                  5         SU l        g r<  )r   r   r   r   )r   r  r  	tracebacks       rE   __exit__TarFile.__exit__x  s2    <JJL ##""$DKrG   )r   r  r  r   r  r  r  rC   r  rD   r   r  rc   r  r  r  r   r   r.  r  r  rd  )Nr   NNNNNNr  NNNNF)r   N)r   Nr  )r   NN)NNNTr<  r   ).N)r   T)TFr@  )Ar   r   r   r   r  r  r  r  r   rc   r   rC   rD   r   rd  r^  re  r-  r   r  r  r   r  r  r  r  r  r   r  r  r  r  rb  r&  r$  r1  rK  r@  rR  r<  r=  rF  rU  rf  rZ  rn  rm  rr  ro  rp  r  rq  rC  rE  rD  rG  r  r  r  rg  r  r#  r  r  r   r   rG   rE   r   r     s    EK L J FHFGJAEHL>B6;db #tZ ]/ ]/~ 2 2  @  6  : 	I%*	?aF)D )V1" 1"f%8G0C/%C/J)GG($> &*+(,
C@ >B&+10@D(,10pN B?A$J0Bd DD?L>F&&P C&>(rG   r   c                      [        U S5      (       a+  U R                  5       n[        U S9nU R                  U5        O[        U 5      nUR	                  5         g! [
         a     gf = f)Nru   )r   TF)r   r  r   r  r   r   )r   r   r  s      rE   r   r     s[    
4  ))+CT"AIIcNT
A		 s   AA 
A'&A'c            	         SS K n SnU R                  US9nUR                  SSSSSS	9  UR                  S
S[        SS9  UR	                  SS9nUR                  SSSSS9  UR                  SSSSSS9  UR                  SSSSSS9  UR                  SS SS!S9  UR                  5       nUR                  (       a  UR                  c  UR                  S"S#5        UR                  b  UR                  n[        U5      (       ax  [        US$5       nUR                  5         [        UR                  5       [        R                  S%9  S S S 5        UR                   (       a  [        S&R#                  U5      5        g g UR                  S"S'R#                  U5      5        g UR$                  bw  UR$                  n[        U5      (       a9  [&        R                  US(5       nUR%                  UR                   S)9  S S S 5        g UR                  S"S'R#                  U5      5        g UR                  Gb3  [)        UR                  5      S":X  a   UR                  S   n[*        R,                  nOH[)        UR                  5      S*:X  a  UR                  u  pXO UR                  S"UR/                  5       5        [        W5      (       a  [&        R                  US(5       nUR1                  WUR                  S+9  S S S 5        UR                   (       a5  WS,:X  a  S-R#                  U5      n	OS.R#                  XX5      n	[        U	5        g g UR                  S"S'R#                  U5      5        g UR2                  b  UR2                  R5                  S5      n
[*        R6                  R9                  U
5      u  pS/S/S0S0S1S1S1S1S2.nX;   a  S3X   -   OS4nUR2                  n[&        R                  X5       nU H  nUR;                  U5        M     S S S 5        UR                   (       a  [        S5R#                  U
5      5        g g g ! , (       d  f       GN= f! , (       d  f       g = f! , (       d  f       GNo= f! , (       d  f       Nq= f)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choicesr  T)requiredz-lz--list	<tarfile>zShow listing of a tarfile)r  r  z-ez	--extract+)r  z<output_dir>zExtract tarfile into target dir)nargsr  r  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
r   r  z{!r} is a tar archive.z{!r} is not a tar archive.
r  )r  r/   )r0   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:r   z{!r} file created.)argparseArgumentParseradd_argumentr0  add_mutually_exclusive_group
parse_argsr   rR  exittestr   r   r  r   r   r  r  rc   rb  r   r?   r   curdirformat_helprK  creater  r0   splitextr&  )r  r  parserrS  argsrw   r   tfr  r  tar_namere  extcompressionstar_mode	tar_files	file_names                    rE   mainr    s   GK$$$=F
k,-  /

N .4  6 ///>E	tX{7  9	t[<=  ? 
tZs39  ; 
tX{8  : D{{t||+A@Ayyiic??c33 cnn&SZZ8   ||.55c:;  KK9@@EF		iic??c5)R- *) KK9@@EF		!t||!,,q/CYYF!#,,KCKK6--/0c??c5)R6$++> *||S=3::3?C2396#3F c
  KK9@@EF		 ;;??1%!!(+ 
 03/B4,++KK	\\(-&	y! ' . <<&--h78 / 
!M   *) *)> .-s0   7P4QQ#Q)4
Q
Q
Q&)
Q7__main__r  )lversion
__author____credits__builtinsr   r  r   r   rJ  rr   r  r   rj   r  rer  r   r	  AttributeErrorNotImplementedErrorr   r  __all__r@   r   r  r  r  r  r  r  r  r(  r  r  r	  r
  r  r  CONTTYPEr  r  r)  r  r  r;  r   r   r   r   rA  r|  r,  rq  rV  r  rX   rr  r   r   getfilesystemencodingrF   rM   r]   re   ro   rs   r   r  r   r   r   r	   r
   r   r   r   r   rZ   r   r   r   objectr   r,  BufferedReaderr^  r   r   r   r   r   r   r   r?  r  r   r   r   r0  r  compilerQ  r   r   r   r  r   r   rG   rE   <module>r     s  @ 6
H
 ' 
 	 	      	 $%8'B ? 	^
	





  



 HgGXWg#%5!	# (>+ /	.
 9
   77d?H((*H0&( N <* "&$ 2	y 		8 		 		x 		( 		( 		{ 		; 		[ 		 		K 	 0r rj6 <i& iX"2$$ "	( 	J J
?k ?@{ @
L L
?+ ?D D w5BH * 	 ::&89 o9f o9dif i^'$ ||]9~ zF M^  
C  
Cs"   I I$ I! I!$I0/I0