Ë
    ˜šãjœœ  ã                   ó$  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, dd	l-m.Z.  ej^                  d
«      Z0 ej^                  dejb                  «      Z2 ej^                  d«      Z3 ej^                  dejb                  «      jh                  Z5djm                  «       Z7g d¢Z8dZ9dZ:e:jw                   djv                  ejx                  Ž e¬«      Z=d„ Z>d„ Z?d„ Z@d1d„ZAd1d„ZBd1d„ZCdedfd„ZDd„ ZE ej^                  dejb                  «      ZFeEd„ «       ZG G d„ d«      ZH G d „ d!eH«      ZI G d"„ d#e«      ZJ ej^                  d$«      j–                  ZLd%„ ZMd&„ ZNd2d'„ZOd(„ ZP G d)„ d*«      ZQ G d+„ d,ej¤                  «      ZSej¨                  jª                  fd-„ZVd.„ ZW  eOe9«      eV«      ZVd/„ ZXd0„ ZYy)3z#PyPI and direct package downloadingé    N©Úwraps)ÚCHECKOUT_DISTÚDistributionÚBINARY_DISTÚnormalize_pathÚSOURCE_DISTÚEnvironmentÚfind_distributionsÚ	safe_nameÚsafe_versionÚto_filenameÚRequirementÚDEVELOP_DISTÚEGG_DISTÚparse_version)Úlog)ÚDistutilsError)Ú	translate)ÚWheel©Úunique_everseenz^egg=([-A-Za-z0-9_.+!]+)$zhref\s*=\s*['"]?([^'"> ]+)zƒ<a href="([^"#]+)">([^<]+)</a>\n\s+\(<a (?:title="MD5 hash"\n\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)z([-+.a-z0-9]{2,}):z.tar.gz .tar.bz2 .tar .zip .tgz)ÚPackageIndexÚdistros_for_urlÚparse_bdist_wininstÚinterpret_distro_nameé   z<setuptools/{setuptools.__version__} Python-urllib/{py_major}z{}.{})Úpy_majorÚ
setuptoolsc                 ón   — 	 t        j                  | «      S # t        $ r}t        d| ›�«      |‚d }~ww xY w)Nz/Not a URL, existing file, or requirement spec: )r   ÚparseÚ
ValueErrorr   )ÚspecÚes     úc/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/setuptools/package_index.pyÚparse_requirement_argr&   6   s>   € ðÜ× Ñ  Ó&Ð&øÜò ÝÙCGÐIó
àð	ûðús   ‚ —	4 /¯4c                 ó8  — | j                  «       }d\  }}}|j                  d«      ro|j                  d«      r| dd }d}nV|j                  dd«      r| d	d
 }| dd }d}n7|j                  d«      r| dd }d}n|j                  dd«      r| d	d
 }| dd }d}|||fS )z=Return (base,pyversion) or (None,None) for possible .exe name)NNNú.exez
.win32.exeNiöÿÿÿÚwin32z	.win32-pyiðÿÿÿiùÿÿÿéüÿÿÿz.win-amd64.exeiòÿÿÿz	win-amd64z.win-amd64-pyiìÿÿÿ)ÚlowerÚendswithÚ
startswith)Únamer+   ÚbaseÚpy_verÚplats        r%   r   r   ?   sÃ   € ð �J‰J‹L€EØ)Ñ€Dˆ&�$à‡~�~�fÔØ�>‰>˜,Ô'Ø˜˜�:ˆDØ‰DØ×Ñ˜k¨3Ô/Ø˜"˜R�[ˆFØ˜˜�:ˆDØ‰DØ�^‰^Ð,Ô-Ø˜˜�:ˆDØ‰DØ×Ñ˜o¨sÔ3Ø˜"˜R�[ˆFØ˜˜�:ˆDØˆDØ�˜ÐÐó    c                 ód  — t         j                  j                  | «      }|\  }}}}}}t         j                  j                  |j	                  d«      d   «      }|dk(  r6|dk(  r1t         j                  j                  |j	                  d«      d   «      }d|v r|j	                  dd«      \  }}||fS )Nú/éÿÿÿÿzsourceforge.netÚdownloadéþÿÿÿú#é   )Úurllibr!   ÚurlparseÚunquoteÚsplit)	ÚurlÚpartsÚschemeÚserverÚpathÚ
parametersÚqueryÚfragmentr/   s	            r%   Úegg_info_for_urlrF   W   sŸ   € Ü�L‰L×!Ñ! #Ó&€EØ8=Ñ5€FˆF�D˜* e¨XÜ�<‰<×Ñ §
¡
¨3£°Ñ 3Ó4€DØÐ"Ò" t¨zÒ'9Ü�|‰|×#Ñ# D§J¡J¨s£O°BÑ$7Ó8ˆØ
ˆd�{ØŸ™ C¨Ó+‰ˆˆhØ�ˆ>Ðr2   c              #   óà   K  — t        | «      \  }}t        | ||«      D ]  }|–— Œ |rDt        j                  |«      }|r,t	        | |j                  d«      |t        ¬«      D ]  }|–— Œ yyy­w)zEYield egg or source distribution objects that might be found at a URLr9   )Ú
precedenceN)rF   Údistros_for_locationÚEGG_FRAGMENTÚmatchr   Úgroupr   )r>   Úmetadatar/   rE   ÚdistrK   s         r%   r   r   b   s}   è ø€ ä% cÓ*�N€Dˆ(Ü$ S¨$°Ó9ò ˆØ‹
ðáÜ×"Ñ" 8Ó,ˆÙÜ-Ø�U—[‘[ “^ X¼-ôò �ð “
ñð ð ùs   ‚A,A.c                 ó&  — |j                  d«      r|dd }|j                  d«      rd|v rt        j                  | ||«      gS |j                  d«      rLd|v rHt        |«      }|j	                  «       sg S t        | |j
                  |j                  t        dz   ¬«      gS |j                  d	«      r%t        |«      \  }}}|�t        | |||t        |«      S t        D ]1  }|j                  |«      sŒ|dt        |«        }t        | ||«      c S  g S )
z:Yield egg or source distribution objects based on basenameú.egg.zipNr*   z.eggú-z.whlr9   )ÚlocationÚproject_nameÚversionrH   r(   )r,   r   Úfrom_locationr   Úis_compatiblerS   rT   r   r   r   r   Ú
EXTENSIONSÚlen)rR   ÚbasenamerM   ÚwheelÚwin_baser0   ÚplatformÚexts           r%   rI   rI   p   s+  € à×Ñ˜Ô$Ø˜C˜R�=ˆØ×Ñ˜Ô  S¨H¡_ä×*Ñ*¨8°X¸xÓHÐIÐIØ×Ñ˜Ô  S¨H¡_Ü�h“ˆØ×"Ñ"Ô$ØˆIÜØØ×+Ñ+Ø—M‘Mä !‘|ô
ð ð 	ð ×Ñ˜Ô Ü%8¸Ó%BÑ"ˆ�&˜(ØÐÜ(Ø˜( H¨f´kÀ8óð ô
 ò GˆØ×Ñ˜SÕ!Ø 
¤# c£( Ð+ˆHÜ(¨°8¸XÓFÒFðGð €Ir2   c                 óh   — t        t        | «      t        j                  j	                  | «      |«      S )zEYield possible egg or source distribution objects based on a filename)rI   r   ÚosrB   rY   )ÚfilenamerM   s     r%   Údistros_for_filenamera   ‘   s*   € äÜ�xÓ ¤"§'¡'×"2Ñ"2°8Ó"<¸hóð r2   c              #   ó  K  — |j                  d«      }|st        d„ |dd D «       «      ryt        dt        |«      dz   «      D ]:  }t	        | |dj                  |d| «      dj                  ||d «      |||¬«      –— Œ< y­w)zØGenerate alternative interpretations of a source distro name

    Note: if `location` is a filesystem filename, you should call
    ``pkg_resources.normalize_path()`` on it before passing it to this
    routine!
    rQ   c              3   óH   K  — | ]  }t        j                  d |«      –— Œ y­w)z	py\d\.\d$N)ÚrerK   )Ú.0Úps     r%   ú	<genexpr>z(interpret_distro_name.<locals>.<genexpr>¯   s   è ø€ ÒK¸AœbŸh™h |°Q×7ÑKùs   ‚ "é   Nr9   )Ú
py_versionrH   r\   )r=   ÚanyÚrangerX   r   Újoin)rR   rY   rM   ri   rH   r\   r?   rf   s           r%   r   r   ˜   s‰   è ø€ ð, �N‰N˜3Ó€EÙœ#ÑKÀÀqÀrÀÔKÔKàä�1”c˜%“j 1‘nÓ%ò 
ˆÜØ�h §¡¨¨r°¨Ó 3°S·X±X¸eÀAÀB¸iÓ5HØ!¨jØô
ó 	
ñ
ùs   ‚B Bc                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )zs
    Wrap a function returning an iterable such that the resulting iterable
    only ever yields unique items.
    c                  ó&   •— t         ‰| i |¤Ž«      S ©Nr   )ÚargsÚkwargsÚfuncs     €r%   Úwrapperzunique_values.<locals>.wrapperÁ   s   ø€ ä™t TÐ4¨VÑ4Ó5Ð5r2   r   )rr   rs   s   ` r%   Úunique_valuesrt   »   s"   ø€ ô ˆ4ƒ[ó6ó ð6ð €Nr2   z(<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>c           
   #   ó‚  K  — t         j                  |«      D ]²  }|j                  «       \  }}t        t	        t
        j                  |j                  «       j                  d«      «      «      }d|v sd|v sŒ_t        j                  |«      D ]<  }t        j                  j                  | t        |j                  d«      «      «      –— Œ> Œ´ dD ]l  }|j                  |«      }|dk7  sŒt        j!                  ||«      }|sŒ3t        j                  j                  | t        |j                  d«      «      «      –— Œn y­w)zEFind rel="homepage" and rel="download" links in `page`, yielding URLsú,Úhomepager6   r9   )z<th>Home Pagez<th>Download URLr5   N)ÚRELÚfinditerÚgroupsÚsetÚmapÚstrÚstripr+   r=   ÚHREFr:   r!   ÚurljoinÚ
htmldecoderL   ÚfindÚsearch)r>   ÚpagerK   ÚtagÚrelÚrelsÚposs          r%   Úfind_external_linksr‰   Ì   s  è ø€ ô —‘˜dÓ#ò LˆØ—<‘<“>‰ˆˆSÜ”3”s—y‘y #§)¡)£+×"3Ñ"3°CÓ"8Ó9Ó:ˆØ˜Ñ ¨tÒ!3ÜŸ™ sÓ+ò L�Ü—l‘l×*Ñ*¨3´
¸5¿;¹;Àq»>Ó0JÓKÓKñLð	Lð 5ò LˆØ�i‰i˜‹nˆØ�"‹9Ü—K‘K  cÓ*ˆEÚÜ—l‘l×*Ñ*¨3´
¸5¿;¹;Àq»>Ó0JÓKÓKñLùs   ‚A4D?Á7A1D?Ã)D?Ä=D?c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚContentCheckerzP
    A null content checker that defines the interface for checking content
    c                  ó   — y)z3
        Feed a block of data to the hash.
        N© ©ÚselfÚblocks     r%   ÚfeedzContentChecker.feedä   s   € ð 	r2   c                  ó   — y)zC
        Check the hash. Return False if validation fails.
        Tr�   ©r�   s    r%   Úis_validzContentChecker.is_validê   s   € ð r2   c                  ó   — y)zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        Nr�   )r�   ÚreporterÚtemplates      r%   ÚreportzContentChecker.reportð   s   € ð
 	r2   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r‘   r”   r˜   r�   r2   r%   r‹   r‹   ß   s   „ ñòòór2   r‹   c                   óX   — e Zd Z ej                  d«      Zd„ Zed„ «       Zd„ Z	d„ Z
d„ Zy)ÚHashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)c                 óT   — || _         t        j                  |«      | _        || _        y ro   )Ú	hash_nameÚhashlibÚnewÚhashÚexpected)r�   r    r¤   s      r%   Ú__init__zHashChecker.__init__þ   s    € Ø"ˆŒÜ—K‘K 	Ó*ˆŒ	Ø ˆ�r2   c                 óØ   — t         j                  j                  |«      d   }|s
t        «       S | j                  j                  |«      }|s
t        «       S  | di |j                  «       ¤ŽS )z5Construct a (possibly null) ContentChecker from a URLr5   r�   )r:   r!   r;   r‹   Úpatternrƒ   Ú	groupdict)Úclsr>   rE   rK   s       r%   Úfrom_urlzHashChecker.from_url  s^   € ô —<‘<×(Ñ(¨Ó-¨bÑ1ˆÙÜ!Ó#Ð#Ø—‘×"Ñ" 8Ó,ˆÙÜ!Ó#Ð#ÙÑ'�U—_‘_Ó&Ñ'Ð'r2   c                 ó:   — | j                   j                  |«       y ro   )r£   ÚupdaterŽ   s     r%   r‘   zHashChecker.feed  s   € Ø�	‰	×Ñ˜Õr2   c                 óP   — | j                   j                  «       | j                  k(  S ro   )r£   Ú	hexdigestr¤   r“   s    r%   r”   zHashChecker.is_valid  s   € Ø�y‰y×"Ñ"Ó$¨¯©Ñ5Ð5r2   c                 ó0   — || j                   z  } ||«      S ro   )r    )r�   r–   r—   Úmsgs       r%   r˜   zHashChecker.report  s   € Ø˜Ÿ™Ñ'ˆÙ˜‹}Ðr2   N)r™   rš   r›   rd   Úcompiler§   r¥   Úclassmethodrª   r‘   r”   r˜   r�   r2   r%   rž   rž   ø   s?   „ Øˆb�j‰jð	#ó€Gò
!ð
 ñ(ó ð(ò ò6ór2   rž   c                   ó  ‡ — e Zd ZdZ	 	 d&d„Zˆ fd„Zd'd„Zd'd„Zd'd„Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd(d„Zd„ Zd(ˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 d)d„Zd*d„Zd„ ZdZd„ Zd„ Zd(d„Zd„ Zd„ Zd„ Zd„ Z d„ Z!e"d'd „«       Z#d!„ Z$d"„ Z%d#„ Z&d$„ Z'd%„ Z(ˆ xZ)S )+r   z;A distribution index that scans web pages for download URLsc                 óh  — t        j                  | g|¢­i |¤Ž |dd |j                  d«        z   | _        i | _        i | _        i | _        t        j                  dj                  t        t        |«      «      «      j                  | _        g | _        t        j                   j"                  | _        y )Nr4   ú|)r
   r¥   r,   Ú	index_urlÚscanned_urlsÚfetched_urlsÚpackage_pagesrd   r±   rl   r|   r   rK   ÚallowsÚto_scanr:   ÚrequestÚurlopenÚopener)r�   r¶   ÚhostsÚ	ca_bundleÚ
verify_sslrp   Úkws          r%   r¥   zPackageIndex.__init__  s”   € ô 	×Ñ˜TÐ/ DÒ/¨BÒ/Ø" SÐ*F¨y×/AÑ/AÀ#Ó/FÐ+FÐ%GÑGˆŒØˆÔØˆÔØˆÔÜ—j‘j §¡¬#¬i¸Ó*?Ó!@ÓA×GÑGˆŒØˆŒÜ—n‘n×,Ñ,ˆ�r2   c                 ól   •— 	 t        |j                  «       t        ‰| �  |«      S # t        $ r Y y w xY wro   )r   rT   Ú	ExceptionÚsuperÚadd)r�   rN   Ú	__class__s     €r%   rÆ   zPackageIndex.add)  s9   ø€ ð	Ü˜$Ÿ,™,Ô'ô ‰w‰{˜4Ó Ð øô ò 	Ùð	ús   ƒ' §	3²3c           	      óÈ  — || j                   v r|syd| j                   |<   t        |«      s| j                  |«       yt        t	        |«      «      }|r$| j                  |«      sy| j                  d|«       |s|r|| j                  v r t        t        | j                  |«      «       y| j                  |«      sd| j                  |<   y| j                  d|«       d| j                  |<   d}| j                  |||z  «      }|€yt        |t        j                  j                  «      r-|j                   dk(  r| j                  d|j"                  z  «       d| j                  |j$                  <   d|j&                  j)                  d	d
«      j+                  «       vr|j-                  «        y|j$                  }|j/                  «       }t        |t0        «      sXt        |t        j                  j                  «      rd}n|j&                  j3                  d«      xs d}|j5                  |d«      }|j-                  «        t6        j9                  |«      D ]K  }	t        j:                  j=                  |t?        |	jA                  d«      «      «      }
| jC                  |
«       ŒM |jE                  | jF                  «      r$tI        |dd«      dk7  r| jK                  ||«      }yyy)z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!i‘  zAuthentication error: %sÚhtmlúcontent-typeÚ zlatin-1ÚcharsetÚignorer9   Úcodeé”  )&r·   Ú
URL_SCHEMEÚprocess_filenameÚlistr   Úurl_okÚdebugr¸   r|   rÆ   ÚinfoÚopen_urlÚ
isinstancer:   ÚerrorÚ	HTTPErrorrÎ   r°   r>   ÚheadersÚgetr+   ÚcloseÚreadr}   Ú	get_paramÚdecoder   ry   r!   r€   r�   rL   Úprocess_urlr-   r¶   ÚgetattrÚprocess_index)r�   r>   ÚretrieveÚdistsÚtmplÚfr/   r„   rÌ   rK   Úlinks              r%   rà   zPackageIndex.process_url2  sV  € à�$×#Ñ#Ñ#©HØØ!%ˆ×Ñ˜#ÑÜ˜#ŒØ×!Ñ! #Ô&Øäœ¨Ó-Ó.ˆEÙØ—{‘{ 3Ô'ØØ—
‘
Ð+¨SÔ1á™ C¨4×+<Ñ+<Ñ$<Ü”�T—X‘X˜uÓ%Ô&Øà�{‰{˜3ÔØ%)ˆD×Ñ˜cÑ"Øà�	‰	�, Ô$Ø!%ˆ×Ñ˜#ÑØMˆØ�M‰M˜#˜t c™zÓ*ˆØˆ9ØÜ�aœŸ™×/Ñ/Ô0°Q·V±V¸s²]Ø�I‰IÐ0°1·5±5Ñ8Ô9Ø#'ˆ×Ñ˜!Ÿ%™%Ñ Ø˜Ÿ™Ÿ™ ~°rÓ:×@Ñ@ÓBÑBØ�G‰GŒIØà�u‰uˆØ�v‰v‹xˆÜ˜$¤Ô$ä˜!œVŸ\™\×3Ñ3Ô4à#‘àŸ)™)×-Ñ-¨iÓ8ÒE¸I�Ø—;‘;˜w¨Ó1ˆDØ	�‰Œ	Ü—]‘] 4Ó(ò 	#ˆEÜ—<‘<×'Ñ'¨¬j¸¿¹ÀQ»Ó.HÓIˆDØ×Ñ˜TÕ"ð	#ð �>‰>˜$Ÿ.™.Ô)¬g°a¸ÀÓ.FÈ#Ò.MØ×%Ñ% c¨4Ó0‰Dð /NÐ)r2   c                 óú  — t         j                  j                  |«      s| j                  d|«       y t         j                  j	                  |«      rk|sit         j                  j                  |«      }t        j                  |«      D ]2  }| j                  t         j                  j                  ||«      d«       Œ4 t        |«      }|r2| j                  d|«       t        t        | j                  |«      «       y y )NzNot found: %sTz	Found: %s)r_   rB   ÚexistsÚwarnÚisdirÚrealpathÚlistdirrÑ   rl   ra   rÔ   rÒ   r|   rÆ   )r�   ÚfnÚnestedrB   Úitemrä   s         r%   rÑ   zPackageIndex.process_filenameg  s·   € ä�w‰w�~‰~˜bÔ!Ø�I‰I�o rÔ*Øä�7‰7�=‰=˜Ô¡VÜ—7‘7×#Ñ# BÓ'ˆDÜŸ
™
 4Ó(ò F�Ø×%Ñ%¤b§g¡g§l¡l°4¸Ó&>ÀÕEðFô % RÓ(ˆÙØ�J‰J�{ BÔ'Ü”�T—X‘X˜uÓ%Õ&ð r2   c                 ó  — t        |«      }|xr" |j                  d«      j                  «       dk(  }|s1| j                  t        j
                  j                  |«      d   «      ryd}|rt        ||z  «      ‚| j                  ||«       y )Nr9   ÚfileTzN
Note: Bypassing %s (disallowed host; see http://bit.ly/2hrImnY for details).
)	rÐ   rL   r+   rº   r:   r!   r;   r   rê   )r�   r>   ÚfatalÚsÚis_filer°   s         r%   rÓ   zPackageIndex.url_okw  s|   € Ü�s‹OˆØÒ4˜Ÿ™ ›
×(Ñ(Ó*¨fÑ4ˆÙ�d—k‘k¤&§,¡,×"7Ñ"7¸Ó"<¸QÑ"?Ô@Øð4ð 	ñ Ü   s¡Ó+Ð+à�I‰I�c˜3Õr2   c                 ó°   — t        t        j                  j                  |«      }d„ |D «       }t	        t        j                  | j                  |«      «       y )Nc              3   óz   K  — | ]3  }t        j                  |«      D ]  }|j                  d «      r||f–— Œ Œ5 y­w)z	.egg-linkN)r_   rí   r,   )re   rB   Úentrys      r%   rg   z.PackageIndex.scan_egg_links.<locals>.<genexpr>†  sF   è ø€ ò 
àÜŸ™ DÓ)ò
ð Ø�~‰~˜kÔ*ð �5ŒMð
Øñ
ùs   ‚9;)Úfilterr_   rB   rë   rÒ   Ú	itertoolsÚstarmapÚscan_egg_link)r�   Úsearch_pathÚdirsÚ	egg_linkss       r%   Úscan_egg_linkszPackageIndex.scan_egg_links„  sB   € Ü”b—g‘g—m‘m [Ó1ˆñ
àô
ˆ	ô 	ŒY×Ñ˜t×1Ñ1°9Ó=Õ>r2   c           
      óà  — t        t        j                  j                  ||«      «      5 }t	        t        d t        t        j                  |«      «      «      }d d d «       t        «      dk7  ry |\  }}t        t        j                  j                  ||«      «      D ]C  }t        j                  j                  |g|¢­Ž |_        t        |_        | j                  |«       ŒE y # 1 sw Y   Œ�xY w)Nrh   )Úopenr_   rB   rl   rÒ   rù   r|   r}   r~   rX   r   rR   r	   rH   rÆ   )r�   rB   rø   Ú	raw_linesÚlinesÚegg_pathÚ
setup_pathrN   s           r%   rü   zPackageIndex.scan_egg_linkŽ  s¸   € Ü”"—'‘'—,‘,˜t UÓ+Ó,ð 	B°	äœ ¤c¬#¯)©)°YÓ&?Ó@ÓAˆE÷	Bô ˆu‹:˜Š?àà$Ñˆ�*ä&¤r§w¡w§|¡|°D¸(Ó'CÓDò 	ˆDÜŸG™GŸL™L¨Ð6°Ò6ˆDŒMÜ)ˆDŒOØ�H‰H�T�Nñ	÷	Bð 	Bús   ª.C$Ã$C-c           	      óÐ  — d}|j                  | j                  «      s|S t        t        t        j
                  j                  |t        | j                  «      d  j                  d«      «      «      }t        |«      dk7  sd|d   v r|S t        |d   «      }t        |d   «      }d| j                  j                  |j                  «       i «      |<   t        |«      t        |«      fS )N)NNr4   rh   r8   r9   r   T)r-   r¶   rÒ   r|   r:   r!   r<   rX   r=   r   r   r¹   Ú
setdefaultr+   r   )r�   rç   ÚNO_MATCH_SENTINELr?   ÚpkgÚvers         r%   Ú_scanzPackageIndex._scanž  sÍ   € à&ÐØ�‰˜tŸ~™~Ô.Ø$Ð$ä”SÜ�L‰L× Ñ  $¤s¨4¯>©>Ó':Ð';Ð"<×"BÑ"BÀ3Ó"Gó
ó ˆô ˆu‹:˜Š?˜c U¨1¡X™oØ$Ð$ô ˜˜a™Ó!ˆÜ˜5 ™8Ó$ˆØ?Cˆ×Ñ×%Ñ% c§i¡i£k°2Ó6°tÑ<Ü˜3Ó¤¨SÓ!1Ð1Ð1r2   c                 ó  — t         j                  |«      D ]J  }	 | j                  t        j                  j                  |t        |j                  d«      «      «      «       ŒL | j                  |«      \  }}|syt        ||«      D ]S  }t        |«      \  }}|j                  d«      r!|s|r|d|›d|›�z  }n| j                  |«       | j                  |«       ŒU t        j                  d„ |«      S # t        $ r Y Œèw xY w)z#Process the contents of a PyPI pager9   rË   ú.pyz#egg=rQ   c                 ó.   — d| j                  ddd«      z  S )Nz<a href="%s#md5=%s">%s</a>r9   é   rh   )rL   )Úms    r%   ú<lambda>z,PackageIndex.process_index.<locals>.<lambda>Ê  s   € Ð2°Q·W±W¸QÀÀ1Ó5EÑE€ r2   )r   ry   r  r:   r!   r€   r�   rL   r"   r‰   rF   r,   Úneed_version_infoÚscan_urlÚPYPI_MD5Úsub)	r�   r>   r„   rK   r
  r  Únew_urlr/   Úfrags	            r%   râ   zPackageIndex.process_index°  sð   € ô —]‘] 4Ó(ò 	ˆEðØ—
‘
œ6Ÿ<™<×/Ñ/°´ZÀÇÁÈAÃÓ5OÓPÕQð	ð —:‘:˜c“?‰ˆˆSÙØô +¨3°Ó5ò 	#ˆGä)¨'Ó2‰JˆD�$Ø�}‰}˜UÔ#©DÙÙªs±CÐ8Ñ8‘Gà×*Ñ*¨3Ô/Ø�M‰M˜'Õ"ð	#ô �|‰|ÙEÀtó
ð 	
øô% ò Ùðús   šAC3Ã3	C?Ã>C?c                 ó(   — | j                  d|«       y )NzPPage at %s links to .py file(s) without version info; an index scan is required.)Úscan_all©r�   r>   s     r%   r  zPackageIndex.need_version_infoÍ  s   € Ø�‰ð Ø!$õ	
r2   c                 ó¶   — | j                   | j                  vr&|r | j                  |g|¢­Ž  | j                  d«       | j	                  | j                   «       y )Nz6Scanning index of all packages (this may take a while))r¶   r¸   rê   rÕ   r  ©r�   r°   rp   s      r%   r  zPackageIndex.scan_allÓ  sK   € Ø�>‰> ×!2Ñ!2Ñ2ÙØ�—	‘	˜#Ð% Ó%Ø�I‰IØHôð 	�‰�d—n‘nÕ%r2   c                 óð  — | j                  | j                  |j                  z   dz   «       | j                  j	                  |j
                  «      s+| j                  | j                  |j                  z   dz   «       | j                  j	                  |j
                  «      s| j                  |«       t        | j                  j	                  |j
                  d«      «      D ]  }| j                  |«       Œ y )Nr4   r�   )	r  r¶   Úunsafe_namer¹   rÛ   ÚkeyrS   Únot_found_in_indexrÒ   )r�   Úrequirementr>   s      r%   Úfind_packageszPackageIndex.find_packagesÜ  s·   € Ø�‰�d—n‘n {×'>Ñ'>Ñ>ÀÑDÔEà×!Ñ!×%Ñ% k§o¡oÔ6à�M‰M˜$Ÿ.™.¨;×+CÑ+CÑCÀcÑIÔJà×!Ñ!×%Ñ% k§o¡oÔ6à×#Ñ# KÔ0ä˜×*Ñ*×.Ñ.¨{¯©ÀÓCÓDò 	ˆCà�M‰M˜#Õñ	r2   c                 óÌ   •— | j                  «        | j                  |«       | |j                     D ]  }||v r|c S | j                  d||«       Œ t        t
        | �  ||«      S )Nz%s does not match %s)Úprescanr#  r   rÔ   rÅ   r   Úobtain)r�   r"  Ú	installerrN   rÇ   s       €r%   r&  zPackageIndex.obtainë  sh   ø€ Ø�‰ŒØ×Ñ˜;Ô'Ø˜Ÿ™Ñ)ò 	BˆDØ�{Ñ"Ø’Ø�J‰JÐ-¨{¸DÕAð	Bô ”\ 4Ñ/°¸YÓGÐGr2   c                 ó0  — |j                  | j                  d|z  «       |j                  «       sg|j                  «        t	        j
                  |«       t        |j                  j                  ›dt        j                  j                  |«      ›d�«      ‚y)z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz validation failed for z; possible download problem?N)r˜   rÔ   r”   rÜ   r_   Úunlinkr   r£   r.   rB   rY   )r�   Úcheckerr`   Útfps       r%   Ú
check_hashzPackageIndex.check_hashô  sz   € ð 	�‰Ø�J‰JØ,¨xÑ7ô	9ð ×ÑÔ!Ø�I‰IŒKÜ�I‰I�hÔÜ ð —<‘<×$Ó$¤b§g¡g×&6Ñ&6°xÕ&@ðBóð ð "r2   c                 óä   — |D ]k  }| j                   �0t        |«      r%|j                  d«      st        t	        |«      «      r| j                  |«       ŒQ| j                   j                  |«       Œm y)z;Add `urls` to the list that will be prescanned for searchesNúfile:)r»   rÐ   r-   rÒ   r   r  Úappend)r�   Úurlsr>   s      r%   Úadd_find_linkszPackageIndex.add_find_links  s]   € àò 	)ˆCà—‘Ð$Ü! #”Ø—>‘> 'Ô*Üœ¨Ó,Ô-ð —‘˜cÕ"ð —‘×#Ñ# CÕ(ñ	)r2   c                 ó|   — | j                   r)t        t        | j                  | j                   «      «       d| _         y)z7Scan urls scheduled for prescanning (e.g. --find-links)N)r»   rÒ   r|   r  r“   s    r%   r%  zPackageIndex.prescan  s'   € à�<Š<Ü”�T—]‘] D§L¡LÓ1Ô2Øˆ�r2   c                 ó¢   — | |j                      r| j                  d}}n| j                  d}} |||j                  «       | j	                  «        y )Nz#Couldn't retrieve index page for %rz3Couldn't find index page for %r (maybe misspelled?))r   rÕ   rê   r  r  )r�   r"  Úmethr°   s       r%   r!  zPackageIndex.not_found_in_index  sJ   € Ø�—‘Ò ØŸ	™	Ð#H�#‰Dð —	‘	ØEð ˆDñ 	ˆS�+×)Ñ)Ô*Ø�‰�r2   c                 óz  — t        |t        «      s�t        |«      }|rV| j                  |j	                  d«      ||«      }t        |«      \  }}|j                  d«      r| j                  |||«      }|S t        j                  j                  |«      r|S t        |«      }t        | j                  ||«      dd«      S )a  Locate and/or download `spec` to `tmpdir`, returning a local path

        `spec` may be a ``Requirement`` object, or a string containing a URL,
        an existing local filename, or a project/version requirement spec
        (i.e. the string form of a ``Requirement`` object).  If it is the URL
        of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one
        that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is
        automatically created alongside the downloaded file.

        If `spec` is a ``Requirement`` object or a string containing a
        project/version requirement spec, this method returns the location of
        a matching distribution (possibly after downloading it to `tmpdir`).
        If `spec` is a locally existing file or directory name, it is simply
        returned unchanged.  If `spec` is a URL, it is downloaded to a subpath
        of `tmpdir`, and the local filename is returned.  Various errors may be
        raised if a problem occurs during downloading.
        r9   r  rR   N)r×   r   rÐ   Ú_download_urlrL   rF   r,   Ú	gen_setupr_   rB   ré   r&   rá   Úfetch_distribution)r�   r#   Útmpdirr@   Úfoundr/   rE   s          r%   r6   zPackageIndex.download#  s£   € ô$ ˜$¤Ô,Ü Ó%ˆFÙà×*Ñ*¨6¯<©<¸«?¸DÀ&ÓI�Ü!1°$Ó!7‘��hØ—=‘= Ô'Ø ŸN™N¨5°(¸FÓC�EØ�Ü—‘—‘ Ô%à�ä,¨TÓ2�Ü�t×.Ñ.¨t°VÓ<¸jÈ$ÓOÐOr2   c                 óÚ  ‡ ‡‡‡‡	— ‰ j                  d|«       i Š	d}d	ˆˆ ˆ	ˆˆfd„	}|r)‰ j                  «        ‰ j                  |«        ||«      }|s|�	 |||«      }|€$‰ j                  �‰ j                  «         ||«      }|€|s‰ j                  |«        ||«      }|€‰ j	                  d‰xr dxs d|«       y‰ j                  d|«       |j                  |j                  ¬«      S )
a|  Obtain a distribution suitable for fulfilling `requirement`

        `requirement` must be a ``pkg_resources.Requirement`` instance.
        If necessary, or if the `force_scan` flag is set, the requirement is
        searched for in the (online) package index as well as the locally
        installed packages.  If a distribution matching `requirement` is found,
        the returned distribution's ``location`` is the value you would have
        gotten from calling the ``download()`` method with the matching
        distribution's URL or filename.  If no matching distribution is found,
        ``None`` is returned.

        If the `source` flag is set, only source distributions and source
        checkout links will be considered.  Unless the `develop_ok` flag is
        set, development and system eggs (i.e., those using the ``.egg-info``
        format) will be ignored.
        zSearching for %sNc                 óz  •— |€‰}|| j                      D ]¤  }|j                  t        k(  r‰s|‰vr‰j                  d|«       d‰|<   Œ4|| v xr |j                  t        k  xs ‰ }|sŒU‰j                  |j                  ‰	«      }||_        t        j                  j                  |j                  «      sŒ¢|c S  y )Nz&Skipping development or system egg: %sr9   )r   rH   r   rê   r	   r6   rR   Údownload_locationr_   rB   ré   )
ÚreqÚenvrN   ÚtestÚlocÚ
develop_okr�   ÚskippedÚsourcer9  s
        €€€€€r%   r‚   z-PackageIndex.fetch_distribution.<locals>.find]  s¾   ø€ Øˆ{Ø�ð ˜CŸG™G™ò $�à—?‘?¤lÒ2¹:Ø 7Ñ*ØŸ	™	ØDÀdôð )*˜ ™Øð ˜C�Kò GØŸ™¬KÑ7ÒE¸v¸:ð ò ØŸ-™-¨¯©°vÓ>�CØ-0�DÔ*Ü—w‘w—~‘~ d×&<Ñ&<Õ=Ø#šñ%$r2   z:No local packages or working download links found for %s%sza source distribution of rË   zBest match: %s)rR   ro   )rÕ   r%  r#  r»   rê   Úcloner=  )
r�   r"  r9  Ú
force_scanrD  rB  Úlocal_indexrN   r‚   rC  s
   ` ` ``   @r%   r8  zPackageIndex.fetch_distributionE  sð   ü€ ð( 	�	‰	Ð$ kÔ2ØˆØˆ÷	$ñ 	$ñ2 Ø�L‰LŒNØ×Ñ˜{Ô+Ù˜Ó$ˆDá˜Ð/Ù˜ [Ó1ˆDàˆ<Ø�|‰|Ð'Ø—‘”Ù˜Ó$ˆDàˆ<¡
Ø×Ñ˜{Ô+Ù˜Ó$ˆDàˆ<Ø�I‰IØLØÒ7Ð7Ò=¸2Øõð �I‰IÐ&¨Ô-Ø—:‘: t×'=Ñ'=�:Ó>Ð>r2   c                 óH   — | j                  ||||«      }|�|j                  S y)a3  Obtain a file suitable for fulfilling `requirement`

        DEPRECATED; use the ``fetch_distribution()`` method now instead.  For
        backward compatibility, this routine is identical but returns the
        ``location`` of the downloaded distribution instead of a distribution
        object.
        N)r8  rR   )r�   r"  r9  rF  rD  rN   s         r%   ÚfetchzPackageIndex.fetch‘  s-   € ð ×&Ñ& {°F¸JÈÓOˆØÐØ—=‘=Ð Ør2   c                 óJ  — t         j                  |«      }|xr6 t        ||j                  d«      d «      D �cg c]  }|j                  r|‘Œ c}xs g }t        |«      dk(  �rt        j                  j                  |«      }t        j                  j                  |«      |k7  rGt        j                  j                  ||«      }ddlm}	  |	||«      st        j                  ||«       |}t        t        j                  j                  |d«      d«      5 }
|
j!                  d|d   j"                  ›d|d   j                  ›dt        j                  j%                  |«      d   ›d	�«       d d d «       |S |rt'        d
|›d|›�«      ‚t'        d«      ‚c c}w # 1 sw Y   |S xY w)Nr9   r   )Úsamefilezsetup.pyÚwz(from setuptools import setup
setup(name=z
, version=z, py_modules=[z])
z9Can't unambiguously interpret project/version identifier zI; any dashes in the name or version should be escaped using underscores. zpCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.)rJ   rK   r   rL   rT   rX   r_   rB   rY   Údirnamerl   Úsetuptools.command.easy_installrK  ÚshutilÚcopy2r  ÚwriterS   Úsplitextr   )r�   r`   rE   r9  rK   Údrä   rY   ÚdstrK  rò   s              r%   r7  zPackageIndex.gen_setupž  sv  € Ü×"Ñ" 8Ó,ˆØò 
ä! (¨E¯K©K¸«N¸DÓAö
ØØEFÇYÂYò ò
ò ð ð 	ô
 ˆu‹:˜‹?Ü—w‘w×'Ñ'¨Ó1ˆHô �w‰w�‰˜xÓ(¨FÒ2Ü—g‘g—l‘l 6¨8Ó4�ÝDÙ ¨#Ô.Ü—L‘L ¨3Ô/Ø"�Hä”b—g‘g—l‘l 6¨:Ó6¸Ó<ð ÀØ—
’
ð ˜a™×-Ó-¨u°Q©x×/?Ó/?ÜŸ™×(Ñ(¨Ó2°1Ó5ð	ô÷ð ˆOáÝ ò &.©uð6óð ô !ðGóð ùòE
÷ ð ˆOús   ¸FÄAFÆF"i    c                 ó>  — | j                  d|«       d }	 t        j                  |«      }| j                  |«      }t	        |t
        j                  j                  «      r(t        d|›d|j                  ›d|j                  ›�«      ‚|j                  «       }d}| j                  }d}d|v r?|j                  d«      }	t        t        t        |	«      «      }| j!                  |||||«       t#        |d	«      5 }
	 |j%                  |«      }|r=|j'                  |«       |
j)                  |«       |d
z  }| j!                  |||||«       nnŒR| j+                  |||
«       d d d «       ||r|j-                  «        S S # 1 sw Y   ŒxY w# |r|j-                  «        w w xY w)NzDownloading %szCan't download ú: ú r   r5   zcontent-lengthzContent-LengthÚwbr9   )rÕ   rž   rª   rÖ   r×   r:   rØ   rÙ   r   rÎ   r°   Údl_blocksizeÚget_allÚmaxr|   ÚintÚ
reporthookr  rÝ   r‘   rQ  r,  rÜ   )r�   r>   r`   Úfpr*  rÚ   ÚblocknumÚbsÚsizeÚsizesr+  r�   s               r%   Ú_download_tozPackageIndex._download_toÉ  sv  € Ø�	‰	Ð" CÔ(àˆð	Ü!×*Ñ*¨3Ó/ˆGØ—‘˜sÓ#ˆBÜ˜"œfŸl™l×4Ñ4Ô5Ý$Ú25°r·w³wÀÇÂÐGóð ð —g‘g“iˆGØˆHØ×"Ñ"ˆBØˆDØ 7Ñ*àŸ™Ð(8Ó9�Üœ3œs E›?Ó+�Ø—‘  X¨x¸¸TÔBÜ�h Ó%ð 
8¨ØØŸG™G B›K�EÙØŸ™ UÔ+ØŸ	™	 %Ô(Ø  A™˜ØŸ™¨¨X°xÀÀTÕJàð ð —‘ ¨°3Ô7÷
8ð áØ—‘•
ð ÷
8ð 
8ûñ Ø—‘•
ð ús%   –C!F Ã7A'E;Å	F Å;FÆ F ÆFc                  ó   — y ro   r�   )r�   r>   r`   r_  Úblksizera  s         r%   r]  zPackageIndex.reporthookí  s   € Ør2   c           	      ó  — |j                  d«      rt        |«      S 	 t        || j                  «      S # t        t
        j                  j                  f$ rh}dj                  |j                  D �cg c]  }t        |«      ‘Œ nc c}w c}«      }|r| j                  ||«       nt        |›d|›�«      |‚Y d }~y d }~wt        j                  j                  $ r}|cY d }~S d }~wt        j                  j                   $ rE}|r| j                  ||j"                  «       nt        d|›d|j"                  ›�«      |‚Y d }~y d }~wt
        j                  j$                  $ rD}|r| j                  ||j&                  «       nt        |›d|j&                  ›�«      |‚Y d }~y d }~wt
        j                  j(                  t*        j                  f$ r1}|r| j                  ||«       nt        d|›d|›�«      |‚Y d }~y d }~ww xY w)Nr.  rW  zDownload error for rV  z7 returned a bad status line. The server might be down, )r-   Ú
local_openÚopen_with_authr¾   r"   ÚhttpÚclientÚ
InvalidURLrl   rp   r}   rê   r   r:   rØ   rÙ   ÚURLErrorÚreasonÚBadStatusLineÚlineÚHTTPExceptionÚsocket)r�   r>   ÚwarningÚvÚargr°   s         r%   rÖ   zPackageIndex.open_urlñ  sž  € Ø�>‰>˜'Ô"Ü˜c“?Ð"ð	8Ü! # t§{¡{Ó3Ð3øÜœDŸK™K×2Ñ2Ð3ò 	BØ—(‘(°·±Ö7¨œC �HÑ7ùÔ7Ó8ˆCÙØ—	‘	˜' 3Õ'ä$²±SÐ%9Ó:ÀÐAô (ûô �|‰|×%Ñ%ò 	Ø�HûÜ�|‰|×$Ñ$ò 	?ÙØ—	‘	˜' 1§8¡8Õ,å$Ú(+¨Q¯XªXð&7ó 8Ø=>ð?ô -ûô �{‰{×(Ñ(ò 	ÙØ—	‘	˜' 1§6¡6Õ*ä$ò ˜!Ÿ&š&ð"óð ð	ô +ûô —‘×)Ñ)¬6¯<©<Ð8ò 	8ÙØ—	‘	˜' 1Õ%å$Ú(+©Qð&0ó 1Ø67ð8ô &ûð	8úsW   ž4 ´#HÁB:Á0B
Â3B:Â: HÃC!ÃHÃ! HÄ;EÅ HÅ!:F Æ 0HÇ'G<Ç<Hc                 ó   — t        |«      \  }}|r,d|v r*|j                  dd«      j                  dd«      }d|v rŒ'nd}|j                  d«      r|d d }t        j                  j                  ||«      }|dk(  s|j                  d	«      r| j                  ||«      S |d
k(  s|j                  d«      r| j                  ||«      S |j                  d«      r| j                  ||«      S |dk(  r?t        j                  j                  t        j                  j                  |«      d   «      S | j                  |d«       | j!                  ||«      S )Nz..ú.ú\Ú_Ú__downloaded__rP   r*   Úsvnzsvn+Úgitzgit+zhg+rò   rh   T)rF   Úreplacer,   r_   rB   rl   r-   Ú_download_svnÚ_download_gitÚ_download_hgr:   r¼   Úurl2pathnamer!   r;   rÓ   Ú_attempt_download)r�   r@   r>   r9  r.   rE   r`   s          r%   r6  zPackageIndex._download_url  s7  € ô *¨#Ó.‰ˆˆhÙØ˜$‘,Ø—|‘| D¨#Ó.×6Ñ6°t¸SÓA�ð ˜$“,ð $ˆDà�=‰=˜Ô$Ø˜˜�9ˆDä—7‘7—<‘< ¨Ó-ˆð �UŠ?˜f×/Ñ/°Ô7Ø×%Ñ% c¨8Ó4Ð4Ø�uŠ_ × 1Ñ 1°&Ô 9Ø×%Ñ% c¨8Ó4Ð4Ø×Ñ˜uÔ%Ø×$Ñ$ S¨(Ó3Ð3Ø�vÒÜ—>‘>×.Ñ.¬v¯|©|×/DÑ/DÀSÓ/IÈ!Ñ/LÓMÐMà�K‰K˜˜TÔ"Ø×)Ñ)¨#¨xÓ8Ð8r2   c                 ó(   — | j                  |d«       y )NT)rà   r  s     r%   r  zPackageIndex.scan_url1  s   € Ø×Ñ˜˜dÕ#r2   c                 ó”   — | j                  ||«      }d|j                  dd«      j                  «       v r| j                  |||«      S |S )NrÉ   rÊ   rË   )rc  rÛ   r+   Ú_download_html)r�   r>   r`   rÚ   s       r%   r�  zPackageIndex._attempt_download4  sJ   € Ø×#Ñ# C¨Ó2ˆØ�W—[‘[ °Ó4×:Ñ:Ó<Ñ<Ø×&Ñ& s¨G°XÓ>Ð>àˆOr2   c                 óN  — t        |«      }|D ]c  }|j                  «       sŒt        j                  d|«      r9|j	                  «        t        j                  |«       | j                  ||«      c S  n |j	                  «        t        j                  |«       t        d|z   «      ‚)Nz <title>([^- ]+ - )?Revision \d+:zUnexpected HTML page found at )	r  r~   rd   rƒ   rÜ   r_   r)  r}  r   )r�   r>   rÚ   r`   rò   ro  s         r%   r„  zPackageIndex._download_html;  s…   € Ü�H‹~ˆØò 	ˆDØ�z‰z�|ä—9‘9Ð@À$ÔGà—J‘J”LÜ—I‘I˜hÔ'Ø×-Ñ-¨c°8Ó<Ò<Ùð	ð 	�
‰
ŒÜ
�	‰	�(ÔÜÐ=ÀÑCÓDÐDr2   c                 ó€  — t        j                  dt        «       |j                  dd«      d   }d}|j	                  «       j                  d«      r¼d|v r¸t        j                  j                  |«      \  }}}}}}	|s�|j                  d«      rd	|d
d  v rx|d
d  j                  d	d«      \  }}t        |«      \  }
}|
rPd|
v r|
j                  dd«      \  }}d|›d|›�}nd|
z   }|}||||||	f}t        j                  j                  |«      }| j                  d||«       t        j                  d|›d|›d|›�«       |S )Nz"SVN download support is deprecatedr8   r9   r   rË   zsvn:ú@z//r4   rh   ú:z --username=z --password=z'Doing subversion checkout from %s to %szsvn checkoutz -q rW  )Úwarningsrê   ÚUserWarningr=   r+   r-   r:   r!   r;   Ú
_splituserÚ
urlunparserÕ   r_   Úsystem)r�   r>   r`   Úcredsr@   ÚnetlocrB   rf   Úqræ   ÚauthÚhostÚuserÚpwr?   s                  r%   r}  zPackageIndex._download_svnJ  s.  € Ü�‰Ð:¼KÔHØ�i‰i˜˜QÓ Ñ"ˆØˆØ�9‰9‹;×!Ñ! &Ô)¨c°S©jÜ,2¯L©L×,AÑ,AÀ#Ó,FÑ)ˆF�F˜D ! Q¨Ù˜dŸo™o¨dÔ3¸¸tÀAÀB¸x¹Ø# A B˜xŸ~™~¨c°1Ó5‘�˜Ü'¨Ó/‘
��dÙØ˜d‘{Ø#'§:¡:¨c°1Ó#5™˜™bÚBFÉÐ K™à .°Ñ 5˜Ø!�FØ" F¨C°°A°qÐ8�EÜ Ÿ,™,×1Ñ1°%Ó8�CØ�	‰	Ð;¸SÀ(ÔKÜ
�	Š	ªu²c¹8ÐDÔEØˆr2   c                 ó&  — t         j                  j                  | «      \  }}}}}|j                  dd«      d   }|j                  dd«      d   }d }d|v r|j	                  dd«      \  }}t         j                  j                  ||||df«      } | |fS )Nú+r9   r5   r8   r   r‡  rË   )r:   r!   Úurlsplitr=   ÚrsplitÚ
urlunsplit)r>   Ú
pop_prefixr@   r�  rB   rD   r  Úrevs           r%   Ú_vcs_split_rev_from_urlz$PackageIndex._vcs_split_rev_from_url`  s—   € ä,2¯L©L×,AÑ,AÀ#Ó,FÑ)ˆ�˜˜e Tà—‘˜c 1Ó% bÑ)ˆð �z‰z˜#˜qÓ! !Ñ$ˆàˆØ�$‰;ØŸ™ C¨Ó+‰IˆD�#ô �l‰l×%Ñ% v¨v°t¸UÀBÐ&GÓHˆà�Cˆxˆr2   c                 ó  — |j                  dd«      d   }| j                  |d¬«      \  }}| j                  d||«       t        j                  d|›d|›�«       |�-| j                  d	|«       t        j                  d
|›d|›�«       |S )Nr8   r9   r   T©rš  zDoing git clone from %s to %szgit clone --quiet rW  zChecking out %szgit -C z checkout --quiet ©r=   rœ  rÕ   r_   r�  ©r�   r>   r`   r›  s       r%   r~  zPackageIndex._download_gitr  s„   € Ø—>‘> # qÓ)¨!Ñ,ˆØ×/Ñ/°ÀÐ/ÓE‰ˆˆSà�	‰	Ð1°3¸ÔAÜ
�	Š	ªs±HÐ=Ô>àˆ?Ø�I‰IÐ'¨Ô-Ü�IŠIÚÙðô ð
 ˆr2   c                 ó  — |j                  dd«      d   }| j                  |d¬«      \  }}| j                  d||«       t        j                  d|›d|›�«       |�.| j                  d	|«       t        j                  d
|›d|›d�«       |S )Nr8   r9   r   Trž  zDoing hg clone from %s to %szhg clone --quiet rW  zUpdating to %sz	hg --cwd z
 up -C -r z -qrŸ  r   s       r%   r  zPackageIndex._download_hg‚  s„   € Ø—>‘> # qÓ)¨!Ñ,ˆØ×/Ñ/°ÀÐ/ÓE‰ˆˆSà�	‰	Ð0°#°xÔ@Ü
�	Š	ªc±8Ð<Ô=àˆ?Ø�I‰IÐ&¨Ô,Ü�IŠIÚÚðô ð
 ˆr2   c                 ó0   — t        j                  |g|¢­Ž  y ro   )r   rÔ   r  s      r%   rÔ   zPackageIndex.debug’  s   € Ü�	‰	�#Ð˜Ôr2   c                 ó0   — t        j                  |g|¢­Ž  y ro   )r   rÕ   r  s      r%   rÕ   zPackageIndex.info•  ó   € Ü�‰�Ð�tÔr2   c                 ó0   — t        j                  |g|¢­Ž  y ro   )r   rê   r  s      r%   rê   zPackageIndex.warn˜  r¤  r2   )zhttps://pypi.org/simple/)Ú*NT)Fro   )FFFN)FF)*r™   rš   r›   rœ   r¥   rÆ   rà   rÑ   rÓ   r   rü   r  râ   r  r  r#  r&  r,  r1  r%  r!  r6   r8  rI  r7  rY  rc  r]  rÖ   r6  r  r�  r„  r}  Ústaticmethodrœ  r~  r  rÔ   rÕ   rê   Ú__classcell__)rÇ   s   @r%   r   r     sè   ø„ ÙEð ?EØ'+ó-ô!ó31ój'ó  ò?òò 2ò$
ò:
ó&òõHòò )òòò PðF AFØ*.óJ?óXò'ðR €Lò"òHó!8òF9ò:$òòEòð, òó ðò"ò ò òör2   r   z!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c                 óN   — | j                  d«      }t        j                  |«      S )Nr   )rL   rÉ   Úunescape)rK   Úwhats     r%   Údecode_entityr¬  ¡  s   € Ø�;‰;�q‹>€DÜ�=‰=˜ÓÐr2   c                 ó"   — t        t        | «      S )a  
    Decode HTML entities in the given text.

    >>> htmldecode(
    ...     'https://../package_name-0.1.2.tar.gz'
    ...     '?tokena=A&amp;tokenb=B">package_name-0.1.2.tar.gz')
    'https://../package_name-0.1.2.tar.gz?tokena=A&tokenb=B">package_name-0.1.2.tar.gz'
    )Ú
entity_subr¬  )Útexts    r%   r�   r�   ¦  s   € ô ”m TÓ*Ð*r2   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó   •‡ — ˆ ˆfd„}|S )Nc                  óÆ   •— t        j                  «       }t        j                  ‰«       	  ‰| i |¤Žt        j                  |«       S # t        j                  |«       w xY wro   )rq  ÚgetdefaulttimeoutÚsetdefaulttimeout)rp   rq   Úold_timeoutrr   Útimeouts      €€r%   Ú_socket_timeoutz@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeout´  sN   ø€ Ü ×2Ñ2Ó4ˆKÜ×$Ñ$ WÔ-ð6Ù˜TÐ, VÑ,ä×(Ñ(¨Õ5ø”×(Ñ(¨Õ5ús   ¬A	 Á	A r�   )rr   r·  r¶  s   ` €r%   r·  z'socket_timeout.<locals>._socket_timeout³  s   ù€ õ	6ð Ðr2   r�   )r¶  r·  s   ` r%   Úsocket_timeoutr¸  ²  s   ø€ ô	ð Ðr2   c                 óÎ   — t         j                  j                  | «      }|j                  «       }t	        j
                  |«      }|j                  «       }|j                  dd«      S )a9  
    Encode auth from a URL suitable for an HTTP header.
    >>> str(_encode_auth('username%3Apassword'))
    'dXNlcm5hbWU6cGFzc3dvcmQ='

    Long auth strings should not cause a newline to be inserted.
    >>> long_auth = 'username:' + 'password'*10
    >>> chr(10) in str(_encode_auth(long_auth))
    False
    ú
rË   )r:   r!   r<   ÚencodeÚbase64Ú	b64encoderß   r|  )r‘  Úauth_sÚ
auth_bytesÚencoded_bytesÚencodeds        r%   Ú_encode_authrÂ  Á  sR   € ô �\‰\×!Ñ! $Ó'€Fà—‘“€JÜ×$Ñ$ ZÓ0€Mà×"Ñ"Ó$€Gà�?‰?˜4 Ó$Ð$r2   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú
Credentialz:
    A username/password pair. Use like a namedtuple.
    c                 ó    — || _         || _        y ro   ©ÚusernameÚpassword)r�   rÇ  rÈ  s      r%   r¥   zCredential.__init__Û  s   € Ø ˆŒØ ˆ�r2   c              #   óD   K  — | j                   –— | j                  –— y ­wro   rÆ  r“   s    r%   Ú__iter__zCredential.__iter__ß  s   è ø€ Ø�m‰mÒØ�m‰mÓùs   ‚ c                 ó   — dt        | «      z  S )Nz%(username)s:%(password)s)Úvarsr“   s    r%   Ú__str__zCredential.__str__ã  s   € Ø*¬T°$«ZÑ7Ð7r2   N)r™   rš   r›   rœ   r¥   rÊ  rÍ  r�   r2   r%   rÄ  rÄ  Ö  s   „ ñò!òó8r2   rÄ  c                   ó.   — e Zd Zd„ Zed„ «       Zd„ Zd„ Zy)Ú
PyPIConfigc                 óP  — t         j                  g d¢d«      }t        j                  j	                  | |«       t
        j                  j                  t
        j                  j                  d«      d«      }t
        j                  j                  |«      r| j                  |«       yy)z%
        Load from ~/.pypirc
        )rÇ  rÈ  Ú
repositoryrË   ú~z.pypircN)ÚdictÚfromkeysÚconfigparserÚRawConfigParserr¥   r_   rB   rl   Ú
expanduserré   rÝ   )r�   ÚdefaultsÚrcs      r%   r¥   zPyPIConfig.__init__è  sn   € ô —=‘=Ò!GÈÓLˆÜ×$Ñ$×-Ñ-¨d°HÔ=ä�W‰W�\‰\œ"Ÿ'™'×,Ñ,¨SÓ1°9Ó=ˆÜ�7‰7�>‰>˜"ÔØ�I‰I�b�Mð r2   c                 óÄ   — | j                  «       D �cg c]$  }| j                  |d«      j                  «       r|‘Œ& }}t        t	        | j
                  |«      «      S c c}w )NrÑ  )ÚsectionsrÛ   r~   rÓ  r|   Ú_get_repo_cred)r�   ÚsectionÚsections_with_repositoriess      r%   Úcreds_by_repositoryzPyPIConfig.creds_by_repositoryó  s_   € ð $(§=¡=£?ö&
ØØ�x‰x˜ Ó.×4Ñ4Ô6ò ð&
Ð"ð &
ô
 ”C˜×+Ñ+Ð-GÓHÓIÐIùò&
s   “)Ac                 óÖ   — | j                  |d«      j                  «       }|t        | j                  |d«      j                  «       | j                  |d«      j                  «       «      fS )NrÑ  rÇ  rÈ  )rÛ   r~   rÄ  )r�   rÝ  Úrepos      r%   rÜ  zPyPIConfig._get_repo_credü  s]   € Ø�x‰x˜ Ó.×4Ñ4Ó6ˆØ”ZØ�H‰H�W˜jÓ)×/Ñ/Ó1Ø�H‰H�W˜jÓ)×/Ñ/Ó1ó
ð 
ð 	
r2   c                 ór   — | j                   j                  «       D ]  \  }}|j                  |«      sŒ|c S  y)zŒ
        If the URL indicated appears to be a repository defined in this
        config, return the credential for that repository.
        N)rß  Úitemsr-   )r�   r>   rÑ  Úcreds       r%   Úfind_credentialzPyPIConfig.find_credential  s8   € ð
 !%× 8Ñ 8× >Ñ >Ó @ò 	ÑˆJ˜Ø�~‰~˜jÕ)Ø’ñ	r2   N)r™   rš   r›   r¥   Úpropertyrß  rÜ  rå  r�   r2   r%   rÏ  rÏ  ç  s'   „ ò	ð ñJó ðJò
ór2   rÏ  c                 ó”  — t         j                  j                  | «      }|\  }}}}}}|j                  d«      rt        j
                  j                  d«      ‚|dv rt        |«      \  }	}
nd}	|	sJt        «       j                  | «      }|r/t        |«      }	|j                  | f}t        j                  dg|¢­Ž  |	rgdt        |	«      z   }	|
||||f}t         j                  j                  |«      }t         j                   j#                  |«      }|j%                  d|	«       nt         j                   j#                  | «      }|j%                  dt&        «        ||«      }|	rft         j                  j                  |j(                  «      \  }}}}}}||k(  r1|
k(  r,||||||f}t         j                  j                  |«      |_        |S )	z4Open a urllib2 request, handling HTTP authenticationrˆ  znonnumeric port: '')ri  ÚhttpsNz*Authenticating as %s for %s (from .pypirc)zBasic ÚAuthorizationz
User-Agent)r:   r!   r;   r,   ri  rj  rk  r‹  rÏ  rå  r}   rÇ  r   rÕ   rÂ  rŒ  r¼   ÚRequestÚ
add_headerÚ
user_agentr>   )r>   r¾   Úparsedr@   r�  rB   ÚparamsrD   r  r‘  Úaddressrä  rÕ   r?   r  r¼   r^  Ús2Úh2Úpath2Úparam2Úquery2Úfrag2s                          r%   rh  rh    s˜  € ô �\‰\×"Ñ" 3Ó'€FØ06Ñ-€FˆF�D˜& %¨ð ‡��sÔÜ�k‰k×$Ñ$Ð%:Ó;Ð;àÐ"Ñ"Ü" 6Ó*‰ˆ‰gàˆáÜ‹|×+Ñ+¨CÓ0ˆÙÜ�t“9ˆDØ—=‘= #Ð%ˆDÜ�H‰HÐAÐIÀDÓIáØœ, tÓ,Ñ,ˆØ˜  v¨u°dÐ:ˆÜ—,‘,×)Ñ)¨%Ó0ˆÜ—.‘.×(Ñ(¨Ó1ˆØ×Ñ˜?¨DÕ1ä—.‘.×(Ñ(¨Ó-ˆà×Ñ�|¤ZÔ0Ù	�‹€Báô 06¯|©|×/DÑ/DÀRÇVÁVÓ/LÑ,ˆˆB��v˜v uØ�Š<˜B 'šMØ˜  v¨v°uÐ<ˆEÜ—\‘\×,Ñ,¨UÓ3ˆBŒFà€Ir2   c                 ó@   — | j                  d«      \  }}} |r|| fS d| fS )zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r‡  N)Ú
rpartition)r’  r“  Údelims      r%   r‹  r‹  <  s0   € ð Ÿ™¨Ó,Ñ€Dˆ%�ÙˆD dÐ*Ð*˜t dÐ*Ð*r2   c                 ó   — | S ro   r�   )r>   s    r%   Ú
fix_sf_urlrú  G  s   € Ø€Jr2   c                 ó²  — t         j                  j                  | «      \  }}}}}}t         j                  j	                  |«      }t
        j                  j                  |«      rt         j                  j                  | «      S |j                  d«      röt
        j                  j                  |«      r×g }t        j                  |«      D ]“  }	t
        j                  j                  ||	«      }
|	dk(  r't        |
d«      5 }|j                  «       }ddd«        nkt
        j                  j                  |
«      r|	dz  }	|j                  dj!                  |	¬«      «       Œ• d}|j!                  | dj                  |«      ¬	«      }d
\  }}nd\  }}}ddi}t#        j$                  «      }t         j&                  j)                  | ||||«      S # 1 sw Y   Œ¾xY w)z7Read a local path, with special support for directoriesr4   z
index.htmlÚrNz<a href="{name}">{name}</a>)r.   zB<html><head><title>{url}</title></head><body>{files}</body></html>rº  )r>   Úfiles)éÈ   ÚOK)rÏ   zPath not foundz	Not foundrÊ   z	text/html)r:   r!   r;   r¼   r€  r_   rB   Úisfiler½   r,   rë   rí   rl   r  rÝ   r/  ÚformatÚioÚStringIOrØ   rÙ   )r>   r@   rA   rB   ÚparamrD   r  r`   rý  ræ   Úfilepathr^  Úbodyrå   ÚstatusÚmessagerÚ   Úbody_streams                     r%   rg  rg  K  s†  € ä/5¯|©|×/DÑ/DÀSÓ/IÑ,€FˆF�D˜% ¨Ü�~‰~×*Ñ*¨4Ó0€HÜ	‡w�w‡~�~�hÔÜ�~‰~×%Ñ% cÓ*Ð*Ø	�‰�sÔ	¤§¡§¡¨hÔ 7ØˆÜ—‘˜HÓ%ò 	@ˆAÜ—w‘w—|‘| H¨aÓ0ˆHØ�LÒ Ü˜( CÓ(ð %¨BØŸ7™7›9�D÷%áÜ—‘—‘˜xÔ(Ø�S‘�Ø�L‰LÐ6×=Ñ=À1Ð=ÓEÕFð	@ð5ð ð —;‘; 3¨d¯i©i¸Ó.>�;Ó?ˆDØ#‰ˆ‘à BÑˆ�˜à˜{Ð+€GÜ—+‘+˜dÓ#€KÜ�<‰<×!Ñ! # v¨w¸ÀÓMÐM÷#%ð %ús   Ã?GÇG	ro   )r   )Zrœ   Úsysr_   rd   r  rO  rq  r¼  r¡   rú   r‰  rÕ  rÉ   Úhttp.clientri  Úurllib.parser:   Úurllib.requestÚurllib.errorÚ	functoolsr   r   Úpkg_resourcesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Ú	distutilsr   Údistutils.errorsr   Úfnmatchr   Úsetuptools.wheelr   Ú setuptools.extern.more_itertoolsr   r±   rJ   ÚIr   r  rK   rÐ   r=   rW   Ú__all__Ú_SOCKET_TIMEOUTÚ_tmplr  Úversion_inforì  r&   r   rF   r   rI   ra   r   rt   rx   r‰   r‹   rž   r   r  r®  r¬  r�   r¸  rÂ  rÄ  rÖ  rÏ  r¼   r½   rh  r‹  rú  rg  r�   r2   r%   ú<module>r     s  ðÙ )Û 
Û 	Û 	Û 	Û Û Û Û Û Û Û Û Û Û Û Û Ý ã ÷÷ ÷ ÷ õ
 Ý +Ý Ý "Ý <ð ˆr�z‰zÐ6Ó7€Ø€r‡z�zÐ3°R·T±TÓ:€Øˆ2�:‰:ðJó€ð ˆR�Z‰ZÐ,¨b¯d©dÓ3×9Ñ9€
Ø.×4Ñ4Ó6€
ò€ð
 €àF€Ø�\‰\ØˆW�^‰^˜S×-Ñ-Ð.¸:ð ó G€
òòò0óóóBð 26À+Øó 
òF
ð €b‡j�jÐ@À"Ç$Á$ÓG€ð ñLó ðL÷$ñ ô2�.ô ôB@
�;ô @
ðJ ˆR�Z‰ZÐ<Ó=×AÑA€
òò
	+óò%÷*8ñ 8ô"#�×-Ñ-ô #ðL  &Ÿ~™~×5Ñ5ó +ò^+ð 1‘ Ó0°Ó@€òóNr2   