;i dZddlZddlZddlmZmZGddeZdZdZ dZ d Z d Z d Z d Zd ZdZdZGddZddZdS)z] Python-based CArchive (PKG) reader implementation. Used only in the archive_viewer utility. N)ZlibArchiveReaderArchiveReadErrorceZdZdS)NotAnArchiveErrorN)__name__ __module__ __qualname__OC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\PyInstaller/archive/readers.pyrrsDr rbdzZMmsxolceZdZdZdZdZejeZdZ eje Z dZ e dZ edZdZd Zd Zd S) CArchiveReaderz: Reader for PyInstaller's CArchive (PKG) archive. sMEI z !8sIIII64sz!IIIIBcc||_d|_d|_d|_d|_i|_g|_t|jd5}|||j }|dkrtd| |tj ||j}t!j|j|\}}}}} } ||jz|_|j|z |_| std| |j|z||} || \|_|_ddddS#1swxYwYdS)Nrrbz$Could not find COOKIE magic pattern!z2Python shared library name not set in the archive!) _filename _start_offset _end_offset _toc_offset _toc_lengthtocoptionsopen_find_magic_pattern_COOKIE_MAGIC_PATTERNrseekosSEEK_SETread_COOKIE_LENGTHstructunpack_COOKIE_FORMAT _parse_toc) selffilenamefpcookie_start_offset cookie_datamagicarchive_length toc_offset toc_lengthpyvers pylib_nametoc_datas r __init__zCArchiveReader.__init__Ms! $.$ ' ' ?2"&":":2t?Y"Z"Z "b((&'MNNN GG' 5 5 5''$"566K d1;?? NE>:z6: 3T5HHD !%!1N!BD  ]&'[\\\ GGD&3 4 4 4wwz**H%)__X%>%> "DHdl3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sDE##E'*E'c|dtj|}d}d}|t |krt ||z d}||z }|t |krn~||tj||}||}|dkr||z}n(|t |zdz }|t |k|S)Nri r) r&r'SEEK_ENDtelllenmaxr(r)rfind) r1 magic_patternend_posSEARCH_CHUNK_SIZE magic_offset start_pos chunk_sizebufposs r r$z"CArchiveReader._find_magic_patternss 2;''))! ]++++G&77;;I 9,JC .... GGIr{ + + +''*%%C))M**Cbyy(3 #m"4"44q8G]++++ r cg}i}d}|t|krtj|j||||jz\}}}}} } ||jz }||jz } tj| d|||| z^} } || z }| dd} | d} | dkr|| n |||| | f|| <|t|k||fS)Nrrzutf-8asciir)r@r+r,_TOC_ENTRY_FORMAT_TOC_ENTRY_LENGTHrstripdecodeappend)clsdatar"r!cur_pos entry_length entry_offset data_lengthuncompressed_lengthcompression_flagtypecode name_lengthname_s r r.zCArchiveReader._parse_tocs5D !! c3T'7SMbCb:c5dee eL, 5HJZ\d s, ,G&)>>K} %6%6%6WgP[F[=\8]^^HD1 { "G;;u%%,,W55Dw//H3t$$$$);8KM]_ghD 'D !!*G|r c~|j|}|td|d|\}}}}}t|jd5}||j|ztj| |} dddn #1swxYwY|rddl } | | } | S)z8 Extract data for the given entry name. NNo entry named  found in the archive!rr) r!getKeyErrorr#rr&rr'r(r)zlib decompress) r/r]entryrWrXrYrZr[r1rTrds r extractzCArchiveReader.extracts  T"" =ITIIIJJ JUZR k#68H( $.$ ' ' (2 GGD&5r{ C C C77;''D ( ( ( ( ( ( ( ( ( ( ( ( ( ( (  ) KKK??4((D s >BBBc|j|jz }t|jd5}||jt j||cdddS#1swxYwYdS)zZ Extract complete PKG/CArchive archive from the parent file (executable). rN)rrr#rr&r'r(r))r/ total_lengthr1s r raw_pkg_datazCArchiveReader.raw_pkg_datas'$*<< $.$ ' ' )2 GGD& 4 4 477<(( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s:A,,A03A0c|j|}|td|d|\}}}}}|tkrt |j|j|zS|tkrtdtd|d)zC Open new archive reader for the embedded archive. Nr`raz#Zipfile archives not supported yet!zEntry z% is not a supported embedded archive!) r!rbrc PKG_ITEM_PYZrrrPKG_ITEM_ZIPFILEr)r/r]rfrWrXrYrZr[s r open_embedded_archivez$CArchiveReader.open_embedded_archives  T"" =ITIIIJJ JUZR k#68H( | # #$T^T5G,5VWW W ) ) )#$IJJ J#$XT$X$X$XYY Yr N)rrr __doc__r%r-r+calcsizer*rNrOr; staticmethodr$ classmethodr.rgrjrnr r r rr&s"7!N$V_^44N"'(9::$?$?$?L\4[6()))ZZZZZr rTc@g}t|}|jD]r\}}|^}}|||tkrH|rF||}|jD]}||s|S)z List the contents of the PKG / CArchive. If `recursive` flag is set (the default), the contents of the embedded PYZ archive is included as well. Used by the tests. )rr!itemsrRrlrnkeys) r0 recursivecontents pkg_archiver] toc_entryr^r[ pyz_archives r pkg_archive_contentsr{sH **K&?0022&&i H | # # #%;;DAAK#,,.. & &%%%% Or )T)ror'r+#PyInstaller.loader.pyimod01_archiverr TypeErrorrPKG_ITEM_BINARYPKG_ITEM_DEPENDENCYrlrmPKG_ITEM_PYPACKAGEPKG_ITEM_PYMODULEPKG_ITEM_PYSOURCE PKG_ITEM_DATAPKG_ITEM_RUNTIME_OPTIONPKG_ITEM_SPLASHrr{r r r rs SSSSSSSS          rZrZrZrZrZrZrZrZjr