/usr/lib/python3.10/__pycache__
NameSizeModeActions
abc.cpython-310.pyc67510644editdlrm
aifc.cpython-310.pyc246850644editdlrm
antigravity.cpython-310.pyc8220644editdlrm
argparse.cpython-310.pyc635390644editdlrm
ast.cpython-310.pyc557390644editdlrm
asynchat.cpython-310.pyc70250644editdlrm
asyncore.cpython-310.pyc160020644editdlrm
base64.cpython-310.pyc171620644editdlrm
bdb.cpython-310.pyc258320644editdlrm
binhex.cpython-310.pyc128700644editdlrm
bisect.cpython-310.pyc25880644editdlrm
bz2.cpython-310.pyc108700644editdlrm
calendar.cpython-310.pyc263030644editdlrm
cgi.cpython-310.pyc267230644editdlrm
cgitb.cpython-310.pyc99980644editdlrm
chunk.cpython-310.pyc48600644editdlrm
cmd.cpython-310.pyc127070644editdlrm
code.cpython-310.pyc99570644editdlrm
codecs.cpython-310.pyc332190644editdlrm
codeop.cpython-310.pyc55950644editdlrm
colorsys.cpython-310.pyc32650644editdlrm
compileall.cpython-310.pyc127330644editdlrm
configparser.cpython-310.pyc454580644editdlrm
contextlib.cpython-310.pyc208950644editdlrm
contextvars.cpython-310.pyc2460644editdlrm
copy.cpython-310.pyc69960644editdlrm
copyreg.cpython-310.pyc46830644editdlrm
cProfile.cpython-310.pyc51130644editdlrm
crypt.cpython-310.pyc35500644editdlrm
csv.cpython-310.pyc117980644editdlrm
dataclasses.cpython-310.pyc265780644editdlrm
datetime.cpython-310.pyc565330644editdlrm
decimal.cpython-310.pyc3620644editdlrm
difflib.cpython-310.pyc589050644editdlrm
dis.cpython-310.pyc156560644editdlrm
doctest.cpython-310.pyc761750644editdlrm
enum.cpython-310.pyc260630644editdlrm
filecmp.cpython-310.pyc87490644editdlrm
fileinput.cpython-310.pyc140720644editdlrm
fnmatch.cpython-310.pyc42440644editdlrm
fractions.cpython-310.pyc186000644editdlrm
ftplib.cpython-310.pyc290340644editdlrm
functools.cpython-310.pyc283350644editdlrm
genericpath.cpython-310.pyc39070644editdlrm
getopt.cpython-310.pyc63390644editdlrm
getpass.cpython-310.pyc42100644editdlrm
gettext.cpython-310.pyc182210644editdlrm
glob.cpython-310.pyc58520644editdlrm
graphlib.cpython-310.pyc76160644editdlrm
gzip.cpython-310.pyc185460644editdlrm
hashlib.cpython-310.pyc68450644editdlrm
heapq.cpython-310.pyc138650644editdlrm
hmac.cpython-310.pyc69730644editdlrm
imaplib.cpython-310.pyc423120644editdlrm
imghdr.cpython-310.pyc39050644editdlrm
imp.cpython-310.pyc97860644editdlrm
inspect.cpython-310.pyc851530644editdlrm
io.cpython-310.pyc36630644editdlrm
ipaddress.cpython-310.pyc626700644editdlrm
keyword.cpython-310.pyc9270644editdlrm
linecache.cpython-310.pyc41420644editdlrm
locale.cpython-310.pyc461540644editdlrm
lzma.cpython-310.pyc121000644editdlrm
mailbox.cpython-310.pyc600910644editdlrm
mailcap.cpython-310.pyc73200644editdlrm
mimetypes.cpython-310.pyc176190644editdlrm
modulefinder.cpython-310.pyc161660644editdlrm
netrc.cpython-310.pyc39330644editdlrm
nntplib.cpython-310.pyc316230644editdlrm
ntpath.cpython-310.pyc147040644editdlrm
nturl2path.cpython-310.pyc17470644editdlrm
numbers.cpython-310.pyc118660644editdlrm
opcode.cpython-310.pyc54470644editdlrm
operator.cpython-310.pyc135080644editdlrm
optparse.cpython-310.pyc477540644editdlrm
os.cpython-310.pyc315990644editdlrm
pathlib.cpython-310.pyc420520644editdlrm
pdb.cpython-310.pyc474400644editdlrm
pickle.cpython-310.pyc468820644editdlrm
pickletools.cpython-310.pyc677600644editdlrm
pipes.cpython-310.pyc77690644editdlrm
pkgutil.cpython-310.pyc183610644editdlrm
platform.cpython-310.pyc274290644editdlrm
plistlib.cpython-310.pyc237650644editdlrm
poplib.cpython-310.pyc135730644editdlrm
posixpath.cpython-310.pyc105600644editdlrm
pprint.cpython-310.pyc178750644editdlrm
profile.cpython-310.pyc143910644editdlrm
pstats.cpython-310.pyc236210644editdlrm
pty.cpython-310.pyc41430644editdlrm
pyclbr.cpython-310.pyc97750644editdlrm
pydoc.cpython-310.pyc856450644editdlrm
py_compile.cpython-310.pyc73390644editdlrm
queue.cpython-310.pyc107920644editdlrm
quopri.cpython-310.pyc57940644editdlrm
random.cpython-310.pyc227480644editdlrm
re.cpython-310.pyc142270644editdlrm
reprlib.cpython-310.pyc52500644editdlrm
rlcompleter.cpython-310.pyc59540644editdlrm
runpy.cpython-310.pyc94110644editdlrm
sched.cpython-310.pyc61150644editdlrm
secrets.cpython-310.pyc21750644editdlrm
selectors.cpython-310.pyc171050644editdlrm
shelve.cpython-310.pyc94920644editdlrm
shlex.cpython-310.pyc77820644editdlrm
shutil.cpython-310.pyc385360644editdlrm
signal.cpython-310.pyc29350644editdlrm
site.cpython-310.pyc179220644editdlrm
sitecustomize.cpython-310.pyc2250644editdlrm
smtpd.cpython-310.pyc261470644editdlrm
smtplib.cpython-310.pyc357660644editdlrm
sndhdr.cpython-310.pyc69620644editdlrm
socket.cpython-310.pyc289630644editdlrm
socketserver.cpython-310.pyc253470644editdlrm
sre_compile.cpython-310.pyc151940644editdlrm
sre_constants.cpython-310.pyc63570644editdlrm
sre_parse.cpython-310.pyc217550644editdlrm
ssl.cpython-310.pyc452710644editdlrm
stat.cpython-310.pyc42730644editdlrm
statistics.cpython-310.pyc370510644editdlrm
string.cpython-310.pyc71020644editdlrm
stringprep.cpython-310.pyc170750644editdlrm
struct.cpython-310.pyc3070644editdlrm
subprocess.cpython-310.pyc447410644editdlrm
sunau.cpython-310.pyc164820644editdlrm
symtable.cpython-310.pyc128350644editdlrm
sysconfig.cpython-310.pyc181510644editdlrm
tabnanny.cpython-310.pyc69500644editdlrm
tarfile.cpython-310.pyc715780644editdlrm
telnetlib.cpython-310.pyc185060644editdlrm
tempfile.cpython-310.pyc273390644editdlrm
textwrap.cpython-310.pyc138120644editdlrm
this.cpython-310.pyc12640644editdlrm
threading.cpython-310.pyc449690644editdlrm
timeit.cpython-310.pyc117690644editdlrm
token.cpython-310.pyc27380644editdlrm
tokenize.cpython-310.pyc171940644editdlrm
trace.cpython-310.pyc198700644editdlrm
traceback.cpython-310.pyc217120644editdlrm
tracemalloc.cpython-310.pyc175250644editdlrm
tty.cpython-310.pyc10790644editdlrm
turtle.cpython-310.pyc1288570644editdlrm
types.cpython-310.pyc95250644editdlrm
typing.cpython-310.pyc852770644editdlrm
uu.cpython-310.pyc38670644editdlrm
uuid.cpython-310.pyc224980644editdlrm
warnings.cpython-310.pyc136460644editdlrm
wave.cpython-310.pyc175940644editdlrm
weakref.cpython-310.pyc203430644editdlrm
webbrowser.cpython-310.pyc174630644editdlrm
xdrlib.cpython-310.pyc78800644editdlrm
zipapp.cpython-310.pyc60130644editdlrm
zipfile.cpython-310.pyc618450644editdlrm
zipimport.cpython-310.pyc170330644editdlrm
_aix_support.cpython-310.pyc28790644editdlrm
_bootsubprocess.cpython-310.pyc22940644editdlrm
_collections_abc.cpython-310.pyc329250644editdlrm
_compat_pickle.cpython-310.pyc58720644editdlrm
_compression.cpython-310.pyc45120644editdlrm
_distutils_system_mod.cpython-310.pyc54220644editdlrm
_markupbase.cpython-310.pyc75720644editdlrm
_osx_support.cpython-310.pyc115350644editdlrm
_pydecimal.cpython-310.pyc1577360644editdlrm
_pyio.cpython-310.pyc736540644editdlrm
_py_abc.cpython-310.pyc46830644editdlrm
_sitebuiltins.cpython-310.pyc35470644editdlrm
_strptime.cpython-310.pyc159450644editdlrm
_sysconfigdata__linux_x86_64-linux-gnu.cpython-310.pyc353850644editdlrm
_sysconfigdata__x86_64-linux-gnu.cpython-310.pyc353790644editdlrm
_threading_local.cpython-310.pyc65390644editdlrm
_weakrefset.cpython-310.pyc76080644editdlrm
__future__.cpython-310.pyc41310644editdlrm
__phello__.foo.cpython-310.pyc1300644editdlrm
Edit: /usr/lib/python3.10/__pycache__/tarfile.cpython-310.pyc (71578B)
o 9j, @sdZdZdZdZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZzddlZWn eyGdZYnwzddlZWn eyYdZYnweefZzeef7ZWn eynYnwgdZdZd Zed Zd Zd Zd Zd Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3e3Z4e"e#e$e%e(e)e*e&e'e+e,e-f Z5e"e#e*e-fZ6e+e,e-fZ7dZ8hd Z9e:e:e:e;e;e;d!Zne?Z>d$d%Z@d&d'ZAd(d)ZBd*e4fd+d,ZCd-d.ZDdedfd/d0ZEd1d2ZFGd3d4d4eGZHGd5d6d6eHZIGd7d8d8eHZJGd9d:d:eHZKGd;d<dd>eHZMGd?d@d@eMZNGdAdBdBeMZOGdCdDdDeMZPGdEdFdFeMZQGdGdHdHeMZRGdIdJdJZSGdKdLdLZTGdMdNdNeUZVGdOdPdPeUZWGdQdRdRe jXZYGdSdTdTeHZZGdUdVdVeZZ[GdWdXdXeZZ\GdYdZdZeZZ]Gd[d\d\eZZ^Gd]d^d^eZZ_dsd`daZ`dbdcZadddeZbdfdgZceaebecdhZdeUZeefdiZgGdjdkdkeUZhGdldmdmeUZidndoZjeijZdpdqZkeldrkrekdSdS)tz,Read from and write to tar format archives. z0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.)openN)TarFileTarInfo is_tarfileTarError ReadErrorCompressionError StreamError ExtractError HeaderErrorENCODING USTAR_FORMAT GNU_FORMAT PAX_FORMATDEFAULT_FORMATrisustar sustar00d01234567LKSxgX)pathlinkpathsizemtimeuidgidunamegname>r%r,r+r&)atimectimer(r)r*r'ntutf-8cCs8|durtd|||}|d||t|tS)z8Convert a string to a null-terminated bytes object. Nzmetadata cannot contain None) ValueErrorencodelenNUL)slengthencodingerrorsr9/usr/lib/python3.10/tarfile.pystns r;cCs*|d}|dkr|d|}|||S)z8Convert a null-terminated bytes object to a string. rN)finddecode)r5r7r8pr9r9r:ntss   r@cCs|ddvr2d}tt|dD]}|dK}|||d7}q|ddkr0dt|d| }|Szt|dd}t|p?d d}W|StyOtd w) z/Convert a number field to a python number. r)r#rBasciistrict0invalid header)ranger3r@intstripr1InvalidHeaderError)r5nir9r9r:ntis    rOrCcCs|}t|}d|krd|dkr%nntd|d|fdt}|S|tkrmd|d |krprint)r5r7r9r9r: _safe_printsrtc@eZdZdZdS)rzBase exception.N__name__ __module__ __qualname____doc__r9r9r9r:rrc@ru)r z%General exception for extract errors.Nrvr9r9r9r:r r{r c@ru)rz&Exception for unreadable tar archives.Nrvr9r9r9r:rr{rc@ru)rz.Exception for unavailable compression methods.Nrvr9r9r9r:rr{rc@ru)r z=Exception for unsupported operations on stream-like TarFiles.Nrvr9r9r9r:r r{r c@ru)r z!Base exception for header errors.Nrvr9r9r9r:r r{r c@ru)EmptyHeaderErrorzException for empty headers.Nrvr9r9r9r:r|!r{r|c@ru)TruncatedHeaderErrorz Exception for truncated headers.Nrvr9r9r9r:r}$r{r}c@ru)EOFHeaderErrorz"Exception for end of file headers.Nrvr9r9r9r:r~'r{r~c@ru)rLzException for invalid headers.Nrvr9r9r9r:rL*r{rLc@ru)SubsequentHeaderErrorz3Exception for missing and invalid extended headers.Nrvr9r9r9r:r-r{rc@0eZdZdZddZddZddZdd Zd S) _LowLevelFilezLow-level file object. Supports reading and writing. It is used instead of a regular file object for streaming access. cCsFtjtjtjBtjBd|}ttdr|tjO}t||d|_dS)NrwO_BINARYi) osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrrrfd)selfnamemoder9r9r:__init__:s  z_LowLevelFile.__init__cCst|jdSN)rcloserrr9r9r:rCsz_LowLevelFile.closecCst|j|Sr)rrdrrr'r9r9r:rdFz_LowLevelFile.readcCst|j|dSr)rrerrr5r9r9r:reIsz_LowLevelFile.writeN)rwrxryrzrrrdrer9r9r9r:r4s   rc@sreZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dddZ ddZ ddZddZdS)_StreamaClass that serves as an adapter between TarFile and a stream-like object. The stream-like object only needs to have a read() or write() method and is accessed blockwise. Use of gzip or bzip2 compression is possible. A stream-like object could be for example: sys.stdin, sys.stdout, a socket, a tape device etc. _Stream is intended to be used only internally. c Csd|_|durt||}d|_|dkrt|}|}|pd|_||_||_||_||_d|_ d|_ d|_ z|dkrlzddl }Wn t yLtd dw||_ |d|_|d kre||j|_WdS|WdS|d krzddl}Wn t ytd dw|d krd|_||_t|_WdS||_WdS|d krzddl}Wn t ytddw|d krd|_||_|j|_WdS||_WdS|dkrtd|WdS|js|jd|_ )z$Construct a _Stream object. TNF*rgzzzlib module is not availablerbz2bz2 module is not availablexzlzma module is not availabletarunknown compression type %r) _extfileobjr _StreamProxy getcomptyperrcomptypefileobjrir\posclosedzlib ImportErrorrcrc32crc _init_read_gzerrorrh_init_write_gzrdbufBZ2DecompressorcmpOSError BZ2CompressorlzmaLZMADecompressor LZMAErrorLZMACompressorr) rrrrrrirrrr9r9r:rWst                 z_Stream.__init__cCs$t|dr|js|dSdSdS)Nr)rrrrr9r9r:__del__s z_Stream.__del__cCs|jd|jj|jj |jjd|_tdtt }| d|d|j dr3|j dd|_ t j|j |_ | |j d d tdS) z6Initialize for writing with gzip compression. rs  rc@sjeZdZdZdddZddZddZd d Zd d Zd dZ e j fddZ dddZ ddZddZdS) _FileInFilezA thin wrapper around an existing file object that provides a part of its data as an individual file object. NcCs||_||_||_d|_t|dd|_d|_|durd|fg}d|_g|_d}|j}|D]&\}}||kr>|j d||df|j d||||f||7}||}q,||jkre|j d||jdfdSdS)NrrFT) roffsetr'positionrprr map_indexmapr)rrrr' blockinfolastposrealposr9r9r:rbs*    z_FileInFile.__init__cCsdSrr9rr9r9r:r{z_FileInFile.flushcCdSNTr9rr9r9r:readable~rz_FileInFile.readablecCrNFr9rr9r9r:writablerz_FileInFile.writablecCs |jSr)rseekablerr9r9r:r z_FileInFile.seekablecCr)z*Return the current file position. )rrr9r9r:rrz_FileInFile.tellcCs|tjkrtt|d|j|_|jS|tjkr4|dkr't|j|d|_|jSt|j||j|_|jS|tjkrItt|j||jd|_|jStd)z(Seek to a position in the file. rzInvalid argument) ioSEEK_SETminmaxr'rSEEK_CURSEEK_ENDr1)rrwhencer9r9r:rs   z_FileInFile.seekc Cs|dur |j|j}n t||j|j}d}|dkr |j|j\}}}}||jkr0|kr3nnn|jd7_|jt|jkrEd|_qt|||j}|rp|j||j||j|}t||krkt d||7}n|t |7}||8}|j|7_|dks|S)z!Read data from the file. NrrTr#r`) r'rrrrr3rrrdrr4) rr'r\datastartstoprr6rlr9r9r:rds2    z_FileInFile.readcCs&|t|}||dt|<t|Sr)rdr3)rrlr\r9r9r:readintosz_FileInFile.readintocCs d|_dSr)rrr9r9r:rrz_FileInFile.closer)rwrxryrzrrrrrrrrrrdrrr9r9r9r:r\s   rceZdZfddZZS) ExFileObjectcs&t|j|j|j|j}t|dSr)rr offset_datar'sparsesuperr)rtarfiletarinfor __class__r9r:rs zExFileObject.__init__rwrxryr __classcell__r9r9rr:rsrc@s eZdZdS) FilterErrorN)rwrxryr9r9r9r:r sr cr)AbsolutePathErrorcs ||_td|jddS)Nzmember z has an absolute pathrrrrrrrr9r:rszAbsolutePathError.__init__r r9r9rr:r r cr)OutsideDestinationErrorc.||_||_t|jd|dddS)Nz would be extracted to , which is outside the destinationr_pathrrrrrr%rr9r:r  z OutsideDestinationError.__init__r r9r9rr:rrrcr)SpecialFileErrorc||_t|jddS)Nz is a special filerrrr9r:rzSpecialFileError.__init__r r9r9rr:rrrcr)AbsoluteLinkErrorcr)Nz! is a symlink to an absolute pathrrrr9r:rrzAbsoluteLinkError.__init__r r9r9rr:rrrcr)LinkOutsideDestinationErrorcr)Nz would link to rrrrrr9r:rrz$LinkOutsideDestinationError.__init__r r9r9rr:rrrTcCsi}|j}tj|}|dtjfr |jdtj}|d<tj|r*t|tjtj ||}tj ||g|krDt |||j }|dur~|d@}|ru| sY|rf|d@sa|dM}|dO}n|sn|rqd}nt|||j kr~||d<|r|jdurd|d<|jdurd|d <|jdurd|d <|jdurd|d <|s|rtj|jrt|tjtj ||j}tj ||g|krt|||S) N/ri@irr)r*r+r,)rrr%realpathrseplstripisabsr r commonpathrrisregislnkisdirissymrr)r*r+r,linknamerr)member dest_pathfor_data new_attrsr target_pathrr9r9r:_get_filtered_attrssN          r0cCs|Srr9)r+r,r9r9r:fully_trusted_filter)rr1cCs,t||d}|r|jdi|ddiS|S)NFdeepr9r0rr+r,r.r9r9r: tar_filter, r5cCs,t||d}|r|jdi|ddiS|S)NTr2Fr9r3r4r9r9r: data_filter2r6r7) fully_trustedrrs([0-9]{1,20}) c @sPeZdZdZedidddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d%d'd%Zdd)d*Zed+d,Zej d-d,Zed.d/Z e j d0d/Z d1d2Z e e e e e e e e d3e d4 d5d6Z d7d8Zeed9fd:d;Zdd?Zd@dAZedBdCZdDdEZedFdGZedHdIZedJdKZedLdMZedNdOZed3dPdQdRZedSdTZed3dPdUdVZ dWdXZ!dYdZZ"d[d\Z#d]d^Z$d_d`Z%dadbZ&dcddZ'dedfZ(dgdhZ)didjZ*dkdlZ+dmdnZ,dodpZ-dqdrZ.dsdtZ/dudvZ0dwdxZ1dydzZ2d{d|Z3d}d~Z4ddZ5d%S)raInformational class which holds the details about an archive member given by a tar header block. TarInfo objects are returned by TarFile.getmember(), TarFile.getmembers() and TarFile.gettarinfo() and are usually created internally. rzName of the archive member.rzPermission bits.r)z6User ID of the user who originally stored this member.r*z7Group ID of the user who originally stored this member.r'zSize in bytes.r(zTime of last modification.chksumzHeader 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.r+z User name.r,z Group name.devmajorzDevice major number.devminorzDevice minor number.rzThe tar header starts here.rzThe file's data starts here. pax_headerszMA dictionary containing key-value pairs of an associated pax extended header.rzSparse member information.rN_sparse_structs _link_targetrcCsj||_d|_d|_d|_d|_d|_d|_t|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_i|_dS)zXConstruct a TarInfo object. name is the optional name of the member. irrN)rrr)r*r'r(r9REGTYPEr:r*r+r,r;r<rrrr=rrr9r9r:rks" zTarInfo.__init__cCr)z(In pax headers, "name" is called "path".rrr9r9r:r%rz TarInfo.pathcC ||_dSrrBrAr9r9r:r% cCr)z0In pax headers, "linkname" is called "linkpath".r*rr9r9r:r&rzTarInfo.linkpathcCrCrrE)rr*r9r9r:r&rDcCsd|jj|jt|fS)Nz<%s %r at %#x>)r rwridrr9r9r:__repr__szTarInfo.__repr__T) rr(rr*r)r*r+r,r2_KEEPc Cs| rt|} nt|} || ur|| _|| ur|| _|| ur"|| _|| ur)|| _|| ur0|| _|| ur7|| _|| ur>|| _|| urE|| _ | S)zGReturn a deep copy of self with the given attributes replaced. ) copydeepcopyrr(rr*r)r*r+r,) rrr(rr*r)r*r+r,r2rHresultr9r9r:rs(  zTarInfo.replacecCs|jdurd}n|jd@}|j||j|j|j|j|j|j|j|j |j |j |j d }|dt kr>|dds>|dd7<|S)z9Return the TarInfo's attributes as a dictionary. N) rrr)r*r'r(r9r:r*r+r,r;r<r:rr)rrr)r*r'r(r9r:r*r+r,r;r<DIRTYPEr)rrinfor9r9r:get_infos(  zTarInfo.get_infosurrogateescapecCsv|}|D]\}}|durtd|q|tkr"||||S|tkr-||||S|tkr7|||Std)zr(rstrip GNU_TYPES)rqr\r7r8rr9objrXrstructsrNrnumbytes isextendedorigsizer9r9r:rs\          zTarInfo._frombufcCs ||S)zOReturn the next TarInfo object from TarFile object tarfile. ) _fromtarfile)rqrr9r9r: fromtarfiles zTarInfo.fromtarfilecCs<|jt}|j||j|j|d}|jt|_||S)z; See dircheck documentation in _frombuf(). r) rrdrrr7r8rr _proc_member)rqrrr\rr9r9r:rs  zTarInfo._fromtarfilecCsP|jttfvr ||S|jtkr||S|jtttfvr#| |S| |S)zYChoose the right processing method depending on the type and call it. ) r:rar` _proc_gnulongr _proc_sparserjrpSOLARIS_XHDTYPE _proc_pax _proc_builtin)rrr9r9r:r-s     zTarInfo._proc_membercCsh|j|_|j}|s|jtvr|||j7}||_| |j |j |j | r2|jd|_|S)zfProcess a builtin type or an unknown type which will be treated as a regular file. r)rrrr&r:SUPPORTED_TYPES_blockr'r_apply_pax_infor=r7r8r(rr)rrrr9r9r:r:s zTarInfo._proc_builtinc Cs|j||j}z |j|dd}Wnty&}ztt|dd}~ww|j|_|j t kr:t ||j |j |_n|j tkrHt ||j |j |_|rS|jd|_|S)zSProcess the blocks that hold a GNU longname or longlink member. FrNr)rrdrr'rr rrhrr:rar@r7r8rr`r*r( removesuffix)rrr\nextrr9r9r:rPs  zTarInfo._proc_gnulongc Cs|j\}}}|`|rS|jt}d}tdD]4}zt|||d}t||d|d} Wn ty:Ynw|rF| rF||| f|d7}qt|d}|s ||_ |j |_ |j | |j |_||_ |S)z8Process a GNU sparse header plus extra headers. rrcri)r>rrdrrIrOr1rrrrrrr'r) rrrrrr\rrNrrr9r9r:rks,       zTarInfo._proc_sparsec Cs|j||j}|jtkr|j}n|j}d}d}g}t||kr||dkrt ||}s6t dz t | d}Wn tyJt dw|dkrSt d||t|kr_t d|d|d} ||dd| } | d\} } } | r| dks|| dkrt d||| | f| dkr|dur| d kr|j}nd }||7}t||kr||dks*|durd }|D]*\}} } || d d |j}|tvr|| ||j|j}n || d d |j}|||<qz |j|d d }Wnty}ztt|dd}~wwd |vr|||n#d|vr|||n|ddkr5|ddkr5|||||jtt fvrh|!||j|j|j"|_"d|vrh|j#}|$s]|jt%vre|||j7}||_"|S)zVProcess an extended or global header as described in POSIX.1-2008. rNrHr#rrs hdrcharsetsBINARYr0FrGNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrGr')&rrdrr'r:rpr=rIr3_header_length_prefix_rematchrLrJgroupr1rro partitionrr7_decode_pax_fieldr8PAX_NAME_FIELDSrr rrh_proc_gnusparse_01_proc_gnusparse_00rv_proc_gnusparse_10rjrrrrr&r)rrr\r=rr7 raw_headersrr6header_value_end_offsetkeyword_and_value raw_keywordequals raw_valuerrUrrrr9r9r:rs    )        zTarInfo._proc_paxc Csg}g}|D];\}}}|dkr&z |t|Wqty%tdw|dkrAz |t|Wqty@tdwqtt|||_dS)z?Process a GNU tar extended sparse header, version 0.0. sGNU.sparse.offsetrHsGNU.sparse.numbytesN)rrJr>r1rLlistzipr)rrroffsetsr_rrUr9r9r:rs"  zTarInfo._proc_gnusparse_00cCs@dd|ddD}tt|ddd|ddd|_dS)z?Process a GNU tar extended sparse header, version 0.1. cSsg|]}t|qSr9)rJ).0xr9r9r: sz.TarInfo._proc_gnusparse_01..r,Nr$r#)rsrrr)rrr=rr9r9r:rs(zTarInfo._proc_gnusparse_01cCsd}g}|jt}|dd\}}t|}t||dkrAd|vr*||jt7}|dd\}}|t|t||dks|j|_t t |ddd|ddd|_ dS)z?Process a GNU tar extended sparse header, version 1.0. Nrr#r$) rrdrrsrJr3rrrrrr)rrr=rfieldsrr\numberr9r9r:rs  (zTarInfo._proc_gnusparse_10c Cs|D]T\}}|dkrt|d|q|dkr t|dt|q|dkr-t|dt|q|tvrX|tvrIzt||}Wn tyHd}Ynw|dkrR|d}t|||q||_dS) zoReplace fields with supplemental information from a previous pax extended or global header. zGNU.sparse.namer%rr'zGNU.sparse.realsizerrN) rQsetattrrJ PAX_FIELDSPAX_NUMBER_FIELDSr1rrIr=)rr=r7r8rrUr9r9r:r*s&   zTarInfo._apply_pax_infocCs.z||dWSty|||YSw)z1Decode a single field from a pax record. rF)r>UnicodeDecodeError)rrUr7fallback_encodingfallback_errorsr9r9r:rAs  zTarInfo._decode_pax_fieldcCs2|dkrtdt|t\}}|r|d7}|tS)z_Round up a byte count by BLOCKSIZE and return it, e.g. _block(834) => 1024. rzinvalid offsetr#)rLrcr)rrrjrkr9r9r:rIs zTarInfo._blockcCs |jtvSz4Return True if the Tarinfo object is a regular file.)r: REGULAR_TYPESrr9r9r:r&UrDz TarInfo.isregcCs|Sr)r&rr9r9r:isfileYszTarInfo.isfilecC |jtkS)z!Return True if it is a directory.)r:rMrr9r9r:r(]rDz TarInfo.isdircCr)z%Return True if it is a symbolic link.)r:SYMTYPErr9r9r:r)arDz TarInfo.issymcCr)z!Return True if it is a hard link.)r:LNKTYPErr9r9r:r'erDz TarInfo.islnkcCr)z(Return True if it is a character device.)r:rwrr9r9r:ischrirDz TarInfo.ischrcCr)z$Return True if it is a block device.)r:rxrr9r9r:isblkmrDz TarInfo.isblkcCr)zReturn True if it is a FIFO.)r:FIFOTYPErr9r9r:isfifoqrDzTarInfo.isfifocCs |jduSr)rrr9r9r:issparseurzTarInfo.issparsecCs|jtttfvS)zCReturn True if it is one of character device, block device or FIFO.)r:rwrxrrr9r9r:isdevxsz TarInfo.isdevr9)r)6rwrxryrzdict __slots__rpropertyr%setterr&rGrHrrOrr rVrRrSrT classmethodrrr\ staticmethodr]r}r_rirrrrrrrrrrrrrrrr&rr(r)r'rrrrrr9r9r9r:rHs         :  )   2 C  y  rc@seZdZdZdZdZdZdZeZ e Z dZ e ZeZdZ    dfdd Zedddefd d Zedgd d ZedhddZedhddZediddZdddddZddZddZddZd d!Zdjd"d#Zdkdd%d&d'Z dldd(d)d*Z!dmd+d,Z"d-d.Z#dnddd0d1d2Z$doddd0d4d5Z%d6d7Z&d8d9Z'd:d;Z(dd?Z* $ dpd@dAZ+dBdCZ,dDdEZ-dFdGZ.dHdIZ/dJdKZ0dLdMZ1dNdOZ2dPdQZ3dRdSZ4dTdUZ5dqdVdWZ6dXdYZ7dmdZd[Z8d\d]Z9d^d_Z:d`daZ;dbdcZ.not_compressed)keyNrz - method z:  z'file could not be opened successfully: :r#rr|rzmode must be 'r' or 'w'Frzundiscernible mode)r1sortedrrprrrrrrrsrrrr)rqrrrrikwargsr error_msgsrfunc saved_posrerror_msgs_summaryfilemodestreamrr9rr:rsZ%      z TarFile.opencKs$|dvrtd||||fi|S)zCOpen uncompressed tar archive name for reading or writing. rr)r1)rqrrrrr9r9r:rfszTarFile.taropenrc Ks|dvrtdzddlm}Wn tytddwz |||d||}WntyB}z|dur=|dkr=td |d}~wwz |j|||fi|}Wn!tyj}z||dkretd |d}~w|d |_ |S) zkOpen gzip compressed tar archive name for reading or writing. Appending is not allowed. rrrmode must be 'r', 'w' or 'x'r)GzipFilezgzip module is not availableNrlrrF) r1gziprrrrrrrr) rqrrr compresslevelrrrrr9r9r:gzopenns8    zTarFile.gzopenc Ks|dvrtdzddlm}Wn tytddw||p!|||d}z |j|||fi|}Wn#ttfyO}z||dkrJt d |d}~w|d |_ |S) zlOpen bzip2 compressed tar archive name for reading or writing. Appending is not allowed. rrr)BZ2FilerN)r rznot a bzip2 fileF) r1rr rrrrEOFErrorrrr) rqrrrr rr rrr9r9r:bz2opens*   zTarFile.bz2openc Ks|dvrtdz ddlm}m}Wn tytddw||p#|||d}z |j|||fi|}Wn#|tfyQ} z||dkrLt d | d} ~ w|d |_ |S) zkOpen lzma compressed tar archive name for reading or writing. Appending is not allowed. rrr)LZMAFilerrN)presetrznot an lzma fileF) r1rrrrrrr rrr) rqrrrrrrrrrr9r9r:xzopens*   zTarFile.xzopenrr r r)rrrrcCs|jrdSd|_z;|jdvr7|jttd|jtd7_t|jt\}}|dkr7|jtt|W|j sB|j dSdS|j sM|j ww)zlClose the TarFile. In write-mode, two finishing zero blocks are appended to the archive. NTrr$r) rrrrer4rrrc RECORDSIZErr)rrjrkr9r9r:rs   z TarFile.closecCs(||d}|durtd||S)aReturn a TarInfo object for member `name'. If `name' can not be found in the archive, KeyError is raised. If a member occurs more than once in the archive, its last occurrence is assumed to be the most up-to-date version. rNzfilename %r not found) _getmemberrKeyError)rrrr9r9r: getmembers zTarFile.getmembercCs||js ||jS)zReturn the members of the archive as a list of TarInfo objects. The list has the same order as the members in the archive. )_checkr_loadrrr9r9r: getmembersszTarFile.getmemberscCsdd|DS)zReturn the members of the archive as a list of their names. It has the same order as the list returned by getmembers(). cSsg|]}|jqSr9rB)rrr9r9r:rsz$TarFile.getnames..)rrr9r9r:getnamesszTarFile.getnamesc CsJ|d|dur |j}|dur|}tj|\}}|tjd}|d}|}||_ |dur@|j s:t |}n t |}nt |}d}|j}t |r|j|jf} |j ss|jdkrs| |jvrs||j| krst} |j| }n;t} | dr~||j| <n/t |rt} n't |rt} nt |rt} t|}nt |rt} n t |rt!} ndS||_||_"|j#|_$|j%|_&| tkr|j'|_(nd|_(|j)|_*| |_+||_,t-rz t-.|j$d|_/Wn t0yYnwt1rz t12|j&d|_3Wn t0yYnw| tt!fvr#t4tdr#t4tdr#t5|j6|_7t8|j6|_9|S) aCreate a TarInfo object from the result of os.stat or equivalent on an existing file. The file is either named by `name', or specified as a file object `fileobj' with a file descriptor. If given, `arcname' specifies an alternative name for the file in the archive, otherwise, the name is taken from the 'name' attribute of 'fileobj', or the 'name' argument. The name should be a text string. awxNrrr#rmajorminor):rrrr% splitdriverr"r#rrrlstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkrrr@S_ISDIRrMS_ISFIFOrS_ISLNKrreadlinkS_ISCHRrwS_ISBLKrxrst_uidr)st_gidr*st_sizer'st_mtimer(r:r*pwdgetpwuidr+rgrpgetgrgidr,rrst_rdevr;rr<) rrarcnamerdrvrstatresr*stmdinoder:r9r9r: gettarinfos                zTarFile.gettarinfoT)rcCs"||dur |}|D]}|rf|jdurtdntt|jtd|jp)|j|jp.|jf| s:| rGtdd|j |j fntd|j |jdurXtdntdt|jdd t|j|rod nd |r|rtd |j|rtd |jtq dS)aPrint a table of contents to sys.stdout. If `verbose' is False, only the names of the members are printed. If it is True, an `ls -l'-like output is produced. `members' is optional and must be a subset of the list returned by getmembers(). Nz ??????????z%s/%sz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02drrrz-> zlink to )rrrtrrr+r)r,r*rrr;r<r'r(r localtimerr(r)r*r'rs)rverboserrr9r9r:res:     z TarFile.listfiltercCsP|d|dur |}|jdur#tj||jkr#|dd|dS|d||||}|dur=|dd|dS|durS||}|durS|dd|dS|rut|d}| ||WddS1snwYdS| r| ||rt t |D]}|j tj||tj||||d qdSdS| |dS) a!Add the file `name' to the archive. `name' may be any type of file (directory, fifo, symbolic link, etc.). If given, `arcname' specifies an alternative name for the file in the archive. Directories are added recursively by default. This can be avoided by setting `recursive' to False. `filter' is a function that expects a TarInfo object argument and returns the changed TarInfo object, if it returns None the TarInfo object will be excluded from the archive. rNr$ztarfile: Skipped %rr#ztarfile: Unsupported type %rtarfile: Excluded %rrr=)rrrr%r_dbgr:r&raddfiler(rlistdiraddr)rrr5 recursiver>rfr9r9r:rCs<    " z TarFile.addcCs|dt|}||j|j|j}|j||jt |7_|j }|durWt ||j|j |dt |j t\}}|dkrN|jtt||d7}|j|t7_|j|dS)aAdd the TarInfo object `tarinfo' to the archive. If `fileobj' is given, it should be a binary file, and tarinfo.size bytes are read from it and added to the archive. You can create TarInfo objects directly, or by using gettarinfo(). rN)rirr#)rrIrVrTr7r8rrerr3rrbr'rcrr4rr)rrrr\rirjrkr9r9r:rAs   zTarFile.addfilecCsh|dur|j}|dur tSt|trtd|St|r|Szt|WSty3td|ddw)NzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z not found) extraction_filterr1rerh TypeErrorcallable_NAMED_FILTERSrr1)rr>r9r9r:_get_filter_functions    zTarFile._get_filter_function.) numeric_ownerr>c Csg}||}|dur |}|D]#}||||}|durq|r&|||j||| |dq|jdddd|D]7}tj||j } z|j || |d| || | || Wq>t yu} z || WYd} ~ q>d} ~ wwdS)aExtract all members from the archive to the current working directory and set owner, modification time and permissions on directories afterwards. `path' specifies a different directory to extract to. `members' is optional and must be a subset of the list returned by getmembers(). If `numeric_owner` is True, only the numbers for user/group names are used and not the names. The `filter` function will be called on each member just before extraction. It can return a changed TarInfo or None to skip the member. String names of common filters are accepted. N set_attrsrLcSrrrB)rr9r9r: sz$TarFile.extractall..T)rreverse)rL)rJ_get_extract_tarinfor(r _extract_onesortrr%rrchownutimechmodr _handle_nonfatal_error) rr%rrLr> directoriesfilter_functionr+rdirpathrr9r9r: extractalls2   zTarFile.extractallrcCs8||}||||}|dur|||||dSdS)aExtract a member from the archive to the current working directory, using its full name. Its file information is extracted as accurately as possible. `member' may be a filename or a TarInfo object. You can specify a different directory using `path'. File attributes (owner, mtime, mode) are set unless `set_attrs' is False. If `numeric_owner` is True, only the numbers for user/group names are used and not the names. The `filter` function will be called before extraction. It can return a changed TarInfo or None to skip the member. String names of common filters are accepted. N)rJrQrR)rr+r%rNrLr>rYrr9r9r:extract s zTarFile.extractc Cst|tr ||}n|}|}z|||}Wn/ttfy/}z ||WYd}~nd}~wtyE}z ||WYd}~nd}~ww|durU|dd|j dS| rgt |}t j ||j|_|S)z@Get filtered TarInfo (or None) from member, which might be a strNr$r?)rerhrrr _handle_fatal_errorr rWr@rr'rIrr%rr*r?)rr+rYr%r unfilteredrr9r9r:rQ) s(   zTarFile._get_extract_tarinfoc Cs|dz|j|tj||j||dWdSty/}z ||WYd}~dSd}~wtyF}z | |WYd}~dSd}~ww)z%Extract from filtered tarinfo to diskrrMN) r_extract_memberrr%rrrr]r rW)rrr%rNrLrr9r9r:rR@ s  zTarFile._extract_onecCs |jdkr|dd|dS)z=Handle non-fatal error (ExtractError) according to errorlevelr# tarfile: %sN)rr@rrr9r9r:rWM s zTarFile._handle_nonfatal_errorcCsp|jdkrt|tr)|jdur|dd|jdS|dd|j|jfdS|ddt|j|fdS)z1Handle "fatal" error according to self.errorlevelrNr#r`ztarfile: %s %rztarfile: %s %s)rrerfilenamer@strerrorr:rwrar9r9r:r]T s   zTarFile._handle_fatal_errorcCsz|dt|tr||}n|}|s|jtvr!|||S|s)| r;t|j t r3t d| ||SdS)a\Extract a member from the archive as a file object. `member' may be a filename or a TarInfo object. If `member' is a regular file or a link, an io.BufferedReader object is returned. For all other existing members, None is returned. If `member' does not appear in the archive, KeyError is raised. rz'cannot extract (sym)link as file objectN)rrerhrr&r:r fileobjectr'r)rrr extractfile_find_link_target)rr+rr9r9r:re` s     zTarFile.extractfilecCsV|d}|dtj}tj|}|rtj|st||s'| r4| dd|j |j fn| d|j | rF|||nF|rQ|||n;|r\|||n0|sd|rk|||n!|ss| rz|||n|jtvr|||n||||r||||| s||||||dSdSdS)z\Extract the TarInfo object tarinfo to a physical file called targetpath. rr#z%s -> %sN)rrrr"r%dirnamermakedirsr'r)r@rr*r&makefiler(makedirrmakefiforrmakedevmakelinkr:r makeunknownrTrVrU)rr targetpathrNrL upperdirsr9r9r:r_ s8      zTarFile._extract_membercCsBz|jdurt|WdSt|dWdSty YdSw)z,Make a directory called targetpath. Ni)rrmkdirFileExistsErrorrrror9r9r:rj s  zTarFile.makedircCs|j}||j|j}t|d?}|jdur7|jD]\}}||t|||t|q||j| nt|||jt|WddSWddS1sSwYdS)z'Make a file called targetpath. rN) rrrrrrrbrr'truncate)rrrosourceritargetrr'r9r9r:ri s      "zTarFile.makefilecCs"||||dd|jdS)zYMake a file from a TarInfo object with an unknown type at targetpath. r#z9tarfile: Unknown file type %r, extracted as regular file.N)rir@r:rsr9r9r:rn s  zTarFile.makeunknowncCs ttdr t|dStd)z'Make a fifo called targetpath. mkfifozfifo not supported by systemN)rrrwr rsr9r9r:rk s zTarFile.makefifocCsjttdr ttdstd|j}|durd}|r!|tjO}n|tjO}t||t |j |j dS)z     z TarFile.chownc CsF|jdurdSz t||jWdSty"}ztd|d}~ww)zASet file permissions of targetpath according to tarinfo. Nzcould not change mode)rrrVrr )rrrorr9r9r:rV+ s  z TarFile.chmodc CsZ|j}|dur dSttdsdSz t|||fWdSty,}ztd|d}~ww)zBSet modification time of targetpath according to tarinfo. NrUz"could not change modification time)r(rrrUrr )rrror(rr9r9r:rU5 s  z TarFile.utimec Cs:|d|jdur|j}d|_|S|j|jkr-|j|jd|jds-tdd} z|j |}Wnt ye}z!|j r[| dd|j|f|jt 7_WYd}~q/WYd}~nd}~wty}z-|j r| dd|j|f|jt 7_WYd}~q/|jdkrtt|dWYd}~nqd}~wty|jdkrtd dYn[ty}z|jdkrtt|dWYd}~nBd}~wty}ztt|dd}~wty }zzddl}t||jrtd |d|ty|wd}~ww |dur|j||Sd|_|S) zReturn the next member of the archive as a TarInfo object, when TarFile is opened for reading. Return None if there is no more available. raNr#r`Tr$z0x%X: %srz empty filez zlib error: )rrrrrrrdrrrr~rr@rrLrhr|r}r Exceptionrrerrrrr)rmrrrr9r9r:rC st                z TarFile.nextc Cs|}d}|dur#z||}Wn tyd}Ynw|d|}|r+tj|}t|D]"}|r<|j|jkr;d}q/|rFtj|j}n|j}||krQ|Sq/|rXt|dS)z}Find an archive member by name from bottom to top. If tarinfo is given, it is used as the starting point. FNT) rindexr1rr%normpathreversedrr) rrr normalizerskippingrr+ member_namer9r9r:r s2     zTarFile._getmembercCs |}|dur nqd|_dS)zWRead through the entire archive file and look for readable members. TN)rrrr9r9r:r s  z TarFile._loadcCs>|jr td|jj|dur|j|vrtd|jdSdS)znCheck if TarFile is still open, and if the operation's mode corresponds to TarFile's mode. z %s is closedNzbad operation for mode %r)rrr rwr)rrr9r9r:r s zTarFile._checkcCs`|rdtdtj|j|jf}d}n|j}|}|j||dd}|dur.t d||S)zZFind the target member of a symlink or hardlink member in the archive. rNT)rrzlinkname %r not found) r)rr>rr%rgrr*rr)rrr*limitr+r9r9r:rf s  zTarFile._find_link_targetccs|jr |jEdHdSd}|jdur|}|d7}|V |t|jkr,|j|}n|js;|}|s:d|_dSndS|d7}|Vq)z$Provide an iterator object. Nrr#T)rrrrr3)rrrr9r9r:__iter__ s,   zTarFile.__iter__cCs ||jkrt|tjddSdS)z.Write debugging output to sys.stderr. fileN)rrsrqstderr)rlevelmsgr9r9r:r@ s z TarFile._dbgcCs ||Sr)rrr9r9r: __enter__ szTarFile.__enter__cCs.|dur |dS|js|jd|_dSr)rrrr)rr:rU tracebackr9r9r:__exit__ s    zTarFile.__exit__) NrNNNNNNrPNNNN)rN)rNr)rNN)NNNTrr)rKN)rT)TFr)>rwrxryrzrrrrrrTr r7r8rrrrdrFrrrrrr r rrrrrrr:rrCrArJr[r\rQrRrWr]rer_rjrirnrkrlrmrTrVrUrrrrrfrr@rrr9r9r9r:r}s o]       c& 3 -     1!  ?(   rcCsBzt|dr t|d}nt|}|WdSty YdSw)zReturn True if name points to a tar archive that we are able to handle, else return False. 'name' should be a string, file, or file-like object. rd)rTF)rrrr)rrr9r9r:r s   rc Cshddl}d}|j|d}|jdddddd |jd d td d |jdd}|jddddd|jdddddd|jdddddd|jdd dd!d|}|jr]|jdur]|d"d#|j dur|j }t |rt |d$}| t | tjd%Wdn1swY|jrt d&|dSdS|d"d'|dS|jdur|j}t |rt |d(}|j|jd)WddS1swYdS|d"d'|dS|jdurRt|jd"kr|jd}tj}nt|jd*kr|j\}}n|d"|t |rGt |d(}|j||jd+Wdn 1s%wY|jrE|d,kr9d-|} nd.||} t | dSdS|d"d'|dS|jdur|jd} tj| \} } d/d/d0d0d1d1d1d1d2} | | vr|d3| | nd4}|j}t | |}|D]}||qWdn 1swY|jrt d5| dSdSdS)6Nrz3A simple command-line interface for tarfile module.) descriptionz-vz --verbose store_trueFzVerbose output)actiondefaulthelpz--filterz zFilter for extraction)metavarchoicesrT)requiredz-lz--list zShow listing of a tarfile)rrz-ez --extract+)rz zExtract tarfile into target dir)nargsrrz-cz--create)zzzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#z&--filter is only valid for extraction rrz{!r} is a tar archive.z{!r} is not a tar archive. r)r<r$)r%r>rKz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.rrr)rz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rz{!r} file created.)argparseArgumentParser add_argumentrIadd_mutually_exclusive_group parse_argsr>r\exittestrrrrsrqrr<rTrrr3rcurdir format_helpr[createpopr%splitextrC)rrparserrargsrfrtfrrtar_namerext compressionstar_mode tar_files file_namer9r9r:main s           "          r__main__r)mrzversion __author__ __credits__builtinsrrrqrrrarrrZrIrewarningsr0rr2AttributeErrorNotImplementedErrorrr NameError__all__r4rrr^rYr[rZrtr@rrrrwrxrMrCONTTYPErar`rrjrprr rrrrrrrrrfrJrrr getfilesystemencodingr;r@rOrVr_rbrtrrr rrr r r|r}r~rLrrrobjectrrBufferedReaderrr r rrrrr0r1r5r7rIrHcompilerrrrrrwr9r9r9r:s$         sh  8 ; _