a  ze,@szUddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z GdddZe edddZeddd Zedd d Zeed d dZeddZe eefed<Gddde Ze edddZe edddZe edddZee eefdddZee eefdddZeeeedd d!Z d"d#d$d%Z!eee ed&d'd(Z"dS))N)IODictIterator NamedTupleOptionalTuplec@s`eZdZGdddeZdZdZdZdZdZ dZ dZ dZ d Z d Zd Zd Zeed dddZd S)_ELFFileHeaderc@seZdZdZdS)z$_ELFFileHeader._InvalidELFFileHeaderz7 An invalid ELF file header was found. N)__name__ __module__ __qualname____doc__r r b/opt/bitninja-python-dojo/embedded/lib/python3.9/site-packages/pip/_vendor/packaging/_manylinux.py_InvalidELFFileHeadersriFLE(>l~iiN)filereturncszttdfdd }|d|_|j|jkr2t|d|_|j|j|jhvrVt|d|_ |j |j |j hvrzt|d|_ |d|_ |d|_d|_|j |j krdnd}|j |j krd nd}|j |j krd nd }|j|jkr|n|}|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_|||_dS) N)fmtrcsFz t|}t||}Wntjy<tYn0|dS)Nr)readstructcalcsizeunpackerrorrr)rdataresultrr rr$s z'_ELFFileHeader.__init__..unpackz>IBzHzQ)strint e_ident_magicELF_MAGIC_NUMBERrr e_ident_class ELFCLASS32 ELFCLASS64 e_ident_data ELFDATA2LSB ELFDATA2MSBe_ident_version e_ident_osabie_ident_abiversionr e_ident_pade_type e_machine e_versione_entrye_phoffe_shoffe_flagse_ehsize e_phentsizee_phnum e_shentsizee_shnum e_shstrndx)selfrrformat_hformat_iformat_qformat_pr r r__init__#s>                    z_ELFFileHeader.__init__)r r r ValueErrorrr&r(r)r+r,EM_386EM_S390EM_ARM EM_X86_64EF_ARM_ABIMASKEF_ARM_ABI_VER5EF_ARM_ABI_FLOAT_HARDrbytesrCr r r rrsr)rc CsZz8ttjd}t|}Wdn1s,0YWntttjfyTYdS0|S)Nrb)opensys executablerOSError TypeErrorr)f elf_headerr r r_get_elf_headerLs *rUcCsnt}|durdS|j|jk}||j|jkM}||j|jkM}||j|j@|j kM}||j|j @|j kM}|SNF) rUr'r(r*r+r2rGr7rIrJrKrTrr r r_is_linux_armhfUs   rXcCsBt}|durdS|j|jk}||j|jkM}||j|jkM}|SrV)rUr'r(r*r+r2rErWr r r_is_linux_i686hs rY)archrcCs$|dkrtS|dkrtS|dvS)Narmv7li686>ppc64x86_64s390xaarch64ppc64le)rXrY)rZr r r_have_compatible_abirs rbcCsdS)N2r r r r rrd_LAST_GLIBC_MINORc@seZdZUeed<eed<dS) _GLibCVersionmajorminorN)r r r r$__annotations__r r r rrgs rgc CsHz&td}|dusJ|\}}WnttttfyBYdS0|S)zJ Primary implementation of glibc_version_string using os.confstr. CS_GNU_LIBC_VERSIONN)osconfstrsplitAssertionErrorAttributeErrorrQrD)version_string_versionr r r_glibc_version_string_confstrs  rtcCsz ddl}Wnty YdS0z|d}WntyDYdS0z |j}WntydYdS0|j|_|}t|t s| d}|S)zG Fallback implementation of glibc_version_string using ctypes. rNascii) ctypes ImportErrorCDLLrQgnu_get_libc_versionrpc_char_prestype isinstancer#decode)rvprocess_namespacery version_strr r r_glibc_version_string_ctypess"       rcCs tp tS)z9Returns glibc version string, or None if not using glibc.)rtrr r r r_glibc_version_stringsr)rrcCs@td|}|s$td|tdSt|dt|dfS)a3Parse glibc version. We use a regexp instead of str.split because we want to discard any random junk that might come after the minor version -- this might happen in patched/forked versions of glibc (e.g. Linaro's version of glibc uses version strings like "2.20-2014.11"). See gh-3588. z$(?P[0-9]+)\.(?P[0-9]+)z=Expected glibc version with 2 components major.minor, got: %srrhri)rematchwarningswarnRuntimeWarningr$group)rmr r r_parse_glibc_versions rcCst}|durdSt|S)Nr)rr)rr r r_get_glibc_versionsr)namerZrsrcCst}||krdSz ddl}Wnty2YdS0t|drh||d|d|}|durdt|SdS|tddkrt|drt|jS|tdd krt|d rt|jS|tdd krt|d rt|j SdS) NFrTmanylinux_compatiblerrmanylinux1_compatible manylinux2010_compatiblemanylinux2014_compatible) r _manylinuxrwhasattrrboolrgrrr)rrZrs sys_glibcrrr r r_is_compatibles,         r manylinux2014 manylinux2010 manylinux1))rr)rr)rr)linuxrZrc cst|s dStdd}|dvr(tdd}tt}|g}t|jdddD]}t|}|t||qJ|D]}|j|jkr|j}nd}t|j|dD]^}t|j|} dj| } t | || r| d| V| t vrt | } t | || r| d| VqqldS) Nr>r^r\rrzmanylinux_{}_{}r) rbrgrrangerhrfappendriformatrreplace_LEGACY_MANYLINUX_MAP) rrZtoo_old_glibc2 current_glibcglibc_max_list glibc_major glibc_minor glibc_max min_minor glibc_versiontag legacy_tagr r r platform_tags s.        r)# collections functoolsrlrrrOrtypingrrrrrrrrUrrXrYr#rb defaultdictrfr$rjrgrtrrr lru_cacherrrrr r r rs4  =   ,