
    i                          S r SSKrSSKrSSKJrJr   " S S\5      rSrSr	Sr
S	rS
rSrSrSrSrSr " S S5      rSS jrg)z]
Python-based CArchive (PKG) reader implementation. Used only in the archive_viewer utility.
    N)ZlibArchiveReaderArchiveReadErrorc                       \ rS rSrSrg)NotAnArchiveError    N)__name__
__module____qualname____firstlineno____static_attributes__r       HC:\des-py\RoboSAPF\venv\Lib\site-packages\PyInstaller/archive/readers.pyr   r      s    r   r   bdzZMmsxolc                       \ rS rSrSrSrSr\R                  " \5      r	Sr
\R                  " \
5      rS r\S 5       r\S 5       rS	 rS
 rS rSrg)CArchiveReader&   z2
Reader for PyInstaller's CArchive (PKG) archive.
s   MEI
z
!8sIIII64sz!IIIIBcc                    Xl         SU l        SU l        SU l        SU l        0 U l        / U l        [        U R                   S5       nU R                  X R                  5      nUS:X  a  [        S5      eUR                  U[        R                  5        UR                  U R                  5      n[         R"                  " U R$                  U5      u  pVpxpX0R                  -   U l        U R                  U-
  U l        U
(       d  [        S5      eUR                  U R                  U-   5        UR                  U5      nU R'                  U5      u  U l        U l        S S S 5        g ! , (       d  f       g = f)Nr   rbz$Could not find COOKIE magic pattern!z2Python shared library name not set in the archive!)	_filename_start_offset_end_offset_toc_offset_toc_lengthtocoptionsopen_find_magic_pattern_COOKIE_MAGIC_PATTERNr   seekosSEEK_SETread_COOKIE_LENGTHstructunpack_COOKIE_FORMAT
_parse_toc)selffilenamefpcookie_start_offsetcookie_datamagicarchive_length
toc_offset
toc_lengthpyvers
pylib_nametoc_datas               r   __init__CArchiveReader.__init__M   s>   ! $..$'2"&":":2?Y?Y"Z"b(&'MNN GG'5''$"5"56K d11;? NE:6  35H5HHD!%!1!1N!BD &'[\\ GGD&&34wwz*H%)__X%>"DHdl3 (''s   DE##
E1c                    U R                  S[        R                  5        U R                  5       nSnSnU[	        U5      :  a  [        X#-
  S5      nX%-
  nU[	        U5      :  a   U$ U R                  U[        R                  5        U R                  U5      nUR                  U5      nUS:w  a  XX-   n U$ U[	        U5      -   S-
  nU[	        U5      :  a  M  U$ )Nr   i    r      )	r*   r+   SEEK_ENDtelllenmaxr,   r-   rfind)	r5   magic_patternend_posSEARCH_CHUNK_SIZEmagic_offset	start_pos
chunk_sizebufposs	            r   r(   "CArchiveReader._find_magic_patterns   s     	2;;'') !]++G7;I ,JC..  GGIr{{+''*%C))M*Cby(   #m"44q8G ]++  r   c                    / n0 nSnU[        U5      :  a  [        R                  " U R                  XX@R                  -    5      u  pVpxpX@R                  -  nXPR                  -
  n[        R                  " U S3XXK-    5      tpXK-  nUR                  S5      R                  S5      nU
R                  S5      n
U
S:X  a  UR                  U5        OXgXU
4X<'   U[        U5      :  a  M  X24$ )Nr   r       zutf-8asciir   )rE   r/   r0   _TOC_ENTRY_FORMAT_TOC_ENTRY_LENGTHrstripdecodeappend)clsdatar&   r%   cur_posentry_lengthentry_offsetdata_lengthuncompressed_lengthcompression_flagtypecodename_lengthname_s                 r   r2   CArchiveReader._parse_toc   s    D	! c33T7MbMbCb5de eLJZ,,,G&)>)>>K}}}A%6gF[8]^HD"G;;u%,,W5Dw/H 3t$)8K_gh	' D	!* |r   c                    U R                   R                  U5      nUc  [        SU< S35      eUu  p4pVn[        U R                  S5       nUR                  U R                  U-   [        R                  5        UR                  U5      n	SSS5        U(       a  SSK
n
U
R                  W	5      n	W	$ ! , (       d  f       N,= f)z(
Extract data for the given entry name.
NNo entry named  found in the archive!r   r   )r%   getKeyErrorr'   r    r*   r!   r+   r,   r-   zlib
decompress)r3   rc   entryr]   r^   r_   r`   ra   r5   rZ   rk   s              r   extractCArchiveReader.extract   s    
 T"=_TH4JKLLUZR#6($..$'2GGD&&5r{{C77;'D ( ??4(D ('s   ?B00
B>c                    U R                   U R                  -
  n[        U R                  S5       nUR	                  U R                  [
        R                  5        UR                  U5      sSSS5        $ ! , (       d  f       g= f)zJ
Extract complete PKG/CArchive archive from the parent file (executable).
r   N)r"   r!   r'   r    r*   r+   r,   r-   )r3   total_lengthr5   s      r   raw_pkg_dataCArchiveReader.raw_pkg_data   sZ     ''$*<*<<$..$'2GGD&&477<( (''s   ;A55
Bc                    U R                   R                  U5      nUc  [        SU< S35      eUu  p4pVnU[        :X  a#  [	        U R
                  U R                  U-   5      $ U[        :X  a  [        S5      e[        SU< S35      e)z3
Open new archive reader for the embedded archive.
rg   rh   z#Zipfile archives not supported yet!zEntry z% is not a supported embedded archive!)	r%   ri   rj   PKG_ITEM_PYZr   r    r!   PKG_ITEM_ZIPFILEr   )r3   rc   rm   r]   r^   r_   r`   ra   s           r   open_embedded_archive$CArchiveReader.open_embedded_archive   s    
 T"=_TH4JKLLUZR#6(|#$T^^T5G5G,5VWW))#$IJJ#fTH4Y$Z[[r   )r"   r    r!   r$   r#   r&   r%   N)r	   r
   r   r   __doc__r)   r1   r/   calcsizer.   rT   rU   r?   staticmethodr(   classmethodr2   rn   rr   rw   r   r   r   r   r   r   &   sx    " 7!N__^4N "(9:$?L  4  6()\r   r   c                 @   / n[        U 5      nUR                  R                  5        Hr  u  pEUGt pgUR                  U5        U[        :X  d  M&  U(       d  M/  UR                  U5      nUR                  R                  5        H  nUR                  U5        M     Mt     U$ )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.
)r   r%   itemsrX   ru   rw   keys)	r4   	recursivecontentspkg_archiverc   	toc_entryrd   ra   pyz_archives	            r   pkg_archive_contentsr      s     H *K&??002 |#		%;;DAK#,,.% / 3 Or   )T)ry   r+   r/   #PyInstaller.loader.pyimod01_archiver   r   	TypeErrorr   PKG_ITEM_BINARYPKG_ITEM_DEPENDENCYru   rv   PKG_ITEM_PYPACKAGEPKG_ITEM_PYMODULEPKG_ITEM_PYSOURCEPKG_ITEM_DATAPKG_ITEM_RUNTIME_OPTIONPKG_ITEM_SPLASHr   r   r   r   r   <module>r      so    
  S		 	
       r\ r\jr   