§
    jŠtjâ�  ã                  óú  — U d Z ddlm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mZmZ ddlmZmZmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZ ddl m!Z!m"Z"m#Z#m$Z$ ddl%m&Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl(m6Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@ erddlAmBZB ddlmCZC ddlm%ZD ddlEmFZFmGZGmHZH dZIdeJd<    ejK        ¦   «         ZLdeJd<   dddœZMdeJd<    ed¦  «        ZN ed ¦  «        ZOd! P                     ejQ        d" ed#¬$¦  «        d%         ¦  «        ¦  «        ZRdeJd&<   e
jS        d'k    rd«d+„ZTd«d,„Z/d¬d0„ZUd­d4„ZV	 d®d¯d:„ZWd°d=„ZXd±d?„ZYejZ        d²dB„¦   «         Z[d³dF„Z\ed´dH„¦   «         Z]edµdK„¦   «         Z]d¶dN„Z]d·dP„Z^d¸dR„Z_d®d¹dT„Z`dºdW„Zad»dZ„Zbd¼d\„Zcd½d_„Zdd¾db„Zed¿dh„ZfedÀdn„¦   «         ZgedÁdp„¦   «         ZgdÂds„ZgdÃdu„Zh eidv¦  «        ZjdeJdw<   dÄdy„ZkdÄdz„ZldÅd}„ZmdÆd„ZndÇd�„ZodÈdƒ„ZpejZ        dÉd†„¦   «         ZqdÊdˆ„ZrdËdÌd‰„ZsdÍdŒ„Zt	 dÎdÏd�„ZudÐdÑd“„ZvdÒd”„ZwdÓd–„Zxd— y                    d˜¦  «        Zzezd™z  Z{ezdšz  Z|dÔdœ„Z}dÕdž„Z~dÖd „Zd×d¢„Z€dØd¦„Z�dÙd§„Z‚dÚdª„ZƒdS )Ûz”
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
é    )ÚannotationsN)ÚOrderedDict)Ú	GeneratorÚIterable)ÚTYPE_CHECKINGÚAnyÚFinalÚTypeVarÚcastÚoverload)Úmake_headersÚ	parse_urlé   )Úcerts©Ú__version__)Ú_HEADER_VALIDATORS_BYTEÚ_HEADER_VALIDATORS_STRÚHEADER_VALIDATORSÚto_native_string)ÚSupportsItems)ÚMappingÚbytesÚ
getproxiesÚgetproxies_environmentÚinteger_typesÚis_urllib3_1Úproxy_bypassÚproxy_bypass_environmentÚquoteÚstrÚunquoteÚurlparseÚ
urlunparse)Úparse_http_list©Úcookiejar_from_dict)ÚFileModeWarningÚInvalidHeaderÚ
InvalidURLÚUnrewindableBodyError)ÚCaseInsensitiveDict)Ú	CookieJar)ÚBufferedWriter)Ú_types)ÚPreparedRequestÚRequestÚResponse)z.netrcÚ_netrcr	   ÚNETRC_FILESr!   ÚDEFAULT_CA_BUNDLE_PATHéP   i»  )ÚhttpÚhttpsÚDEFAULT_PORTSÚ_KTÚ_VTz, z,\s*T)Úaccept_encodingzaccept-encodingÚDEFAULT_ACCEPT_ENCODINGÚwin32ÚhostÚreturnÚboolc                ól  — 	 dd l }n# t          $ r Y dS w xY w	 |                     |j        d¦  «        }t	          |                     |d¦  «        d         ¦  «        }|                     |d¦  «        d         }n# t          t          f$ r Y dS w xY w|r|sdS |                     d¦  «        }t          d |¦  «        }|D ]t}|dk    rd| vr d	S | 
                    dd
¦  «        }| 
                    dd¦  «        }| 
                    dd¦  «        }t          j        || t          j        ¦  «        r d	S ŒudS )Nr   Fz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsÚProxyEnableÚProxyOverrideú;z<local>ú.Tz\.Ú*z.*ú?)ÚwinregÚImportErrorÚOpenKeyÚHKEY_CURRENT_USERÚintÚQueryValueExÚOSErrorÚ
ValueErrorÚsplitÚfilterÚreplaceÚreÚmatchÚI)r?   rI   ÚinternetSettingsÚproxyEnableÚproxyOverrideÚtests         úL/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/requests/utils.pyÚproxy_bypass_registryr\   c   s…  € ð	Øˆ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ˆå˜t ]Ñ3Ô3ˆà!ð 	ð 	ˆDØ�yÒ Ð Ø˜d�?�?Ø˜4˜4Ø—<’<  UÑ+Ô+ˆDØ—<’<  UÑ+Ô+ˆDØ—<’<  TÑ*Ô*ˆDÝŒx˜˜d¥B¤DÑ)Ô)ð Ø�t�tðàˆus   ‚ ‡
”™A A: Á:BÂBc                óZ   — t          ¦   «         rt          | ¦  «        S t          | ¦  «        S )zšReturn True, if the host should be bypassed.

        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        )r   r   r\   )r?   s    r[   r   r   ‰   s.   € õ "Ñ#Ô#ð 	/Ý+¨DÑ1Ô1Ð1å(¨Ñ.Ô.Ð.ó    Údú6_t.SupportsItems[Any, Any] | Iterable[tuple[Any, Any]]úIterable[tuple[Any, Any]]c                óX   — t          | t          ¦  «        r|                      ¦   «         S | S )z/Returns an internal sequence dictionary update.)Ú
isinstanceÚ_SupportsItemsÚitems)r_   s    r[   Údict_to_sequencerf   •   s)   € õ
 �!•^Ñ$Ô$ð Ø�wŠw‰yŒyÐà€Hr^   Úor   rM   c                óH  — d }d}t           s*t          | t          ¦  «        r|                      d¦  «        } t	          | d¦  «        rt          | ¦  «        }n–t	          | d¦  «        r| j        }n~t	          | d¦  «        rn	 |                      ¦   «         }t          j        |¦  «        j	        }d| j
        vrt          j        dt          ¦  «         n# t          j        t           f$ r Y nw xY wt	          | d¦  «        r‘	 |                      ¦   «         }t	          | d	¦  «        rW|€U	 |                      dd
¦  «         |                      ¦   «         }|                      |pd¦  «         n'# t&          $ r d}Y nw xY wn# t&          $ r |�|}Y nw xY w|€d}t)          d||z
  ¦  «        S )Nr   úutf-8Ú__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é   )r   rc   r!   ÚencodeÚhasattrrk   rl   ÚosÚfstatÚst_sizeÚmodeÚwarningsÚwarnr(   ÚioÚUnsupportedOperationÚAttributeErrorrn   ro   rO   Úmax)rg   Útotal_lengthÚcurrent_positionrl   s       r[   Ú	super_lenr       sú  € Ø€LØÐåð �J q­#Ñ.Ô.ð ð �HŠH�WÑÔˆåˆ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   Á?C ÃC)Ã(C)Ã=E9 Ä$AE& Å&E5Å4E5Å9F
Æ	F
FÚurlú
_t.UriTypeÚraise_errorsútuple[str, str] | Nonec                ó¦  — t          | t          ¦  «        r|                      d¦  «        } t          j                             d¦  «        }|�|f}nd„ t          D ¦   «         }	 ddlm}m} d}|D ]D}t          j	         
                    |¦  «        }t          j	                             |¦  «        r|} nŒE|€dS t          | ¦  «        }	|	j        }
|
€dS 	  ||¦  «                             |
¦  «        }|r/t          |¦  «        r"|d         rdnd}||         pd|d	         pdfS dS dS # |t           f$ r |r‚ Y dS w xY w# t"          t$          f$ r Y dS w xY w)
z;Returns the Requests tuple auth for a given url from netrc.ri   ÚNETRCNc              3  ó    K  — | ]	}d |› �V — Œ
dS )z~/N© )Ú.0Úfs     r[   ú	<genexpr>z!get_netrc_auth.<locals>.<genexpr>ó   s(   è è € Ð9Ð9¨˜8 ˜8˜8Ð9Ð9Ð9Ð9Ð9Ð9r^   r   )ÚNetrcParseErrorÚnetrcr   Ú rp   )rc   r   Údecoders   ÚenvironÚgetr4   rŒ   r‹   ÚpathÚ
expanduserÚexistsr#   ÚhostnameÚauthenticatorsÚanyrO   rJ   r{   )r€   r‚   Ú
netrc_fileÚnetrc_locationsr‹   rŒ   Ú
netrc_pathr‰   ÚlocÚrir?   r3   Úlogin_is                r[   Úget_netrc_authr�   ç   sÖ  € õ
 �#•uÑÔð "Ø�jŠj˜Ñ!Ô!ˆå”—’ Ñ(Ô(€JØÐØ%˜-ˆˆà9Ð9­[Ð9Ñ9Ô9ˆð#Ø0Ð0Ð0Ð0Ð0Ð0Ð0Ð0àˆ
à ð 	ð 	ˆAÝ”'×$Ò$ QÑ'Ô'ˆCÝŒw�~Š~˜cÑ"Ô"ð Ø �
Ø�ðð
 ÐØˆFå�c‰]Œ]ˆØŒ{ˆàˆ<ØˆFð
	Ø�U˜:Ñ&Ô&×5Ò5°dÑ;Ô;ˆFØð @�#˜f™+œ+ð @à% aœyÐ/˜!˜!¨a�Ø˜wœÐ-¨2¨v°a¬y¨¸BÐ?Ð?ð@ð @ð @ð @øð  ¥Ð)ð 	ð 	ð 	ð ð Øðð ð ð	øøøøõ �Ð(ð ð ð Øˆˆðøøøs8   Á"AD; Â7D; ÃAD% Ä%D8Ä4D; Ä7D8Ä8D; Ä;EÅEÚobjú
str | Nonec                óÞ   — t          | dd¦  «        }|rSt          |t          t          f¦  «        r9|d         dk    r/|d         dk    r%t          j                             |¦  «        S dS dS dS dS )z0Tries to guess the filename of the given object.ÚnameNr   ú<éÿÿÿÿú>)Úgetattrrc   r!   r   rs   r‘   Úbasename)rž   r¡   s     r[   Úguess_filenamer§     s{   € å�3˜ Ñ%Ô%€DØð &•
˜4¥#¥u Ñ.Ô.ð &°4¸´7¸c²>°>ÀdÈ2ÄhÐRUÂoÀoÝŒw×Ò Ñ%Ô%Ð%ð&ð &ð &ð &°>°>ÀoÀor^   r‘   c                óf  — t           j                             | ¦  «        r| S t           j                             | ¦  «        \  }}|r|t           j                             |¦  «        s]t           j                             |¦  «        \  }}|sn8d                     ||g¦  «        }|rt           j                             |¦  «        ¯]t          j        |¦  «        s| S t          j        |¦  «        }||                     ¦   «         vr| S t           j         	                    |                     d¦  «        d         ¦  «        d         }t          j        |¬¦  «        \  }}	 t          j        ||                     |¦  «        ¦  «         t          j        |¦  «         n# t          j        |¦  «         w xY w|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£   )Úsuffix)rs   r‘   r“   rQ   ÚjoinÚzipfileÚ
is_zipfileÚZipFileÚnamelistÚsplitextÚtempfileÚmkstempÚwriteÚreadÚclose)r‘   ÚarchiveÚmemberÚprefixÚzip_filerª   ÚfdÚextracted_paths           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×&Ò&Ñ(Ô(Ð(Ð(Øˆõ ŒW×Ò˜fŸlšl¨3Ñ/Ô/°Ô3Ñ4Ô4°RÔ8€FÝ!Ô)°Ð8Ñ8Ô8Ñ€BˆðÝ
Œ��X—]’] 6Ñ*Ô*Ñ+Ô+Ð+å
Œ�‰Œˆˆø�Œ�‰ŒˆˆøøøàÐs   Å(F ÆF.Úfilenameú%Generator[BufferedWriter, None, None]c              #  óH  K  — t          j        t          j                             | ¦  «        ¬¦  «        \  }}	 t          j        |d¦  «        5 }|V — ddd¦  «         n# 1 swxY w Y   t          j        || ¦  «         dS # t          $ r t          j        |¦  «         ‚ w xY w)z-Write a file to the disk in an atomic fashion)ÚdirÚwbN)	r±   r²   rs   r‘   ÚdirnameÚfdopenrS   ÚBaseExceptionÚremove)r½   Útmp_descriptorÚtmp_nameÚtmp_handlers       r[   Úatomic_openrÉ   H  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!Úvalueú4Mapping[Any, Any] | Iterable[tuple[Any, Any]] | Noneúdict[Any, Any] | Nonec                ó–   — | €dS t          | t          t          t          t          f¦  «        rt          d¦  «        ‚t          | ¦  «        S )a  Take 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)rc   r!   r   rA   rM   rP   r   ©rÊ   s    r[   Úfrom_key_val_listrÐ   U  sG   € ð( €}Øˆtå�%�#�u¥d­CÐ0Ñ1Ô1ð HÝÐFÑGÔGÐGå�uÑÔÐr^   ÚNonec                ó   — d S ©Nr‡   rÏ   s    r[   Úto_key_val_listrÔ   r  s   € Ø*-¨#r^   ú6_t.SupportsItems[_KT, _VT] | Iterable[tuple[_KT, _VT]]úlist[tuple[_KT, _VT]]c                ó   — d S rÓ   r‡   rÏ   s    r[   rÔ   rÔ   t  s	   € ð  ˜Cr^   ú=_t.SupportsItems[_KT, _VT] | Iterable[tuple[_KT, _VT]] | Noneúlist[tuple[_KT, _VT]] | Nonec                ó  — | €dS t          | t          t          t          t          f¦  «        rt          d¦  «        ‚t          | t          ¦  «        r!t          |                      ¦   «         ¦  «        S 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Î   )	rc   r!   r   rA   rM   rP   rd   Úlistre   rÏ   s    r[   rÔ   rÔ   x  sm   € ð& €}Øˆtå�%�#�u¥d­CÐ0Ñ1Ô1ð HÝÐFÑGÔGÐGå�%�Ñ(Ô(ð #Ý�E—K’K‘M”MÑ"Ô"Ð"å�‰;Œ;Ðr^   ú	list[str]c                óÆ   — g }t          | ¦  «        D ]N}|dd…         |dd…         cxk    rdk    rn nt          |dd…         ¦  «        }|                     |¦  «         ŒO|S )a  Parse 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
    Nr   r£   ú")Ú_parse_list_headerÚunquote_header_valueÚappend)rÊ   ÚresultÚitems      r[   Úparse_list_headerrä   ˜  s�   € ð. €FÝ" 5Ñ)Ô)ð ð ˆØ���Œ8�t˜B˜C˜C”yÐ'Ð'Ò'Ð' CÒ'Ð'Ð'Ð'Ð'Ý'¨¨Q¨r¨T¬
Ñ3Ô3ˆDØ�Š�dÑÔÐÐØ€Mr^   údict[str, str | None]c                óì   — i }t          | ¦  «        D ]a}d|vrd||<   Œ|                     dd¦  «        \  }} | dd…         | dd…         cxk    rdk    rn nt          | dd…         ¦  «        } | ||<   Œ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
    ú=Nr   r£   rÞ   )rß   rQ   rà   )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‰ˆØ€Mr^   Úis_filenamec                óÊ   — | r`| d         | d         cxk    rdk    rGn nD| dd…         } |r| dd…         dk    r*|                       dd¦  «                              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
    r   r£   rÞ   r   Nrp   z\\ú\z\")rS   )rÊ   ré   s     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Ø€Lr^   Úcjr-   c                ó   — d„ | D ¦   «         }|S )z€Returns a key/value dictionary from a CookieJar.

    :param cj: CookieJar object to extract cookies from.
    :rtype: dict
    c                ó(   — i | ]}|j         |j        “ŒS r‡   )r¡   rÊ   )rˆ   Úcookies     r[   ú
<dictcomp>z'dict_from_cookiejar.<locals>.<dictcomp>û  s   € Ð>Ð>Ð>°�6”; ¤Ð>Ð>Ð>r^   r‡   ©rì   Úcookie_dicts     r[   Údict_from_cookiejarró   ô  s   € ð ?Ð>¸2Ð>Ñ>Ô>€KØÐr^   rò   údict[str, str]c                ó"   — 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ñ   s     r[   Úadd_dict_to_cookiejarrö   ÿ  s   € õ ˜{¨BÑ/Ô/Ð/r^   Úcontentc                ó`  — t          j        dt          ¦  «         t          j        dt          j        ¬¦  «        }t          j        dt          j        ¬¦  «        }t          j        d¦  «        }|                     | ¦  «        |                     | ¦  «        z   |                     | ¦  «        z   S )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=["\']*(.+?)["\'>])rw   rx   ÚDeprecationWarningrT   ÚcompilerV   Úfindall)r÷   Ú
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Ñ
$Ô
$ñ	%à
�.Š.˜Ñ
!Ô
!ñ	"ðr^   Úheaderútuple[str, dict[str, Any]]c                ó˜  — |                       d¦  «        }|d                              ¦   «         |dd…         }}i }d}|D ]‡}|                     ¦   «         }|ro|                     d¦  «        x}dk    rT|d|…                              |¦  «        }||dz   d…                              |¦  «        }	|	||                     ¦   «         <   Œˆ||fS )z¨Returns content type and parameters from given header.

    :param header: string
    :return: tuple containing content type and dictionary of
         parameters.
    rE   r   r   Nz"' rç   r£   )rQ   ÚstripÚfindÚlower)
r  ÚtokensÚcontent_typeÚparamsÚparams_dictÚstrip_charsÚparamÚidxÚkeyrÊ   s
             r[   Ú_parse_content_type_headerr  #  sÔ   € ð �\Š\˜#ÑÔ€FØ! !œ9Ÿ?š?Ñ,Ô,¨f°Q°R°R¬j�&€LØ)+€KØ€Kàð -ð -ˆØ—’‘”ˆØð 	-˜UŸZšZ¨™_œ_Ð,�c°Ò3Ð3Ø˜˜˜”+×#Ò# KÑ0Ô0ˆCØ˜# ™'˜)˜)Ô$×*Ò*¨;Ñ7Ô7ˆEØ',ˆK˜Ÿ	š	™œÑ$øØ˜Ð$Ð$r^   ÚheadersúCaseInsensitiveDict[str]c                ó²   — |                       d¦  «        }|sdS t          |¦  «        \  }}d|v r|d                              d¦  «        S d|v rdS d|v rdS dS )	z}Returns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    :rtype: str
    zcontent-typeNÚcharsetz'"Útextz
ISO-8859-1zapplication/jsonri   )r�   r  r  )r  r  r	  s      r[   Úget_encoding_from_headersr  9  s€   € ð —;’;˜~Ñ.Ô.€Làð Øˆtå5°lÑCÔCÑ€L�&à�FÐÐØ�iÔ ×&Ò& uÑ-Ô-Ð-à�ÐÐØˆ|à˜\Ð)Ð)àˆwð *Ð)r^   ÚiteratorúIterable[bytes]Úrr2   ú"Generator[str | bytes, None, None]c              #  óð   K  — |j         €
| E d{V —† dS  t          j        |j         ¦  «        d¬¦  «        }| D ]}|                     |¦  «        }|r|V — Œ|                     dd¬¦  «        }|r|V — dS dS )zStream decodes an iterator.NrS   ©Úerrorsr^   T)Úfinal)ÚencodingÚcodecsÚgetincrementaldecoderrŽ   )r  r  ÚdecoderÚchunkÚrvs        r[   Ústream_decode_response_unicoder$  R  s²   è è € ð
 	„zÐØÐÐÐÐÐÐÐØˆà6�fÔ*¨1¬:Ñ6Ô6¸iÐHÑHÔH€GØð ð ˆØ�^Š^˜EÑ"Ô"ˆØð 	ØˆHˆHˆHøØ	�Š˜ 4ˆÑ	(Ô	(€BØ	ð Øˆˆˆˆˆðð r^   Ústringr   Úslice_lengthú
int | NoneúGenerator[bytes, None, None]c                ó   — d S rÓ   r‡   ©r%  r&  s     r[   Úiter_slicesr+  e  s	   € ð $' 3r^   úGenerator[str, None, None]c                ó   — d S rÓ   r‡   r*  s     r[   r+  r+  i  s	   € ð "% r^   úbytes | strú"Generator[bytes | str, None, None]c              #  ó´   K  — d}|�|dk    rt          | ¦  «        }|t          | ¦  «        k     r)| |||z   …         V — ||z  }|t          | ¦  «        k     °'dS dS )z Iterate over slices of a string.r   N)rk   )r%  r&  Úposs      r[   r+  r+  m  s}   è è € ð €CØÐ˜|¨qÒ0Ð0Ý˜6‘{”{ˆØ
•�F‘”Ò
Ð
Ø�S˜3 Ñ-Ð-Ô.Ð.Ð.Ð.Øˆ|Ñˆð •�F‘”Ò
Ð
Ð
Ð
Ð
Ð
r^   ústr | bytes | Nonec                óP  — t          j        dt          ¦  «         | j        €dS g }t	          | j        ¦  «        }|r;	 t          | j        |¦  «        S # t          $ r |                     |¦  «         Y nw xY w	 t          | j        |pdd¬¦  «        S # t          $ r
 | j        cY S w xY w)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.)Nri   rS   r  )
rw   rx   rú   r÷   r  r  r!   ÚUnicodeErrorrá   Ú	TypeError)r  Útried_encodingsr  s      r[   Úget_unicode_from_responser7  y  så   € õ „Mð1õ 	ñô ð ð 	„yÐØˆtà!#€Oõ )¨¬Ñ3Ô3€Hàð -ð	-Ý�q”y (Ñ+Ô+Ð+øÝð 	-ð 	-ð 	-Ø×"Ò" 8Ñ,Ô,Ð,Ð,Ð,ð	-øøøðÝ�1”9˜hÐ1¨'¸)ÐDÑDÔDÐDøÝð ð ð ØŒyÐÐÐðøøøs#   ½A ÁA4Á3A4Á8B ÂB%Â$B%zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~ÚUNRESERVED_SETÚuric                óþ  — |                       d¦  «        }t          dt          |¦  «        ¦  «        D ]¶}||         dd…         }t          |¦  «        dk    rƒ|                     ¦   «         ro	 t	          t          |d¦  «        ¦  «        }n!# t          $ r t          d|› d�¦  «        ‚w xY w|t          v r|||         dd…         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
    ú%r   r   rp   é   z"Invalid percent-escape sequence: 'ú'Nr�   )
rQ   Úrangerk   ÚisalnumÚchrrM   rP   r*   r8  r«   )r9  ÚpartsÚiÚhÚcs        r[   Úunquote_unreservedrE  ¨  s  € ð �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}	 t          t          | ¦  «        |¬¦  «        S # t          $ r t          | |¬¦  «        cY S w xY w)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)r    rE  r*   )r9  Úsafe_with_percentÚsafe_without_percents      r[   Úrequote_urirJ  À  sk   € ð /ÐØ0Ðð	5õ Õ'¨Ñ,Ô,Ð3DÐEÑEÔEÐEøÝð 5ð 5ð 5õ �SÐ3Ð4Ñ4Ô4Ð4Ð4Ð4ð	5øøøs   †$ ¤AÁAÚipÚnetc           
     ó’  — t          j        dt          j        | ¦  «        ¦  «        d         }|                     d¦  «        \  }}t          j        dt          j        t          t          |¦  «        ¦  «        ¦  «        ¦  «        d         }t          j        dt          j        |¦  «        ¦  «        d         |z  }||z  ||z  k    S )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=Lr   r©   )ÚstructÚunpackÚsocketÚ	inet_atonrQ   Údotted_netmaskrM   )rK  rL  ÚipaddrÚnetaddrÚbitsÚnetmaskÚnetworks          r[   Úaddress_in_networkrX  Ö  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Ð4r^   Úmaskc                ól   — ddd| z
  z  dz
  z  }t          j        t          j        d|¦  «        ¦  «        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)rP  Ú	inet_ntoarN  Úpack)rY  rU  s     r[   rR  rR  å  s8   € ð ˜˜b 4™i™¨1Ñ,Ñ,€DÝÔ�FœK¨¨dÑ3Ô3Ñ4Ô4Ð4r^   Ú	string_ipc                óT   — 	 t          j        | ¦  «         n# t          $ r Y dS w xY wdS )z
    :rtype: bool
    FT)rP  rQ  rO   )r^  s    r[   Úis_ipv4_addressr`  ð  sB   € ðÝÔ˜Ñ#Ô#Ð#Ð#øÝð ð ð Øˆuˆuðøøøàˆ4s   ‚ —
%¤%Ústring_networkc                óN  — |                       d¦  «        dk    r‰	 t          |                      d¦  «        d         ¦  «        }n# t          $ r Y dS w xY w|dk     s|dk    rdS 	 t	          j        |                      d¦  «        d         ¦  «         n# t          $ r Y dS w xY wdS dS )zV
    Very simple check of the cidr format in no_proxy variable.

    :rtype: bool
    r©   r   Fr[  r   T)ÚcountrM   rQ   rP   rP  rQ  rO   )ra  rY  s     r[   Úis_valid_cidrrd  û  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 Úenv_nameúGenerator[None, None, None]c              #  ó  K  — |du}d}|r.t           j                             | ¦  «        }|t           j        | <   	 dV — |r"|€t           j        | = dS |t           j        | <   dS dS # |r|€t           j        | = n|t           j        | <   w xY w)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)rs   r�   r�   )re  rÊ   Úvalue_changedÚ	old_values       r[   Úset_environrj    s¹   è è € ð  Ð%€MØ €IØð %Ý”J—N’N 8Ñ,Ô,ˆ	Ø$�Œ
�8Ñð1Øˆˆˆàð 	1ØÐ Ý”J˜xÐ(Ð(Ð(à'0•”
˜8Ñ$Ð$Ð$ð		1ð 	1øˆ=ð 	1ØÐ Ý”J˜xÐ(Ð(à'0•”
˜8Ñ$Ð0Ð0Ð0Ð0s   ºA$ Á$#BÚno_proxyc                óä  — dd„}|}|€ |d¦  «        }t          | ¦  «        }|j        }|€dS |råd	„ |                     d
d¦  «                             d¦  «        D ¦   «         }t	          |¦  «        r2|D ].}t          |¦  «        rt          ||¦  «        r dS Œ%||k    r dS Œ/nq|}|j        r|d|j        › �z  }|D ]X}	|	                     d¦  «        }	||	k    s||	k    r dS d|	z   }	| 	                    |	¦  «        s| 	                    |	¦  «        r dS ŒYt          d|¦  «        5  	 t          |¦  «        }
n# t          t          j        f$ r d}
Y nw xY wddd¦  «         n# 1 swxY w Y   |
rdS dS )zL
    Returns whether we should bypass proxies or not.

    :rtype: bool
    r  r!   r@   rŸ   c                ó¢   — t           j                             | ¦  «        p0t           j                             |                      ¦   «         ¦  «        S rÓ   )rs   r�   r�   Úupper)r  s    r[   Ú	get_proxyz(should_bypass_proxies.<locals>.get_proxy3  s1   € ÝŒz�~Š~˜cÑ"Ô"ÐA¥b¤j§n¢n°S·Y²Y±[´[Ñ&AÔ&AÐAr^   Nrk  Tc              3  ó   K  — | ]}|¯|V — Œ	d S rÓ   r‡   )rˆ   r?   s     r[   rŠ   z(should_bypass_proxies.<locals>.<genexpr>E  s(   è è € ÐXÐX 4ÐSWÐX˜$ÐXÐXÐXÐXÐXÐXr^   ú r�   ú,ú:rF   F)r  r!   r@   rŸ   )r#   r”   rS   rQ   r`  rd  rX  ÚportÚlstripÚendswithrj  r   r5  rP  Úgaierror)r€   rk  ro  Úno_proxy_argÚparsedr”   Úno_proxy_hostsÚproxy_ipÚhost_with_portr?   Úbypasss              r[   Úshould_bypass_proxiesr~  *  sV  € ðBð Bð Bð Bð
 €LØÐØ�9˜ZÑ(Ô(ˆÝ�c‰]Œ]€FØŒ€HàÐàˆtàð  ð YÐX¨8×+;Ò+;¸CÀÑ+DÔ+D×+JÒ+JÈ3Ñ+OÔ+OÐXÑXÔXˆå˜8Ñ$Ô$ð 	 Ø*ð  ð  �Ý  Ñ*Ô*ð  Ý)¨(°HÑ=Ô=ð $Ø#˜t˜tð$à Ò)Ð)ð  ˜4˜4ð *ð	 ð &ˆNØŒ{ð 4ØÐ"3 f¤kÐ"3Ð"3Ñ3�à&ð  ð  �Ø—{’{ 3Ñ'Ô'�Ø˜tÒ#Ð# ~¸Ò'=Ð'=Ø˜4˜4Ø˜T‘z�Ø×$Ò$ TÑ*Ô*ð  ¨n×.EÒ.EÀdÑ.KÔ.Kð  Ø˜4˜4ð õ 
�Z Ñ	.Ô	.ð ð ð	Ý! (Ñ+Ô+ˆFˆFøÝ�6œ?Ð+ð 	ð 	ð 	ØˆFˆFˆFð	øøøðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð Øˆtàˆ5s6   Ä%E!Ä'D7Ä6E!Ä7EÅE!ÅEÅE!Å!E%Å(E%c                óD   — t          | |¬¦  «        ri S t          ¦   «         S )zA
    Return a dict of environment proxies.

    :rtype: dict
    ©rk  )r~  r   )r€   rk  s     r[   Úget_environ_proxiesr�  i  s(   € õ ˜S¨8Ð4Ñ4Ô4ð Øˆ	å‰|Œ|Ðr^   Úproxiesúdict[str, str] | Nonec                ó  — |pi }t          | ¦  «        }|j        €.|                     |j        |                     d¦  «        ¦  «        S |j        dz   |j        z   |j        d|j        z   dg}d}|D ]}||v r
||         } 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://zall://)r#   r”   r�   Úscheme)r€   r‚  ÚurlpartsÚ
proxy_keysÚproxyÚ	proxy_keys         r[   Úselect_proxyr‹  u  s­   € ð ˆm˜€GÝ˜‰}Œ}€HØÔÐ Ø�{Š{˜8œ?¨G¯KªK¸Ñ,>Ô,>Ñ?Ô?Ð?ð 	Œ˜%Ñ (Ô"3Ñ3ØŒØ�8Ô$Ñ$Øð	€Jð €EØð ð ˆ	Ø˜ÐÐØ˜IÔ&ˆEØˆEð  ð €Lr^   ÚrequestúRequest | PreparedRequestÚ	trust_envc                óŠ  — |�|ni }t          t          | 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 as 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
    Nrk  r€  r…  )
r   r!   r€   r#   r†  r�   Úcopyr~  r�  Ú
setdefault)	rŒ  r‚  rŽ  r€   r†  rk  Únew_proxiesÚenviron_proxiesr‰  s	            r[   Úresolve_proxiesr”  �  sÅ   € ð !Ð,ˆgˆg°"€GÝ
�s�G”KÑ
 Ô
 €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ØÐr^   úpython-requestsr¡   c                ó   — | › dt           › �S )zO
    Return a string representing the default user agent.

    :rtype: str
    r©   r   )r¡   s    r[   Údefault_user_agentr—  ®  s   € ð Ð"Ð"•[Ð"Ð"Ð"r^   c                 óL   — t          t          ¦   «         t          dddœ¦  «        S )z9
    :rtype: requests.structures.CaseInsensitiveDict
    z*/*z
keep-alive)z
User-AgentzAccept-EncodingÚAcceptÚ
Connection)r,   r—  r=   r‡   r^   r[   Údefault_headersr›  ·  s2   € õ å,Ñ.Ô.Ý6ØØ&ð		
ð 	
ñô ð r^   úlist[dict[str, str]]c                ó  — g }d}|                       |¦  «        } | s|S t          j        d| ¦  «        D ]Ë}	 |                     dd¦  «        \  }}n# t          $ r |d}}Y nw xY wd|                      d¦  «        i}|                     d¦  «        D ]X}	 |                     d¦  «        \  }} n# t          $ r Y  n0w xY w|                       |¦  «        ||                      |¦  «        <   Œ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, *<rE   r   r�   r€   z<> '"rç   )r  rT   rQ   rP   rá   )	rÊ   ÚlinksÚreplace_charsÚvalr€   r	  Úlinkr  r  s	            r[   Úparse_header_linksr¢  Å  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:Â9B:ú Úasciirp   é   Údatac                óÖ  — | dd…         }|t           j        t           j        fv rdS |dd…         t           j        k    rdS |dd…         t           j        t           j        fv rdS |                     t          ¦  «        }|dk    rd	S |dk    r,|ddd…         t          k    rd
S |ddd…         t          k    rdS |dk    r*|dd…         t          k    rdS |dd…         t          k    rdS dS )z
    :rtype: str
    Né   zutf-32r¥  z	utf-8-sigrp   zutf-16r   ri   z	utf-16-ber   z	utf-16-lez	utf-32-bez	utf-32-le)
r  ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BErc  Ú_nullÚ_null2Ú_null3)r¦  ÚsampleÚ	nullcounts      r[   Úguess_json_utfr³  ð  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�"Œ:�ÒÐØ�;Ø�!�"�"Œ:�ÒÐØ�;àˆ4r^   Ú
new_schemec                óä   — t          | ¦  «        }|\  }}}}}}}	|j        }
|
s||
}}
|r,t          t          |
¦  «        }
d                     ||
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�   )r   Únetlocr   r!   r«   r$   )r€   r´  ry  r†  ÚauthÚ_hostÚ_portr‘   ÚqueryÚfragmentr·  s              r[   Úprepend_scheme_if_neededr½    sš   € õ �s‰^Œ^€FØ8>Ñ5€FˆD�%˜  e¨Xð Œ]€FØð $Ø˜V�ˆàð *õ •c˜6Ñ"Ô"ˆØ—’˜4 ˜.Ñ)Ô)ˆØ€~ØˆØ€|Øˆå�v˜v t¨R°¸ÐAÑBÔBÐBr^   útuple[str, str]c                óª   — t          | ¦  «        }	 t          |j        ¦  «        t          |j        ¦  «        f}n# t          t
          f$ r d}Y nw xY w|S )z{Given a url with authentication components, extract them into a tuple of
    username,password.

    :rtype: (str,str)
    )r�   r�   )r#   r"   ÚusernameÚpasswordr{   r5  )r€   ry  r¸  s      r[   Úget_auth_from_urlrÂ  .  sd   € õ �c‰]Œ]€Fðå˜œÑ(Ô(­'°&´/Ñ*BÔ*BÐCˆˆøÝ�IÐ&ð ð ð Øˆˆˆðøøøð €Ks   ‘(: ºAÁAútuple[str | bytes, str | bytes]c                óT   — | \  }}t          | |d¦  «         t          | |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).
    r   r   N)Ú_validate_header_part)r  r¡   rÊ   s      r[   Úcheck_header_validityrÆ  ?  s7   € ð �K€Dˆ%Ý˜& $¨Ñ*Ô*Ð*Ý˜& %¨Ñ+Ô+Ð+Ð+Ð+r^   Úheader_partústr | bytesÚheader_validator_indexc           
     óD  — t          |t          ¦  «        rt          |         }nHt          |t          ¦  «        rt          |         }n%t          d|›d| › dt          |¦  «        › �¦  «        ‚|                     |¦  «        s|dk    rdnd}t          d|› d|›�¦  «        ‚d S )	NzHeader part (z) from z# must be of type str or bytes, not r   r¡   rÊ   zTInvalid leading whitespace, reserved character(s), or return character(s) in header z: )rc   r!   r   r   r   r)   ÚtyperU   )r  rÇ  rÉ  Ú	validatorÚheader_kinds        r[   rÅ  rÅ  J  sö   € õ
 �+�sÑ#Ô#ð 	
Ý*Ð+AÔBˆ	ˆ	Ý	�K¥Ñ	'Ô	'ð 
å+Ð,BÔCˆ	ˆ	åðE˜Kð Eð E°&ð Eð EÝ15°kÑ1BÔ1BðEð Eñ
ô 
ð 	
ð
 �?Š?˜;Ñ'Ô'ð 
Ø 6¸!Ò ;Ð ;�f�fÀˆÝðEØ&1ðEð EØ5@ðEð Eñ
ô 
ð 	
ð
ð 
r^   c                óœ   — t          | ¦  «        \  }}}}}}|s||}}|                     dd¦  «        d         }t          |||||df¦  «        S )zW
    Given a url remove the fragment and the authentication part.

    :rtype: str
    r¶  r   r£   r�   )r#   Úrsplitr$   )r€   r†  r·  r‘   r	  r»  Ú	_fragments          r[   ÚurldefragauthrÑ  b  sb   € õ 6>¸c±]´]Ñ2€FˆF�D˜& %¨ð ð $Ø˜V�ˆà�]Š]˜3 Ñ"Ô" 2Ô&€Få�v˜v t¨V°U¸BÐ?Ñ@Ô@Ð@r^   Úprepared_requestr0   c                óä   — t          | j        dd¦  «        }|�Jt          | j        t          ¦  «        r0	  || j        ¦  «         dS # t
          $ r t          d¦  «        ‚w xY wt          d¦  «        ‚)zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    ro   Nz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r¥   Úbodyrc   Ú_body_positionr   rO   r+   )rÒ  Ú	body_seeks     r[   Úrewind_bodyr×  s  s—   € õ Ð(Ô-¨v°tÑ<Ô<€IØÐ¥ØÔ'Ýñ"ô "Ðð	ØˆIÐ&Ô5Ñ6Ô6Ð6Ð6Ð6øÝð 	ð 	ð 	Ý'ØMñô ð ð	øøøõ
 $Ð$QÑRÔRÐRs   ´A ÁA )r?   r!   r@   rA   )r_   r`   r@   ra   )rg   r   r@   rM   )F)r€   r�   r‚   rA   r@   rƒ   )rž   r   r@   rŸ   )r‘   r!   r@   r!   )r½   r!   r@   r¾   )rÊ   rË   r@   rÌ   )rÊ   rÑ   r@   rÑ   )rÊ   rÕ   r@   rÖ   )rÊ   rØ   r@   rÙ   )rÊ   r!   r@   rÜ   )rÊ   r!   r@   rå   )rÊ   r!   ré   rA   r@   r!   )rì   r-   r@   rå   )rì   r-   rò   rô   r@   r-   )r÷   r!   r@   rÜ   )r  r!   r@   r  )r  r  r@   rŸ   )r  r  r  r2   r@   r  )r%  r   r&  r'  r@   r(  )r%  r!   r&  r'  r@   r,  )r%  r.  r&  r'  r@   r/  )r  r2   r@   r2  )r9  r!   r@   r!   )rK  r!   rL  r!   r@   rA   )rY  rM   r@   r!   )r^  r!   r@   rA   )ra  r!   r@   rA   )re  r!   rÊ   rŸ   r@   rf  )r€   r!   rk  rŸ   r@   rA   rÓ   )r€   r!   rk  rŸ   r@   rô   )r€   r!   r‚  rƒ  r@   rŸ   )T)rŒ  r�  r‚  rƒ  rŽ  rA   r@   rô   )r•  )r¡   r!   r@   r!   )r@   r  )rÊ   r!   r@   rœ  )r¦  r   r@   rŸ   )r€   r!   r´  r!   r@   r!   )r€   r!   r@   r¾  )r  rÃ  r@   rÑ   )r  rÃ  rÇ  rÈ  rÉ  rM   r@   rÑ   )r€   r!   r@   r!   )rÒ  r0   r@   rÑ   )„Ú__doc__Ú
__future__r   r  Ú
contextlibry   rs   rT   rP  rN  Úsysr±   rw   r¬   Úcollectionsr   Úcollections.abcr   r   Útypingr   r   r	   r
   r   r   Úurllib3.utilr   r   r�   r   r   Ú_internal_utilsr   r   r   r   r/   r   rd   Úcompatr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   rß   Úcookiesr'   Ú
exceptionsr(   r)   r*   r+   Ú
structuresr,   Úhttp.cookiejarr-   r.   Ú_tÚmodelsr0   r1   r2   r4   Ú__annotations__Úwherer5   r9   r:   r;   r«   rQ   r=   Úplatformr\   rf   r   r�   r§   r¼   ÚcontextmanagerrÉ   rÐ   rÔ   rä   rè   rà   ró   rö   r   r  r  r$  r+  r7  Ú	frozensetr8  rE  rJ  rX  rR  r`  rd  rj  r~  r�  r‹  r”  r—  r›  r¢  rq   r®  r¯  r°  r³  r½  rÂ  rÆ  rÅ  rÑ  r×  r‡   r^   r[   ú<module>rí     s4  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +àð ;Ø(Ð(Ð(Ð(Ð(Ð(Ø!Ð!Ð!Ð!Ð!Ð!àÐÐÐÐÐØ:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:à)€Ð )Ð )Ð )Ñ )ð *˜eœk™mœmÐ Ð +Ð +Ð +Ñ +ð !#¨SÐ1Ð1€Ð 1Ð 1Ð 1Ñ 1à€gˆe�n„n€Ø€gˆe�n„n€ð "&§¢Ø€B„HˆW�l�l°4Ð8Ñ8Ô8Ð9JÔKÑLÔLñ"ô "Ð ð ð ð ñ ð
 „<�7ÒÐð$ð $ð $ð $ðL	/ð 	/ð 	/ð 	/ðð ð ð ðD3ð D3ð D3ð D3ðP +0ð1ð 1ð 1ð 1ð 1ðh&ð &ð &ð &ð#ð #ð #ð #ðL Ôð	ð 	ð 	ñ Ôð	ðð ð ð ð: 
Ø -Ð -Ð -ñ 
„Ø -Ø	ð ð  ð  ñ 
„ð ðð ð ð ð@ð ð ð ð@ð ð ð ðFð ð ð ð ð2ð ð ð ð0ð 0ð 0ð 0ðð ð ð ð2%ð %ð %ð %ð,ð ð ð ð2ð ð ð ð& 
ð'ð 'ð 'ñ 
„ð'ð 
ð%ð %ð %ñ 
„ð%ð	ð 	ð 	ð 	ð&ð &ð &ð &ðT "˜	ØMñô €ð ð ð ñ ð
ð ð ð ð05ð 5ð 5ð 5ð,5ð 5ð 5ð 5ð5ð 5ð 5ð 5ðð ð ð ðð ð ð ð0 Ôð1ð 1ð 1ñ Ôð1ð,<ð <ð <ð <ð~	ð 	ð 	ð 	ð 	ðð ð ð ð: ðð ð ð ð ð>#ð #ð #ð #ð #ðð ð ð ð"ð "ð "ð "ðL 	�Š�gÑÔ€Ø	�‰€Ø	�‰€ðð ð ð ð@Cð Cð Cð Cð<ð ð ð ð",ð ,ð ,ð ,ð
ð 
ð 
ð 
ð0Að Að Að Að"Sð Sð Sð Sð Sð Sr^   