o
    Z�¿jÙ”  ã                %   @  s8  U d dl mZ g d¢Zd dlZd dlZd dlZd dlZd dlZd dl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mZmZ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#m$Z$m%Z% d
dl&m'Z'm(Z( d
dl)m*Z*m+Z+ d
dl,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@mAZAmBZBmCZC erÙd
dl&mDZD ddl0mEZE ddl5mFZF ddl7mGZGmHZH ddlImJZJ ed ZKeLdƒZMeG dd„ dƒƒZNeNƒ ZOdePd < d·d%d&„ZQd¸d*d+„ZRd¹dºd.d/„ZSd»d2d3„ZTeUd4ƒZVd¼d6d7„ZWd¼d8d9„ZX	:d½d¾d@dA„ZYd¿dCdD„ZZdÀdÁdGdH„Z[dÀdÂdJdK„Z\d½dÃdPdQ„Z]dÄdSdT„Z^dÅdVdW„Z_dÆdZd[„Z`dÇd]d^„Zad_d`„ e/D ƒZbh da£Zceb dec¡ dÈddde„ZedÉdfdg„ZfdÊdidj„ZgdËdldm„ZhdÌdtdu„Zig ddddg g ddeOdvdwg ddg ddxdddddddvd,dddddd dddddyœ$dÍdµd¶„ZjdS )Îé    )Úannotations)ÚHttpVersionLiteralÚset_curl_optionsÚNOT_SETN)ÚCounter)ÚCallableÚIterable)ÚBytesIO)Údumps)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚOptionalÚUnionÚcastÚfinal)ÚParseResultÚ	parse_qslÚquoteÚ	urlencodeÚurljoinÚurlparseé   )Ú
CurlFollowÚCurlHttpVersionÚCurlOptÚCurlSslVersion)ÚCURL_WRITEFUNC_ERRORÚCurlMime)ÚCurlCffiWarningr   )ÚFingerprintÚFingerprintManagerÚNATIVE_IMPERSONATE_TARGETSé   )ÚCookies)ÚImpersonateErrorÚ
InvalidURL)ÚHeaders)ÚTLS_CIPHER_NAME_MAPÚTLS_EC_CURVES_MAPÚTLS_VERSION_MAPÚExtraFingerprintsÚresolve_latest_browser_type)ÚRequest)ÚRequestContentÚRequestDataÚ_FileReaderÚ_IterableReader)ÚCurl)ÚCookieTypes)ÚHeaderTypes)ÚBrowserTypeLiteralÚExtraFpDict)Ú	ProxySpec)	ÚGETÚPOSTÚPUTÚDELETEÚOPTIONSÚHEADÚTRACEÚPATCHÚQUERYz!#$%&'()*+,/:;=?@[]~c                   @  s(   e Zd ZdZdZddd„Zddd	„Zd
S )Ú
NotSetTypez@
    Unique single initialized type distinct from ``None``.
    © ÚreturnÚstrc                 C  ó   dS ©Nr   rC   ©ÚselfrC   rC   úS/home/dinkstrade/pdmp/venv/lib/python3.10/site-packages/curl_cffi/requests/utils.pyÚ__repr__;   ó   zNotSetType.__repr__úLiteral['NOT_SET']c                 C  rF   rG   rC   rH   rC   rC   rJ   Ú
__reduce__>   rL   zNotSetType.__reduce__N)rD   rE   )rD   rM   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rK   rN   rC   rC   rC   rJ   rB   3   s
    
rB   zFinal[NotSetType]r   Úversionú*Union[CurlHttpVersion, HttpVersionLiteral]rD   r   c                 C  sX   | dkrt jS | dkrt jS | dkrt jS | dkrt jS | dkr#t jS | dkr*t jS | S )NÚv1Úv3Úv3onlyÚv2Úv2tlsÚv2_prior_knowledge)r   ÚV1_1ÚV3ÚV3ONLYÚV2_0ÚV2TLSÚV2_PRIOR_KNOWLEDGE)rT   rC   rC   rJ   Únormalize_http_versionF   s   rb   ÚurlrE   Úboolc                 C  s   t | ƒ}t|jo
|jƒS )z,Check if the provided url is an absolute url)r   rd   ÚschemeÚhostname)rc   Ú
parsed_urlrC   rC   rJ   Úis_absolute_urlY   s   rh   Ú Ú	quote_strc                 C  s^   d  tt|ƒ ¡}t| ƒ}t|jdd�}t|d|d�}t|j|j	t
|j|d�|j||jƒ ¡ S )Nri   T©Úkeep_blank_values)ÚdoseqÚsafe©rn   )ÚjoinÚ
SAFE_CHARSÚsetr   r   Úqueryr   r   re   Únetlocr   ÚpathÚparamsÚfragmentÚgeturl)rc   rj   rn   rg   Úparsed_get_argsÚencoded_get_argsrC   rC   rJ   Úquote_path_and_params_   s   úùr{   rv   úUnion[dict, list, tuple]c                   sä   t | ƒ}t|jdd�}tdd„ |D ƒƒ}t|tƒrt| ¡ ƒ}tdd„ |D ƒƒ}|D ]/\‰ ‰tˆttB ƒr9t	ˆƒ‰| 
ˆ ¡dkrR| 
ˆ ¡dkrR‡ ‡fdd„|D ƒ}q*| ˆ ˆf¡ q*t|dd	�}t|j|j|j|j||jƒ ¡ }|S )
aÉ  Add URL query params to provided URL being aware of existing.

    Args:
        url: string of target URL
        params: dict containing requested params to be added

    Returns:
        string with updated URL

    >> url = 'http://stackoverflow.com/test?answers=true'
    >> new_params = {'answers': False, 'data': ['some','values']}
    >> update_url_params(url, new_params)
    'http://stackoverflow.com/test?data=some&data=values&answers=false'
    Trk   c                 s  ó   � | ]}|d  V  qdS ©r   NrC   ©Ú.0ÚxrC   rC   rJ   Ú	<genexpr>„   ó   € z$update_url_params.<locals>.<genexpr>c                 s  r}   r~   rC   r   rC   rC   rJ   r‚   ‡   rƒ   r$   c                   s$   g | ]}|d  ˆ kr|nˆ ˆf‘qS ©r   rC   r   ©ÚkeyÚvaluerC   rJ   Ú
<listcomp>Ž   s    ÿz%update_url_params.<locals>.<listcomp>)rm   )r   r   rs   r   Ú
isinstanceÚdictÚlistÚitemsrd   r
   ÚgetÚappendr   r   re   rt   ru   rv   rw   rx   )rc   rv   rg   ry   Úold_args_counterÚnew_args_counterrz   Únew_urlrC   r…   rJ   Úupdate_url_paramsn   s4   
ÿúù	r’   zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~Úuric                 C  sÒ   |   d¡}tdt|ƒƒD ]W}|| dd… }t|ƒdkrZ| ¡ rZz	tt|dƒƒ}W n ty> } z	td|› d�ƒ|‚d}~ww |tv rP||| dd…  ||< qd|| › �||< qd|| › �||< q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.
    ú%r$   r   r   é   z"Invalid percent-escape sequence: 'ú'Nri   )
ÚsplitÚrangeÚlenÚisalnumÚchrÚintÚ
ValueErrorr'   ÚUNRESERVED_SETrp   )r“   ÚpartsÚiÚhÚcÚerC   rC   rJ   Úunquote_unreserved®   s   
€ÿ
r¤   c                 C  s:   d}d}z	t t| ƒ|d�W S  ty   t | |d� Y S 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.
    z!#$%&'()*+,/:;=?@[]~|z!#$&'()*+,/:;=?@[]~|ro   )r   r¤   r'   )r“   Úsafe_with_percentÚsafe_without_percentrC   rC   rJ   Úrequote_uriÄ   s   ür§   FÚheader_linesú	list[str]r†   r‡   Úreplacec                 C  sj   d}t | ƒD ]\}}| ¡  | ¡ d ¡r$d}|r"|› d|› �| |<  nq|s3|  |› d|› �¡ dS dS )z*Update header line list by key value pair.Fú:Tú: N)Ú	enumerateÚlowerÚ
startswithrŽ   )r¨   r†   r‡   rª   ÚfoundÚidxÚlinerC   rC   rJ   Úupdate_header_lineÙ   s   üÿr³   Úheader_linec                 C  sN   |   d¡}|   d¡}dd„ ||fD ƒ}|s|  ¡  ¡ S | dt|ƒ…  ¡  ¡ S )z8Return the lowercase header key from a curl header line.r«   ú;c                 S  s   g | ]}|d kr|‘qS r„   rC   )r€   r±   rC   rC   rJ   rˆ   ì   s    z$_header_line_key.<locals>.<listcomp>N)ÚfindÚstripr®   Úmin)r´   Ú	colon_idxÚsemicolon_idxÚindexesrC   rC   rJ   Ú_header_line_keyè   s   

r¼   Úqúqueue.Queuec                 C  ó$   z| j d W S  ty   | Y S w ©Nr   )ÚqueueÚ
IndexError©r½   ÚdefaultrC   rC   rJ   Ú
peek_queueò   ó
   ÿrÅ   úasyncio.Queuec                 C  r¿   rÀ   )Ú_queuerÂ   rÃ   rC   rC   rJ   Úpeek_aio_queueù   rÆ   rÉ   Úcurlr3   Úja3Úpermutec                 C  s4  |  d¡\}}}}}tt|ƒ }|  tj|tjB ¡ |tjks#J dƒ‚g }	|  d¡D ]}
t|
ƒ}t	 
|¡}|sAtdt|ƒ› d�ƒ‚|	 |¡ q*|  tjd |	¡¡ | d¡rd|dd	… }tjd
tdd� |sm|  tj|¡ g }|  d¡D ]}t|ƒ}t| }| |¡ qt|  tjd |¡¡ t|ƒdks˜J dƒ‚dS )zu
    Detailed explanation: https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/
    ú,zOnly TLS v1.2 works for now.ú-zCipher z is not foundr«   z-21NéýÿÿÿzÈPadding(21) extension found in ja3 string, whether to add it should be managed by the SSL engine. The TLS client hello packet may contain or not contain this extension, any of which should be correct.r$   ©Ú
stacklevelr   z%Only curve_formats == 0 is supported.)r—   r+   rœ   Úsetoptr   Ú
SSLVERSIONr   ÚMAX_DEFAULTÚTLSv1_2r)   r�   r&   ÚhexrŽ   ÚSSL_CIPHER_LISTrp   ÚendswithÚwarningsÚwarnr    ÚTLS_EXTENSION_ORDERr*   ÚSSL_EC_CURVES)rÊ   rË   rÌ   Útls_versionÚciphersÚ
extensionsÚcurvesÚcurve_formatsÚcurl_tls_versionÚcipher_namesÚcipherÚ	cipher_idÚcipher_nameÚcurve_namesÚcurveÚcurve_idÚ
curve_namerC   rC   rJ   Úset_ja3_options   s8   

ûrë   Úakamaic                 C  s~   |  d¡\}}}}| dd¡}|  tjtj¡ |  tj|¡ |  tjt	|ƒ¡ |dkr2|  tj
|¡ |  tj| dd¡¡ dS )zŠ
    Detailed explanation: https://www.blackhat.com/docs/eu-17/materials/eu-17-Shuster-Passive-Fingerprinting-Of-HTTP2-Clients-wp.pdf
    ú|rÍ   rµ   Ú0ri   N)r—   rª   rÒ   r   ÚHTTP_VERSIONr   r_   ÚHTTP2_SETTINGSÚHTTP2_WINDOW_UPDATErœ   ÚHTTP2_STREAMSÚHTTP2_PSEUDO_HEADERS_ORDER)rÊ   rì   ÚsettingsÚwindow_updateÚstreamsÚheader_orderrC   rC   rJ   Úset_akamai_options+  s   rø   Úperkc                 C  sF   |  d¡\}}}|  tj|¡ |  tj| dd¡¡ |  tj|¡ d S )Nrí   rÍ   ri   )r—   rÒ   r   ÚHTTP3_SETTINGSÚHTTP3_PSEUDO_HEADERS_ORDERrª   ÚQUIC_TRANSPORT_PARAMETERS)rÊ   rù   rô   r÷   Úquic_transport_parametersrC   rC   rJ   Úset_perk_optionsA  s   rþ   Úfpr,   c                 C  sŽ  |j r|  tjd |j ¡¡ |jd ur|  tj|jtjB ¡ |j	d ur-|  tj
t|j	ƒ¡ |jd ur<|  tjt|jƒ¡ |jd urI|  tj|j¡ |jd urV|  tj|j¡ |jd urc|  tj|j¡ |jrn|  tj|j¡ |jry|  tj|j¡ |jr„|  tj|j¡ |jr�|  tj|j¡ |jd urœ|  tj|j¡ |jd ur©|  tj|j¡ |j d ur¶|  tj!|j ¡ |j"d urÅ|  tj#|j"¡ d S d S )NrÍ   )$Útls_signature_algorithmsrÒ   r   ÚSSL_SIG_HASH_ALGSrp   Útls_min_versionrÓ   r   rÔ   Ú
tls_greaseÚ
TLS_GREASErœ   Útls_permute_extensionsÚSSL_PERMUTE_EXTENSIONSÚtls_cert_compressionÚSSL_CERT_COMPRESSIONÚhttp2_stream_weightÚSTREAM_WEIGHTÚhttp2_stream_exclusiveÚSTREAM_EXCLUSIVEÚtls_delegated_credentialÚTLS_DELEGATED_CREDENTIALSÚtls_record_size_limitÚTLS_RECORD_SIZE_LIMITÚhttp2_no_priorityÚHTTP2_NO_PRIORITYr÷   ÚHTTPHEADER_ORDERÚform_boundaryÚFORM_BOUNDARYÚsplit_cookiesÚSPLIT_COOKIESÚhttp3_sig_hash_algsÚHTTP3_SIG_HASH_ALGSÚhttp3_tls_extension_orderÚHTTP3_TLS_EXTENSION_ORDER)rÊ   rÿ   rC   rC   rJ   Úset_extra_fpM  s>   









ÿr  r   c                 C  sX   t jt jt jt jt jt jt jt jt jt jdœ
}|  ¡  ¡ }||vr(td| › �ƒ‚|| S )N)
Ú1z1.0z1.1z1.2z1.3Útlsv1Útlsv1_0Útlsv1_1Útlsv1_2Útlsv1_3zUnsupported TLS version: )	r   ÚTLSv1ÚTLSv1_0ÚTLSv1_1rÕ   ÚTLSv1_3r·   r®   r&   )rT   Úlookupr†   rC   rC   rJ   Ú_normalize_tls_versiono  s   ör(  c                 C  s   h | ]}|d  ’qS )Útarget_namerC   )r€   ÚitemrC   rC   rJ   Ú	<setcomp>‚  ó    r+  >   Ú
safari15_3Ú
safari15_5Ú
safari17_0Ú
safari18_0Úsafari17_2_iosÚsafari18_0_iosÚtargetúOptional[Fingerprint]c                 C  s   t  ¡ }| | ¡S ©N)r"   Úload_fingerprintsr�   )r3  ÚfingerprintsrC   rC   rJ   Ú_load_named_fingerprint�  s   
r8  c                 C  s   t | ƒ}|tv S r5  )r-   ÚNATIVE_TARGET_NAMES)r3  Ú
normalizedrC   rC   rJ   Ú_is_native_impersonate_target”  s   r;  Úextension_orderc                 C  s   d  dd„ |  d¡D ƒ¡S )NrÎ   c                 s  s   � | ]	}|d kr|V  qdS )Ú21NrC   )r€   ÚpartrC   rC   rJ   r‚   š  s   € z+_strip_padding_extension.<locals>.<genexpr>)rp   r—   )r<  rC   rC   rJ   Ú_strip_padding_extension™  s   r?  Úgroupc                 C  s   | dkrdS | S )NÚX25519Kyber768ÚX25519Kyber768Draft00rC   )r@  rC   rC   rJ   Ú_normalize_supported_group�  s   rC  Úfingerprintr!   Úexisting_header_namesúset[str]Údefault_headersÚNonec                 C  s   |j rt|j ƒ}|  tj|tjB ¡ |jr |  tjd 	|j¡¡ |j
r2t|j
ƒ}|js2|  tj|¡ |  tjt|jƒ¡ |  tjt|jƒ¡ |  tjt|jƒ¡ |  tjt|jƒ¡ |jrn|  tjd¡ |  tjt|jƒ¡ |  tjd¡ |  tjt|jƒ¡ |  tj|j¡ |jr–|  tjd 	|j¡¡ n|  tjd¡ |j r«|  tj!d 	|j ¡¡ |j"rÀdd„ |j"D ƒ}|  tj#d 	|¡¡ |j$rÎ|  tj%d 	|j$¡¡ |  tj&t|jƒ¡ |j'd urå|  tj(|j'¡ |j)d urò|  tj*|j)¡ |j+d u�r|  tj,d 	|j+¡¡ |j-�r|  tj.|j-¡ |j/�r|  tj0t|j/ƒ¡ |j1�r-|  tj2|j1 3dd¡¡ |j4d u�r;|  tj5|j4¡ |j6d u�rI|  tj7|j6¡ |j8�rW|  tj9t|j8ƒ¡ |j:�rc|  tj;|j:¡ |  tj<t|j=ƒ¡ |j>�ry|  tj?|j>¡ |j@�r…|  tjA|j@¡ |jB�r•|  tjC|jB 3dd¡¡ |jD�r¡|  tjE|jD¡ |jF�r­|  tjG|jF¡ |jH�rÃdd„ |jHD ƒ}|  tjId 	|¡¡ |jJ�rÏ|  tjK|jJ¡ |jLd u�rÝ|  tjM|jL¡ |jN�ré|  tjO|jN¡ |jP�rô|  tjQd¡ |jRd u�r|  tjSd 	|jR¡¡ |�rN|jT�rNg }|jT U¡ D ]+\}}	| V¡ }
|
|v �r"�q|
dk�r.|	dk�r.�q| W|
¡ | X|› d	|	› �¡ �q|�rN|  tjYd
d„ |D ƒ¡ |�rd|jZ�rd|  tj[dd„ |jZ U¡ D ƒ¡ |�r||j\�r~|  tj]dd„ |j\ U¡ D ƒ¡ d S d S d S )Nr«   r$   rÍ   ri   c                 S  ó   g | ]}t |ƒ‘qS rC   ©rC  ©r€   r@  rC   rC   rJ   rˆ   Ô  ó    ÿÿz&_apply_fingerprint.<locals>.<listcomp>c                 S  rI  rC   rJ  rK  rC   rC   rJ   rˆ     rL  Úhostr¬   c                 S  ó   g | ]}|  ¡ ‘qS rC   ©Úencode©r€   r¡   rC   rC   rJ   rˆ   8  r,  c                 S  ó"   g | ]\}}|› d |› �  ¡ ‘qS ©r¬   rO  ©r€   r†   r‡   rC   rC   rJ   rˆ   =  ó    ÿÿc                 S  rR  rS  rO  rT  rC   rC   rJ   rˆ   F  rU  )^rÝ   r(  rÒ   r   rÓ   r   rÔ   Útls_ciphersr×   rp   Útls_extension_orderr?  r  rÛ   ÚSSL_ENABLE_ALPNrœ   Útls_alpnÚSSL_ENABLE_ALPSÚtls_alpsÚSSL_ENABLE_TICKETÚtls_session_ticketr  r  Útls_use_new_alps_codepointÚTLS_USE_NEW_ALPS_CODEPOINTÚTLS_STATUS_REQUESTÚTLS_SIGNED_CERT_TIMESTAMPSÚtls_signed_cert_timestampsÚTLS_KEY_SHARES_LIMITÚtls_key_shares_limitr  r  Útls_signature_hashesr  Útls_supported_groupsrÜ   Útls_delegated_credentialsr  r  r  r  Útls_echÚECHÚtls_trust_anchorsÚTLS_TRUST_ANCHORSÚhttp2_settingsrð   Úhttp2_window_updaterñ   Úhttp2_pseudo_headers_orderró   rª   r	  r
  r  r  r  r  r÷   r  r  r  r  r  Úhttp3_settingsrú   Úhttp3_pseudo_headers_orderrû   r  r  Úhttp3_header_orderÚHTTP3_HTTPHEADER_ORDERÚhttp3_tls_supported_groupsÚHTTP3_SSL_EC_CURVESrý   rü   Úquic_cid_lengthÚQUIC_CID_LENGTHÚws_header_orderÚWS_HTTPHEADER_ORDERÚws_disable_session_ticketÚWS_SSL_DISABLE_TICKETÚws_tls_cert_compressionÚWS_SSL_CERT_COMPRESSIONÚheadersrŒ   r®   ÚaddrŽ   Ú
HTTPHEADERÚhttp3_headersÚHTTP3_HTTPHEADERÚ
ws_headersÚWS_HTTPHEADER)rÊ   rD  rE  rG  rÝ   rW  Únormalized_groupsr¨   r†   r‡   r:  rC   rC   rJ   Ú_apply_fingerprint£  s  

þÿÿÿþ
þ

ÿþþÿþÿ
þ

þþþþÿr…  Té   zgzip, deflate, br, zstd)$Úparams_listÚbase_urlÚdataÚcontentÚjsonÚheaders_listÚcookies_listÚfilesÚauthÚtimeoutÚallow_redirectsÚmax_redirectsÚproxies_listÚproxyÚ
proxy_authÚverify_listÚrefererÚaccept_encodingÚcontent_callbackÚimpersonaterË   rì   rù   Úextra_fprG  r   Úhttp_versionÚ	interfaceÚdoh_urlÚcertÚstreamÚmax_recv_speedÚ	multipartÚqueue_classÚevent_classÚcurl_optionsÚmethodÚ
HttpMethodr‡  úFlist[Union[dict[str, object], list[object], tuple[object, ...], None]]rˆ  úOptional[str]r‰  úOptional[RequestData]rŠ  úOptional[RequestContent]r‹  ú-Optional[dict[object, object] | list[object]]rŒ  úlist[Optional[HeaderTypes]]r�  úlist[Optional[CookieTypes]]rŽ  úOptional[dict[object, object]]r�  úOptional[tuple[str, str]]r�  ú3Optional[Union[float, tuple[float, float], object]]r‘  ú&Optional[Union[bool, CurlFollow, str]]r’  úOptional[int]r“  úlist[Optional[ProxySpec]]r”  r•  r–  úlist[Union[bool, str, None]]r—  r˜  r™  úOptional[Callable[..., object]]rš  ú5Optional[Union[BrowserTypeLiteral, str, Fingerprint]]r›  ú/Optional[Union[ExtraFingerprints, ExtraFpDict]]r   úUnion[str, Literal[False]]rœ  ú4Optional[Union[CurlHttpVersion, HttpVersionLiteral]]r�  rž  rŸ  ú%Optional[Union[str, tuple[str, str]]]r   úOptional[bool]r¡  rœ   r¢  úOptional[CurlMime]r£  r   r¤  r¥  úOptional[dict[CurlOpt, str]]c       $   R        sØ  | }'|  ¡ }|d ur|n|}(d })|d urBt|tƒr| ¡ }*n[t|ttfƒr*t|ƒ}*nOt|dƒr6t|ƒ})d}*nCtt	t
t |ƒƒ})d}*n7t|ttB tB ƒrRt|ƒ ¡ }*n't|tƒr\| ¡ }*nt|tƒrf| ¡ }*nt|tƒrn|}*n|d u rud}*ntdƒ‚|d ur…t|dd� ¡ }*|d us‘|d us‘|d urœ|#d u rœ|)d u rœ|*}+nd }+|dkr®|)d u r®|' tjd¡ n|dkr»|' tj| ¡ ¡ |d	krÆ|' tjd¡ |\},}-|,rÑt||,ƒ}|-rØt||-ƒ}|rßt||ƒ}|rçt||d
�}|durït|ƒ}|' tj| ¡ ¡ |)d u�r&|' tjd¡ |' tj|)¡ t|)tƒ�r|)j�r|' tj |)¡ |' tj| ¡ ¡ n$|*�s.|dv �rJ|' tj!|*¡ |' tj"t#|*ƒ¡ |dk�rJ|' tj|¡ |\}.}/t|/t$ƒ�rW|/j%nd }0t$|.|0d�}1|1 &|/¡ |)d u�r’t|)tƒ�r|)j'd u�rt|)j'ƒ}2|2|1d< n|1 (d¡}2|2d u�r’|' tj)t*|2ƒ¡ g }3|1 +¡ D ]-\}4}5|5d u �r«|3 ,|4› d�¡ �q˜|5dk�rº|3 ,|4› d�¡ �q˜|3 ,|4› d|5› �¡ �q˜|d u�rÑt-|3ddƒ |d u �rçt|tƒ�rç|dk�rçt-|3ddƒ t|(tttfƒ�rù|(�rùt-|3ddƒ t-|3dddd� |' tj.dd„ |3D ƒ¡ |�rdd„ |3D ƒ}6nt/ƒ }6t0||1||+ƒ}7|' tj1d¡ |' tj2d¡ |	\}8}9|8�rI|8 3|7¡D ]}:|  tj2|: 4¡ ¡ �q<|9�rbt5|9ƒ};|; 3|7¡D ]}:|  tj2|: 4¡ ¡ �qU|
�rit6d ƒ‚|#�r•t	t|�pri ƒ 7¡ D ]\}4}5|#j8|4t|5tƒ�r‡|5 ¡ n|5d!� �qv|' tj9|#j:¡ |�r®|\}<}=|' tj;|< ¡ ¡ |' tj<|= ¡ ¡ |d u �rµd"}t|tƒ�rï|\}>}?|>|? }@|' tj=t*|>d# ƒ¡ |!�sÝ|' tj>t*|@d# ƒ¡ nE|' tj?d¡ |' tj@tA B|@¡¡ n3t|t*tCB ƒ�r"|!�s|' tj>t*|d# ƒ¡ n|' tj=t*|d# ƒ¡ |' tj?d¡ |' tj@tA B|¡¡ t|tDƒ�r2|' tjEt*|ƒ¡ n|d$k�rB|' tjEt*tDjFƒ¡ n	|' tjEt*|ƒ¡ |' tjG|¡ |\}A}B|�r`|B�r`td%ƒ‚|�rgd&|i}B|Bd u �rn|A}B|B�rì|' tjHd¡ tI|ƒ}Ct	tJt |B (|CjK|B (d&¡¡ƒ}|CjL�r¦|B (|CjK› d'|CjL› �|B (d(|CjL› �¡¡�p¥|}|d u�rì|' tjM|¡ |CjKd)k�rÓ| Nd*¡�rÆtOjPd+tQd,d-� | Nd.¡�sÓ|' tjRd¡ |�rì|\}<}=|' tjS|< ¡ ¡ |' tjT|= ¡ ¡ |\}D}E|Edu �pü|D �oü|Ed u }F|F|'_U|F�r|' tjVd"¡ |' tjWd"¡ t|Etƒ�r%|' tjX|E¡ |' tjY|E¡ |Ed/v �r>t|Dtƒ�r>|' tjX|D¡ |' tjY|D¡ |�rJ|' tjZ| ¡ ¡ |d u�rX|' tj[| ¡ ¡ | �r{t| tƒ�ri|' tj\| ¡ n| \} }G|' tj\| ¡ |' tj]|G¡ |�r‰t^|ƒ}|' tj_|¡ |�rÐt|t`ƒ�ršta|'||6|ƒ n6tb|ƒ�r¸tc|ƒ}H|'jd|H|d0�}I|Id"k�r·ted1|H› d2�ƒ‚ntf|ƒ}J|Jd u �rÉted1|› d2�ƒ‚ta|'|J|6|ƒ |�r|d u�ràtOjPd3tQdd-� d}Kt|tgƒ�rî|jh�rîd}Kt|tƒ�rü| (d4¡�rüd}Kti|'||Kd5� |�r%t|tƒ�rtgd=i |¤Ž}|d u�r tOjPd6tQdd-� tj|'|ƒ |�r:|d u�r5tOjPd7tQdd-� tk|'|ƒ |�rO|d u�rJtOjPd8tQdd-� tl|'|ƒ d }Ld ‰d ‰ d ‰|!�rs|$ƒ ‰|%ƒ ‰ |%ƒ ‰‡ ‡‡fd9d:„}M|' tjm|M¡ n|d u�r€|' tjm|¡ n
tƒ }L|' tjn|L¡ tƒ }N|' tjo|N¡ |�r¾|}Od;|v�rµztp q|¡ W n
 tr�y¯   Y nw d<|› �}O|' tjs|O ¡ ¡ |�rÊ|' tjt| ¡ ¡ |' tju|"¡ |&�rä|& 7¡ D ]\}P}Q|' |P|Q¡ �qØ|7|L|Nˆˆ ˆfS )>NÚreadó    z3data must be dict/list/tuple, str, BytesIO or bytes)rÍ   r«   )Ú
separatorsr:   r$   r9   r>   )rj   F)r:   r;   r@   )ÚencodingzContent-Lengthzcontent-lengthr«   ri   rµ   r¬   zContent-Typezapplication/jsonz!application/x-www-form-urlencodedzapplication/octet-streamÚExpectT)rª   c                 S  rN  rC   rO  rQ  rC   rC   rJ   rˆ   ø  r,  z$set_curl_options.<locals>.<listcomp>c                 S  s   h | ]}t |ƒ’qS rC   )r¼   )r€   r²   rC   rC   rJ   r+  ü  r,  z#set_curl_options.<locals>.<setcomp>ÚALLz€files is not supported, use `multipart`. See examples here: https://github.com/lexiforest/curl_cffi/blob/main/examples/upload.py)Únamer‰  r   iè  rn   z)Cannot specify both 'proxy' and 'proxies'Úallz://zall://Úhttpszhttps://z¥Make sure you are using https over https proxy, otherwise, the proxy prefix should be 'http://' not 'https://', see: https://github.com/lexiforest/curl_cffi/issues/6r   rÐ   Úsocks)NT)rG  zImpersonating z is not supportedz?JA3 fingerprint was altered after impersonated version was set.r  )rÌ   zCExtra fingerprints were altered after impersonated version was set.zBAkamai fingerprint was altered after impersonated version was set.z@Perk fingerprint was altered after impersonated version was set.c                   s.   ˆ   ¡ sˆ  ¡  ˆ  ¡ rtS ˆ | ¡ t| ƒS r5  )Úis_setrr   r   Ú
put_nowaitr™   )Úchunk©Úheader_recvedr½   Úquit_nowrC   rJ   Úqputí  s   
zset_curl_options.<locals>.qputú!zhost!rC   )vÚupperr‰   rE   rP  ÚbytesÚ	bytearrayÚhasattrr1   r2   r   r   rŠ   r‹   Útupler   r	   r¿  Ú	TypeErrorr
   rÒ   r   r:   ÚCUSTOMREQUESTÚNOBODYr’   r   r{   r§   ÚURLÚUPLOADÚREADDATAÚ
rewindableÚSEEKDATAÚ
POSTFIELDSÚPOSTFIELDSIZEr™   r(   rÂ  ÚupdateÚlengthr�   ÚINFILESIZE_LARGErœ   Úmulti_itemsrŽ   r³   r  rr   r.   Ú
COOKIEFILEÚ
COOKIELISTÚget_cookies_for_curlÚto_curl_formatr%   ÚNotImplementedErrorrŒ   ÚaddpartÚMIMEPOSTÚ_formÚUSERNAMEÚPASSWORDÚCONNECTTIMEOUT_MSÚ
TIMEOUT_MSÚLOW_SPEED_LIMITÚLOW_SPEED_TIMEÚmathÚceilÚfloatr   ÚFOLLOWLOCATIONÚSAFEÚ	MAXREDIRSÚPROXY_CREDENTIAL_NO_REUSEr   r   re   rf   ÚPROXYr¯   rÙ   rÚ   r    ÚHTTPPROXYTUNNELÚPROXYUSERNAMEÚPROXYPASSWORDÚ_skip_cacertÚSSL_VERIFYPEERÚSSL_VERIFYHOSTÚCAINFOÚPROXY_CAINFOÚREFERERÚACCEPT_ENCODINGÚSSLCERTÚSSLKEYrb   rï   r!   r…  r;  r-   rš  r&   r8  r,   r  rë   r  rø   rþ   ÚWRITEFUNCTIONÚ	WRITEDATAÚ
HEADERDATAÚ	ipaddressÚ
ip_addressr�   Ú	INTERFACEÚDOH_URLÚMAX_RECV_SPEED_LARGE)RrÊ   r¦  rc   r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r’  r“  r”  r•  r–  r—  r˜  r™  rš  rË   rì   rù   r›  rG  r   rœ  r�  rž  rŸ  r   r¡  r¢  r£  r¤  r¥  r¢   Ú	body_dataÚstream_readerÚbodyÚrequest_bodyÚbase_paramsrv   Úbase_headersr}  rÂ  r¡   Úcontent_lengthr¨   ÚkÚvrE  ÚreqÚbase_cookiesÚcookiesÚmorselÚtemp_cookiesÚusernameÚpasswordÚconnect_timeoutÚread_timeoutÚall_timeoutÚbase_proxiesÚproxiesrŸ   Úbase_verifyÚverifyÚdisable_verifyr†   r:  ÚretrD  rÌ   ÚbufferrÏ  Úheader_bufferr‡   ÚoptionÚsettingrC   rÌ  rJ   r   M  s<  ,






















 ÿÿ&


þû
û



ÿÿ

ÿÿ
ý
ý

ý

ý


ÿ
r   )rT   rU   rD   r   )rc   rE   rD   rd   )ri   )rc   rE   rj   rE   )rc   rE   rv   r|   rD   rE   )r“   rE   rD   rE   )F)r¨   r©   r†   rE   r‡   rE   rª   rd   )r´   rE   rD   rE   r5  )r½   r¾   )r½   rÇ   )rÊ   r3   rË   rE   rÌ   rd   )rÊ   r3   rì   rE   )rÊ   r3   rù   rE   )rÊ   r3   rÿ   r,   )rT   rE   rD   r   )r3  rE   rD   r4  )r3  rE   rD   rd   )r<  rE   rD   rE   )r@  rE   rD   rE   )
rÊ   r3   rD  r!   rE  rF  rG  rd   rD   rH  )NrÊ   r3   r¦  r§  rc   rE   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Ë   r©  rì   r©  rù   r©  r›  r¸  rG  rd   r   r¹  rœ  rº  r�  r©  rž  r©  rŸ  r»  r   r¼  r¡  rœ   r¢  r½  r£  r   r¤  r   r¥  r¾  )kÚ
__future__r   Ú__all__Úasyncior	  rò  rÁ   rÙ   Úcollectionsr   Úcollections.abcr   r   Úior	   r‹  r
   Útypingr   r   r   r   r   r   r   r   Úurllib.parser   r   r   r   r   r   Úconstr   r   r   r   rÊ   r   r   Úutilsr    r   r7  r!   r"   r#   r  r%   Ú
exceptionsr&   r'   r}  r(   rš  r)   r*   r+   r,   r-   Úmodelsr.   rö   r/   r0   r1   r2   r3   r4   r5   r6   r7   Úsessionr8   r§  rr   rq   rB   r   Ú__annotations__rb   rh   r{   r’   Ú	frozensetrž   r¤   r§   r³   r¼   rÅ   rÉ   rë   rø   rþ   r  r(  r9  Ú DEPRECATED_NATIVE_TARGET_ALIASESrà  r8  r;  r?  rC  r…  r   rC   rC   rC   rJ   Ú<module>   sÊ    ( ÿ


;ÿ

ÿ


+


"
	




 2Ö