
    eig              #         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mZ d dl	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( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 er d
dl$m9Z9 ddl)m:Z: ddl.m;Z; ddl0m<Z<m=Z= ddl>m?Z? ed         Z@ed         ZA eBd          ZCe G d d                      ZD eD            ZEdeFd<   dd$ZGdd(ZHddd+ZIdd.ZJ eKd/          ZLdd1ZMdd2ZN	 ddd9ZOddd<ZPddd>ZQddAZRdddDZSddFZTddHZUddKZVg dddg g ddeEdLdMg ddg ddNdddddddLd)ddddd dddddO"ddZWdS )    )annotations)HttpVersionLiteralset_curl_optionsNOT_SETN)Counter)Callable)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)CurlCffiWarning   )Cookies)ImpersonateError
InvalidURL)Headers)TLS_CIPHER_NAME_MAPTLS_EC_CURVES_MAPTLS_VERSION_MAPExtraFingerprintsnormalize_browser_typetoggle_extension)Request)Curl)CookieTypes)HeaderTypes)BrowserTypeLiteralExtraFpDict)	ProxySpec)	GETPOSTPUTDELETEOPTIONSHEADTRACEPATCHQUERY)v1v2v2tlsv2_prior_knowledgev3v3onlyz!#$%&'()*+,/:;=?@[]~c                  &    e Zd ZdZdZd	dZd
dZdS )
NotSetTypez@
    Unique single initialized type distinct from ``None``.
     returnstrc                    dS Nr   rD   selfs    C/usr/local/lib/python3.11/dist-packages/curl_cffi/requests/utils.py__repr__zNotSetType.__repr__:       y    Literal['NOT_SET']c                    dS rH   rD   rI   s    rK   
__reduce__zNotSetType.__reduce__=   rM   rN   N)rE   rF   )rE   rO   )__name__
__module____qualname____doc__	__slots__rL   rQ   rD   rN   rK   rC   rC   2   sM          I        rN   rC   zFinal[NotSetType]r   version*Union[CurlHttpVersion, HttpVersionLiteral]rE   r   c                    | 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 )Nr<   r@   rA   r=   r>   r?   )r   V1_1V3V3ONLYV2_0V2TLSV2_PRIOR_KNOWLEDGE)rW   s    rK   normalize_http_versionr`   E   s|     $##	D!!	H		%%	D##	G		$$	(	(	(11NrN   urlrF   boolc                V    t          |           }t          |j        o|j                  S )z,Check if the provided url is an absolute url)r   rb   schemehostname)ra   
parsed_urls     rK   is_absolute_urlrg   X   s&    #J
!9j&9:::rN    	quote_strc                `   d                     t          t          |          z
            }t          |           }t	          |j        d          }t          |d|          }t          |j        |j	        t          |j        |          |j        ||j                                                  S )Nrh   Tkeep_blank_values)doseqsafern   )join
SAFE_CHARSsetr   r   queryr   r   rd   netlocr   pathparamsfragmentgeturl)ra   ri   rn   rf   parsed_get_argsencoded_get_argss         rK   quote_path_and_paramsr{   ^   s    77:I.//D#J
 0DIIIO 4HHHjoD)))  fhhrN   rv   Union[dict, list, tuple]c                  	 t          |           }t          |j        d          }t          d |D                       }t	          |t
                    r!t          |                                          }t          d |D                       }|D ]\  	t	          	t          t
          z            rt          	          	|
                              dk    r)|
                              dk    r	fd|D             }s|                    	f           t          |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              3  &   K   | ]}|d          V  dS r   NrD   .0xs     rK   	<genexpr>z$update_url_params.<locals>.<genexpr>   s&      ==qt======rN   c              3  &   K   | ]}|d          V  dS r   rD   r   s     rK   r   z$update_url_params.<locals>.<genexpr>   s&      44qt444444rN   r!   c                4    g | ]}|d          k    r|nfS )r   rD   )r   r   keyvalues     rK   
<listcomp>z%update_url_params.<locals>.<listcomp>   s:       9:adckkU|  rN   )rm   )r   r   rs   r   
isinstancedictlistitemsrb   r
   getappendr   r   rd   rt   ru   rv   rw   rx   )
ra   rv   rf   ry   old_args_counternew_args_counterrz   new_urlr   r   s
           @@rK   update_url_paramsr   m   s     #J  
 0DIIIO ==_=====&$ &fllnn%%44V44444 
1 
1
UeTD[)) 	!%LLE$$)).>.B.B3.G.G1.L.L    >M  OO ""C<0000 !===   fhh  NrN   zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~uric                   |                      d          }t          dt          |                    D ]}||         dd         }t          |          dk    r|                                rt	 t	          t          |d                    }n&# t          $ r}t          d| d          |d}~ww xY w|t          v r|||         dd         z   ||<   d||          ||<   d||          ||<   d		                    |          S )
zUn-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: ''Nrh   )
splitrangelenisalnumchrint
ValueErrorr$   UNRESERVED_SETrp   )r   partsihces         rK   unquote_unreservedr      s    IIcNNE1c%jj!! & &!HQqSMq66Q;;199;;;SAr

OO S S S !Ja!J!J!JKKQRRS N""uQx|+a)uQx>>a%58~~E!HH775>>s   -B
B.B))B.c                    d}d}	 t          t          |           |          S # t          $ r t          | |          cY S w xY w)zRe-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_percents      rK   requote_urir      sk     01	5 ',,3DEEEE 5 5 5 S3444444	5s   $ AAFheader_lines	list[str]r   r   replacec                   d}t          |           D ]Q\  }}|                                                    |                                dz             rd}|r
| d| | |<    nR|s|                     | 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lines          rK   update_header_liner      s     E|,,  	T::<<""399;;#455 	E 6'*$5$5e$5$5S!E		
  /s--e--...../ /rN   qqueue.Queuec                B    	 | j         d         S # t          $ r |cY S w xY wNr   )queue
IndexErrorr   defaults     rK   
peek_queuer      s7    wqz       asyncio.Queuec                B    	 | j         d         S # t          $ r |cY S w xY wr   )_queuer   r   s     rK   peek_aio_queuer      s7    x{   r   curlr-   c                ~    h d}||z
  }|D ]}t          | |d           ||z
  }|D ]}t          | |d           d S )N>     r   
         r      #   +   -   3   T)enableF)r+   )r   extension_idsdefault_enabledto_enable_idsext_idto_disable_idss         rK   toggle_extensions_by_idsr      s{    DDDO!O3M 4 4vd33333 %}4N  5 5ve444445 5rN   ja3permutec                   |                     d          \  }}}}}t          t          |                   }|                     t          j        |t          j        z             |t          j        k    s
J d            g }	|                     d          D ]\}
t          |
          }t          j
        |          }|s t          dt          |           d          |	                    |           ]|                     t          j        d                    |	                     |                    d          r&|dd	         }t#          j        d
t&          d           t)          d |                     d          D                       }t+          | |           |s |                     t          j        |           g }|                     d          D ]3}t          |          }t.          |         }|                    |           4|                     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-21NzPadding(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!   
stacklevelc              3  4   K   | ]}t          |          V  d S N)r   )r   r   s     rK   r   z"set_ja3_options.<locals>.<genexpr>#  s(      >>1A>>>>>>rN   r   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    rr   r   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_namer   curve_namescurvecurve_id
curve_names                     rK   set_ja3_optionsr     sI    ?Biinn;K*fm&s;'7'78KK"$4~7Q$QRRR~55557U555L--$$ ) )KK	)-i88 	L"#JS^^#J#J#JKKKK((((KK',)?)?@@@5!! 
_
M 	
 	
 	
 	
 >>
(8(8(=(=>>>>>MT=111 =G/<<<Kc"" ' 'u::&x0
:&&&&KK%sxx'<'<===}"""$K"""""rN   akamaic                   |                     d          \  }}}}|                    dd          }|                     t          j        t
          j                   |                     t          j        |           |                     t          j        t          |                     |dk    r |                     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   ;0rh   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_orders         rK   set_akamai_optionsr	  4  s     6<\\#5F5F2HmWl S))HKK$o&:;;;KK&111KK+S-?-?@@@#~~G)7333 	KK2L4H4Hb4Q4QRRRRRrN   perkc                    |                     d          \  }}}|                     t          j        |           |                     t          j        |                    dd                     |                     t          j        |           d S )Nr   r   rh   )r   r   r   HTTP3_SETTINGSHTTP3_PSEUDO_HEADERS_ORDERr   QUIC_TRANSPORT_PARAMETERS)r   r
  r  r  quic_transport_parameterss        rK   set_perk_optionsr  J  sw    8<

35Hl5KK&111 	KK2L4H4Hb4Q4QRRRKK13LMMMMMrN   fpr)   c                   |j         r8|                     t          j        d                    |j                              |                     t          j        |j        t          j        z             |                     t          j	        t          |j                             |                     t          j        t          |j                             |                     t          j        |j                   |                     t          j        |j                   |                     t          j        |j                   |j        r%|                     t          j        |j                   |j        r%|                     t          j        |j                   |j        r%|                     t          j        |j                   |j        %|                     t          j        |j                   |j        %|                     t          j        |j                   |j        %|                     t          j        |j                    |j!        '|                     t          j"        |j!                   d S d S )Nr   )#tls_signature_algorithmsr   r   SSL_SIG_HASH_ALGSrp   r   tls_min_versionr   r   
TLS_GREASEr   
tls_greaseSSL_PERMUTE_EXTENSIONStls_permute_extensionsSSL_CERT_COMPRESSIONtls_cert_compressionSTREAM_WEIGHThttp2_stream_weightSTREAM_EXCLUSIVEhttp2_stream_exclusivetls_delegated_credentialTLS_DELEGATED_CREDENTIALStls_record_size_limitTLS_RECORD_SIZE_LIMIThttp2_no_priorityHTTP2_NO_PRIORITYform_boundaryFORM_BOUNDARYsplit_cookiesSPLIT_COOKIEShttp3_sig_hash_algsHTTP3_SIG_HASH_ALGSsig_hash_algshttp3_tls_extension_orderHTTP3_TLS_EXTENSION_ORDER)r   r  s     rK   set_extra_fpr/  V  s   	" VG-sxx8S/T/TUUUKK"B$69S$STTTKK"C$6$6777KK.B4M0N0NOOOKK,b.EFFFKK%r'=>>>KK("*CDDD	" TG5r7RSSS	 MG123KLLL	 EG-r/CDDD	#G)2+;<<<	#G)2+;<<<	)G/1ABBB	#/G5r7STTTTT 0/rN   T   zgzip, deflate, br, zstd)"params_listbase_urldata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_fpdefault_headersr   http_version	interfacecertstreammax_recv_speed	multipartqueue_classevent_classcurl_optionsmethod
HttpMethodr1  Flist[Union[dict[str, object], list[object], tuple[object, ...], None]]r2  Optional[str]r3  IOptional[Union[dict[str, str], list[tuple[object]], str, BytesIO, bytes]]r4  -Optional[dict[object, object] | list[object]]r5  list[Optional[HeaderTypes]]r6  list[Optional[CookieTypes]]r7  Optional[dict[object, object]]r8  Optional[tuple[str, str]]r9  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@  rA  rB  Optional[Callable[..., object]]rC  (Optional[Union[BrowserTypeLiteral, str]]rD  /Optional[Union[ExtraFingerprints, ExtraFpDict]]rE  r   Union[str, Literal[False]]rF  4Optional[Union[CurlHttpVersion, HttpVersionLiteral]]rG  rH  %Optional[Union[str, tuple[str, str]]]rI  Optional[bool]rJ  r   rK  Optional[CurlMime]rL  r   rM  rN  Optional[dict[CurlOpt, str]]c       "   	     N  JKL | }%|                                 }|dk    r!|%                    t          j        d           n8|dk    r2|%                    t          j        |                                           |dk    r |%                    t          j        d           |\  }&}'|&rt          ||&          }|'rt          ||'          }|rt          ||          }|rt          ||          }|durt          |          }|%                    t          j        |                                           t          |t          t          z  t          z            r"t!          |                                          }(nt          |t"                    r|                                }(nVt          |t$                    r|                                }(n,t          |t(                    r|}(n|d}(nt+          d          |#t-          |d	
                                          }(|d up|d u})|)r|!|(nd }*|(s|dv rs|%                    t          j        |(           |%                    t          j        t3          |(                     |dk    r |%                    t          j        |           |\  }+},t          |,t4                    r|,j        nd }-t5          |+|-          }.|.                    |,           g }/|.                                D ]Y\  }0}1|1|/                    |0 d            |1dk    r|/                    |0 d           ?|/                    |0 d|1            Z|t?          |/dd           t          |t                    r|dk    rt?          |/dd           t          |t"          t(          z            r|rt?          |/dd           t?          |/ddd           |%                    t          j         d |/D                        tC          ||.||*          }2|%                    t          j"        d           |%                    t          j#        d           |\  }3}4|3rJ|3$                    |2          D ]4}5|                     t          j#        |5%                                           5|4rYtM          |4          }6|6$                    |2          D ]4}5|                     t          j#        |5%                                           5|	rtO          d          |!rtQ          t          |pi           )                                D ]E\  }0}1|!*                    |0t          |1t"                    r|1                                n|1           F|%                    t          j+        |!j,                   |
ri|
\  }7}8|%                    t          j-        |7                                           |%                    t          j.        |8                                           |d}t          |t                    r|\  }9}:|9|:z   };|%                    t          j/        ta          |9dz                       |s2|%                    t          j1        ta          |;dz                       n%|%                    t          j2        d           |%                    t          j3        ti          j5        |;                     nt          |t`          tl          z            r|s1|%                    t          j1        ta          |dz                       n|%                    t          j/        ta          |dz                       |%                    t          j2        d           |%                    t          j3        ti          j5        |                     t          |tn                    r.|%                    t          j8        ta          |                     nk|dk    r8|%                    t          j8        ta          tn          j9                             n-|%                    t          j8        ta          |                     |%                    t          j:        |           |\  }<}=|r|=rt+          d          |rd |i}=|=|<}=|=r|%                    t          j;        d           ty          |          }>tQ          tz          t"                   |=>                    |>j?        |=>                    d                               }|>j@        rB|=>                    |>j?         d!|>j@         |=>                    d"|>j@                             p|}||%                    t          jA        |           |>j?        d#k    rf|B                    d$          rt          jD        d%t          d&'           |B                    d(          s |%                    t          jF        d           |ri|\  }7}8|%                    t          jG        |7                                           |%                    t          jH        |8                                           |\  }?}@|@du p|? o|@d u }A|A|%_I        |Ar@|%                    t          jJ        d           |%                    t          jK        d           t          |@t"                    r |%                    t          jL        |@           |@d)v r5t          |?t"                    r |%                    t          jL        |?           |r2|%                    t          jM        |                                           |2|%                    t          jN        |                                           |r{t          |t"                    r!|%                    t          jO        |           nE|\  }}B|%                    t          jO        |           |%                    t          jP        |B           |r/t          |          }|%                    t          jR        |           |r?t          |          }|%T                    ||*          }C|Cdk    rt          d+| d,          |r||rt          jD        d-t          d'           d}Dt          |t                    r	|jW        rd}Dt          |t                    r|>                    d.          rd}Dt          |%||D/           |rOt          |t                    rt          d4i |}|rt          jD        d0t          d'           t          |%|           |r.|rt          jD        d1t          d'           t          |%|           |r.|rt          jD        d2t          d'           t          |%|           d }Ed Kd Jd L|rF |"            K |#            J |#            LJKLfd3}F|%                    t          j[        |F           nQ|!|%                    t          j[        |           n.t%                      }E|%                    t          j\        |E           t%                      }G|%                    t          j]        |G           |r2|%                    t          j^        |                                           |%                    t          j_        |            |$r0|$)                                D ]\  }H}I|%                    |H|I           |2|E|GKJLfS )5Nr4   r!   r3   r8   )ri   FrN   z3data must be dict/list/tuple, str, BytesIO or bytes)r   r   )
separators)r4   r5   r:   )encodingr   rh   r   r   zContent-Typezapplication/jsonz!application/x-www-form-urlencodedzapplication/octet-streamExpectT)r   c                6    g | ]}|                                 S rD   )encode)r   r   s     rK   r   z$set_curl_options.<locals>.<listcomp>  s     !C!C!C!((**!C!C!CrN   ALLzfiles is not supported, use `multipart`. See examples here: https://github.com/lexiforest/curl_cffi/blob/main/examples/upload.py)namer3  r   i  rn   z)Cannot specify both 'proxy' and 'proxies'allz://zall://httpszhttps://zMake 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)rE  zImpersonating z is not supportedz?JA3 fingerprint was altered after impersonated version was set.r  )r   zBExtra fingerprints was 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                                                                  rt          S                     |            t	          |           S r   )is_setrr   r   
put_nowaitr   )chunkheader_recvedr   quit_nows    rK   qputzset_curl_options.<locals>.qput  s_     '')) $!!###   ,++LLu::rN   rD   )`upperr   r   r4   CUSTOMREQUESTrl  NOBODYr   r   r{   r   URLr   r   r   tupler   rF   r	   readbytes	TypeErrorr
   
POSTFIELDSPOSTFIELDSIZEr   r%   ri  updatemulti_itemsr   r   
HTTPHEADERr,   
COOKIEFILE
COOKIELISTget_cookies_for_curlto_curl_formatr"   NotImplementedErrorr   r   addpartMIMEPOST_formUSERNAMEPASSWORDCONNECTTIMEOUT_MSr   
TIMEOUT_MSLOW_SPEED_LIMITLOW_SPEED_TIMEmathceilfloatr   FOLLOWLOCATIONSAFE	MAXREDIRSPROXY_CREDENTIAL_NO_REUSEr   r   r   rd   re   PROXYr   r   r   r    HTTPPROXYTUNNELPROXYUSERNAMEPROXYPASSWORD_skip_cacertSSL_VERIFYPEERSSL_VERIFYHOSTCAINFOREFERERACCEPT_ENCODINGSSLCERTSSLKEYr`   r   r*   rC  r#   r)   r  r   r/  r	  WRITEFUNCTION	WRITEDATA
HEADERDATA	INTERFACEMAX_RECV_SPEED_LARGE)Mr   rO  ra   r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  r   r   r
  rD  rE  r   rF  rG  rH  rI  rJ  rK  rL  rM  rN  r   base_paramsrv   bodybody_providedrequest_bodybase_headersheadersri  r   r   kvreqbase_cookiescookiesmorseltemp_cookiesusernamepasswordconnect_timeoutread_timeoutall_timeoutbase_proxiesproxiesr   base_verifyverifydisable_verifyr   retr   bufferrx  header_bufferoptionsettingrv  r   rw  sM                                                                             @@@rK   r   r   p  s   X 	A\\^^F 	q!!!!	5	&888	### &K 2[11 -V,, %h$$ :#C5999E#HHW[#**,,''' $te+,, O%%''	D#		 	O{{}}	D'	"	" Oyy{{	D%	 	  O	MNNNTj11188::$8D(8M(HY->44DL  4v111	#T***	&D		222U??HHW*F333 )L' $.gw#?#?IwTHx000AHHW L - -191(((("WW1((((1,,,, <9KLLL$ 
&F"2"2.*M	
 	
 	
 $e$$ U U<9STTT |Xr4@@@@HHW!C!Cl!C!C!CDDD
#q&,
/
/C HHW%%%HHW'''(L' E"77<< 	E 	EFKK*F,A,A,C,CDDDD Ew''"77<< 	E 	EFKK*F,A,A,C,CDDDD  
!S
 
 	
  4tzr**0022 	T 	TDAq1As9K9K+R188:::QRSSSS	!9?333  6!(	!8??#4#4555	!8??#4#4555 '5!! A(/%%4	*C$0F,G,GHHH 	EHHW'[4-?)@)@AAAA HHW,a000HHW+TY{-C-CDDDD	GS5[	)	) A 	AHHW'Wt^)<)<====HHW.GdN0C0CDDDHHW,a000HHW+TYw-?-?@@@ /:.. ?	'_)=)=>>>>	F	"	"	'Z_)=)=>>>>	'_)=)=>>> HHW... )L' E ECDDD !%. &C
 	
2A666Xc]GKKgkk%>P>P$Q$QRR> 	|8888KK 9 9 9::     HHW]E***|w&&##J// MP (#$    ''00 9HHW4a888  C%/"(.0A0ABBB.0A0ABBB &Ku_JK(JFdNN#AN ,	'+++	'+++ &# )	((( *[#">">	---  4	'.."2"2333 "	(/*@*@*B*BCCC  *dC   	*HHW_d++++ID#HHW_d+++HHW^S)))  5-l;;	%|444  T,[99mmKmII!88"#RK#R#R#RSSS  1 	MQ   
 h 122 	x7V 	Gh%% 	(,,7O*P*P 	G30000  	"h%% 	5(44844H 	MT   
 	Q!!!  & 	MT   
 	1f%%%  $ 	MR   
 	1d###FAMH ,KMM#;==	 	 	 	 	 	 	 	
&----		%	&(89999	"F+++IIMHHW///  8	"I$4$4$6$6777 HHW)>:::  &+1133 	& 	&OFGHHVW%%%%q-AArN   )rW   rX   rE   r   )ra   rF   rE   rb   )rh   )ra   rF   ri   rF   )ra   rF   rv   r|   rE   rF   )r   rF   rE   rF   )F)r   r   r   rF   r   rF   r   rb   r   )r   r   )r   r   )r   r-   )r   r-   r   rF   r   rb   )r   r-   r   rF   )r   r-   r
  rF   )r   r-   r  r)   )Jr   r-   rO  rP  ra   rF   r1  rQ  r2  rR  r3  rS  r4  rT  r5  rU  r6  rV  r7  rW  r8  rX  r9  rY  r:  rZ  r;  r[  r<  r\  r=  rR  r>  rX  r?  r]  r@  rR  rA  rR  rB  r^  rC  r_  r   rR  r   rR  r
  rR  rD  r`  rE  rb   r   ra  rF  rb  rG  rR  rH  rc  rI  rd  rJ  r   rK  re  rL  r   rM  r   rN  rf  )X
__future__r   __all__asyncior  r   r   collectionsr   collections.abcr   ior	   r4  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  r"   
exceptionsr#   r$   r  r%   rC  r&   r'   r(   r)   r*   r+   modelsr,   r-   r.   r/   r0   r1   sessionr2   rP  r   rr   rq   rC   r   __annotations__r`   rg   r{   r   	frozensetr   r   r   r   r   r   r   r   r	  r  r/  r   rD   rN   rK   <module>r     s   " " " " " " "
?
?
?           $ $ $ $ $ $             S S S S S S S S S S S S S S S S S S S S T T T T T T T T T T T T T T T T H H H H H H H H H H H H 1 1 1 1 1 1 1 1 # # # # # #       4 4 4 4 4 4 4 4                            #$$$$$$$$$$$$<<<<<<<<"""""" P
 VW S'((
         (Z\\ ) ) ) )   &; ; ; ;    4 4 4 4v M 
   ,5 5 5 5, DI/ / / / /        5 5 5 5"+L +L +L +L +L\S S S S,	N 	N 	N 	NU U U UB 	" 	:>0202,0&*CJ>B#%.0,002!%>8<<@ @D (*IM#26!$(15UBB BB BB BB BB BB BB BBrN   