ó
    ÂÜhÖ  ã                  óà   • S r SSKJr  SSKrSSKrSSKrSSKJr   " S S\5      r	 " S S\R                  5      r " S	 S
\R                  5      r " S S\R                  5      r " S S5      rg)a;  
ELF file parser.

This provides a class ``ELFFile`` that parses an ELF executable in a similar
interface to ``ZipFile``. Only the read interface is implemented.

Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca
ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html
é    )ÚannotationsN)ÚIOc                  ó   • \ rS rSrSrg)Ú
ELFInvalidé   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú4/usr/lib/python3/dist-packages/packaging/_elffile.pyr   r      s   † Úr   r   c                  ó   • \ rS rSrSrSrSrg)ÚEIClassé   é   é   r   N)r	   r
   r   r   ÚC32ÚC64r   r   r   r   r   r      ó   † Ø
€CØ
ƒCr   r   c                  ó   • \ rS rSrSrSrSrg)ÚEIDataé   r   r   r   N)r	   r
   r   r   ÚLsbÚMsbr   r   r   r   r   r      r   r   r   c                  ó(   • \ rS rSrSrSrSrSrSrSr	g)	ÚEMachineé!   é   é   é(   é>   é·   r   N)
r	   r
   r   r   ÚI386ÚS390ÚArmÚX8664ÚAArc64r   r   r   r   r   r   !   s   † Ø€DØ€DØ
€CØ€EØƒFr   r   c                  ó@   • \ rS rSrSrSS jrS	S jr\S
S j5       rSr	g)ÚELFFileé)   z&
Representation of an ELF executable.
c           
     ó|  • Xl          U R                  S5      n[        US S 5      nUS:w  a  [	        SU< 35      eUS   U l        US   U l         SSS	S
S.U R                  U R                  4   u  oPl        U l	         U R                  U5      u
  nU l        nnU l        nU l        nU l        U l        g ! [        R                   a  n[	        S5      UeS nAff = f! [         a,  n[	        SU R                   SU R                   S35      UeS nAff = f! [        R                   a  n[	        S5      UeS nAff = f)NÚ16Bzunable to parse identificationé   s   ELFzinvalid magic: é   )z<HHIIIIIHHHz	<IIIIIIII©r   r   r/   )z>HHIIIIIHHHz	>IIIIIIIIr1   )z<HHIQQQIHHHz	<IIQQQQQQ©r   r   r0   )z>HHIQQQIHHHz	>IIQQQQQQr2   ))r   r   )r   r   )r   r   )r   r   zunrecognized capacity (z) or encoding (Ú)z/unable to parse machine and section information)Ú_fÚ_readÚstructÚerrorr   ÚbytesÚcapacityÚencodingÚ_p_fmtÚ_p_idxÚKeyErrorÚmachineÚ_e_phoffÚflagsÚ_e_phentsizeÚ_e_phnum)ÚselfÚfÚidentÚeÚmagicÚe_fmtÚ_s          r   Ú__init__ÚELFFile.__init__.   sc  € ØŒð	FØ—J‘J˜uÓ%ˆEô �e˜B˜Q�iÓ ˆØ�JÓÜ˜¨u©iÐ8Ó9Ð9à˜a™ˆŒØ˜a™ˆŒð	ð
 @Ø?Ø?Ø?ñ	/ð
 �}‰}˜dŸm™mÐ,ñ/.Ñ+ˆE”; ¤ð	Wð —
‘
˜5Ó!ñØØ”ØØØ”ØØ”
ØØÔ!Ø•øôG �|‰|ó 	FÜÐ=Ó>ÀAÐEûð	Fûô& ó 	ÜØ)¨$¯-©-¨¸ÈÏÉÀÐVWÐXóàðûð	ûô$ �|‰|ó 	WÜÐNÓOÐUVÐVûð	WúsG   ˆB5 Á-C Á?5D Â5CÃ	CÃCÃ
DÃ''DÄDÄD;Ä*D6Ä6D;c                óˆ   • [         R                  " XR                  R                  [         R                  " U5      5      5      $ )N)r6   Úunpackr4   ÚreadÚcalcsize)rC   Úfmts     r   r5   ÚELFFile._read[   s'   € Ü�}Š}˜S§'¡'§,¡,¬v¯ª¸sÓ/CÓ"DÓEÐEr   c                ó0  • [        U R                  5       Hâ  nU R                  R                  U R                  U R
                  U-  -   5         U R                  U R                  5      nX R                  S      S:w  a  Mk  U R                  R                  X R                  S      5        [        R                  " U R                  R                  X R                  S      5      5      R                  S5      s  $    g! [        R                   a     Mþ  f = f)z8
The path recorded in the ``PT_INTERP`` section header.
r   r    r   r   Ú N)ÚrangerB   r4   Úseekr?   rA   r5   r;   r6   r7   r<   ÚosÚfsdecoderN   Ústrip)rC   ÚindexÚdatas      r   ÚinterpreterÚELFFile.interpreter^   sÔ   € ô
 ˜4Ÿ=™=Ö)ˆEØ�G‰G�L‰L˜Ÿ™¨×):Ñ):¸UÑ)BÑBÔCðØ—z‘z $§+¡+Ó.�ð —K‘K ‘NÑ# qÓ(ÙØ�G‰G�L‰L˜Ÿk™k¨!™nÑ-Ô.Ü—;’;˜tŸw™wŸ|™|¨D·±¸Q±Ñ,@ÓAÓB×HÑHÈÓNÒNñ *ð øô —<‘<ó Úðús   ÁC=Ã=DÄD)
rA   rB   r?   r4   r;   r<   r9   r:   r@   r>   N)rD   z	IO[bytes]ÚreturnÚNone)rP   Ústrr]   ztuple[int, ...])r]   z
str | None)
r	   r
   r   r   Ú__doc__rJ   r5   Úpropertyr[   r   r   r   r   r+   r+   )   s(   † ñô+WôZFð óó ór   r+   )r`   Ú
__future__r   ÚenumrV   r6   Útypingr   Ú
ValueErrorr   ÚIntEnumr   r   r   r+   r   r   r   Ú<module>rg      sc   ðñõ #ã Û 	Û Ý ô	�ô 	ôˆd�l‰lô ô
ˆT�\‰\ô ô
ˆt�|‰|ô ÷Dò Dr   