§
    ‹ŸjHa  ã                   óœ  — 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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mZ ddlmZ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 ddlZej        rdd
lmZm Z   ej!        d¦  «        Z" ej#        d¦  «        Z$ G d„ de¦  «        Z% G d„ de¦  «        Z&e'dk    r ej(        e%¦  «          e¦   «          dS dS )z5Non-blocking HTTP client implementation using pycurl.é    N)ÚBytesIO)Úhttputil)Úioloop)Úutf8Ú
native_str)ÚHTTPRequestÚHTTPResponseÚ	HTTPErrorÚAsyncHTTPClientÚmain)Úapp_log)ÚDictÚAnyÚCallableÚUnionÚOptional)ÚDequeÚTupleztornado.curl_httpclients   |
c            
       ó¼  ‡ — e Zd Z	 d'dedeeeef                  ddfˆ fd„Zd(ˆ fd„Z	de
d	eegdf         ddfd
„Zdededededdf
d„Zdeddfd„Zdededdfd„Zd(d„Zd(d„Zd(d„Zd(d„Z	 	 d)dej        dee         dee         ddfd„Zd	eddfd„Zdej        fd„Zdej        de
dedej        ddf
d „Zdej        d!eegdf         d"eddfd#„Zd$ed%eddfd&„Z ˆ xZ!S )*ÚCurlAsyncHTTPClienté
   NÚmax_clientsÚdefaultsÚreturnc                 óØ  •‡ — t          ¦   «                              |¬¦  «         t          j        ¦   «         ‰ _        ‰ j                             t          j        ‰ j        ¦  «         ‰ j                             t          j        ‰ j	        ¦  «         ˆ fd„t          |¦  «        D ¦   «         ‰ _        ‰ j        d d …         ‰ _        t          j        ¦   «         ‰ _        i ‰ _        d ‰ _        t%          j        ‰ j        d¦  «        ‰ _        ‰ j                             ¦   «          t          j        ¦   «         }‰ j                             |¦  «         ‰ j                             |¦  «         d S )N)r   c                 ó8   •— g | ]}‰                      ¦   «         ‘ŒS © )Ú_curl_create)Ú.0ÚiÚselfs     €úd/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/curl_httpclient.pyú
<listcomp>z2CurlAsyncHTTPClient.initialize.<locals>.<listcomp><   s%   ø€ ÐGÐGÐG¨q�t×(Ò(Ñ*Ô*ÐGÐGÐGó    éè  )ÚsuperÚ
initializeÚpycurlÚ	CurlMultiÚ_multiÚsetoptÚM_TIMERFUNCTIONÚ_set_timeoutÚM_SOCKETFUNCTIONÚ_handle_socketÚrangeÚ_curlsÚ
_free_listÚcollectionsÚdequeÚ	_requestsÚ_fdsÚ_timeoutr   ÚPeriodicCallbackÚ_handle_force_timeoutÚ_force_timeout_callbackÚstartÚCurlÚ
add_handleÚremove_handle)r!   r   r   Údummy_curl_handleÚ	__class__s   `   €r"   r'   zCurlAsyncHTTPClient.initialize4   s<  øø€ õ 	‰Œ×Ò HÐÑ-Ô-Ð-åÔ&Ñ(Ô(ˆŒØŒ×Ò�6Ô1°4Ô3DÑEÔEÐEØŒ×Ò�6Ô2°DÔ4GÑHÔHÐHØGÐGÐGÐGµE¸+Ñ4FÔ4FÐGÑGÔGˆŒØœ+ a a aœ.ˆŒåÔÑÔð 	Œð ˆŒ	ØˆŒõ (.Ô'>ØÔ&¨ñ(
ô (
ˆÔ$ð 	Ô$×*Ò*Ñ,Ô,Ð,õ #œK™MœMÐØŒ×ÒÐ0Ñ1Ô1Ð1ØŒ×!Ò!Ð"3Ñ4Ô4Ð4Ð4Ð4r$   c                 óP  •— | j                              ¦   «          | j        �| j                             | j        ¦  «         | j        D ]}|                     ¦   «          Œ| j                             ¦   «          t          ¦   «                              ¦   «          d | _         d | _        d S ©N)	r:   Ústopr7   Úio_loopÚremove_timeoutr1   Úcloser*   r&   )r!   Úcurlr@   s     €r"   rF   zCurlAsyncHTTPClient.closeV   s’   ø€ ØÔ$×)Ò)Ñ+Ô+Ð+ØŒ=Ð$ØŒL×'Ò'¨¬Ñ6Ô6Ð6Ø”Kð 	ð 	ˆDØ�JŠJ‰LŒLˆLˆLØŒ×ÒÑÔÐÝ‰Œ�Š‰Œˆð
 (,ˆÔ$ØˆŒˆˆr$   ÚrequestÚcallbackc                 óÀ   — | j                              ||| j                             ¦   «         f¦  «         |                      ¦   «          |                      d¦  «         d S ©Nr   )r5   ÚappendrD   ÚtimeÚ_process_queuer-   )r!   rH   rI   s      r"   Ú
fetch_implzCurlAsyncHTTPClient.fetch_imple   s[   € ð 	Œ×Ò˜w¨°$´,×2CÒ2CÑ2EÔ2EÐFÑGÔGÐGØ×ÒÑÔÐØ×Ò˜!ÑÔÐÐÐr$   ÚeventÚfdÚmultiÚdatac           	      ó0  — t           j        t          j        j        t           j        t          j        j        t           j        t          j        j        t           j	        t          j        j        t          j        j        z  i}|t           j
        k    r/|| j        v r$| j                             |¦  «         | j        |= dS dS ||         }|| j        v r| j                             |¦  «         | j                             || j        |¦  «         || j        |<   dS )z_Called by libcurl when it wants to change the file descriptors
        it cares about.
        N)r(   Ú	POLL_NONEr   ÚIOLoopÚNONEÚPOLL_INÚREADÚPOLL_OUTÚWRITEÚ
POLL_INOUTÚPOLL_REMOVEr6   rD   Úremove_handlerÚadd_handlerÚ_handle_events)r!   rP   rQ   rR   rS   Ú	event_mapÚioloop_events          r"   r/   z"CurlAsyncHTTPClient._handle_socketl   sç   € õ
 Ô�fœmÔ0ÝŒN�FœMÔ.ÝŒO�Vœ]Ô0ÝÔ�vœ}Ô1µF´MÔ4GÑGð	
ˆ	ð •FÔ&Ò&Ð&Ø�T”YˆˆØ”×+Ò+¨BÑ/Ô/Ð/Ø”I˜b�M�M�Mð ˆð % UÔ+ˆLð �T”YˆˆØ”×+Ò+¨BÑ/Ô/Ð/ØŒL×$Ò$ R¨Ô)<¸lÑKÔKÐKØ(ˆDŒI�b‰MˆMˆMr$   Úmsecsc                 óÖ   — | j         �| j                             | j         ¦  «         | j                             | j                             ¦   «         |dz  z   | j        ¦  «        | _         dS )z(Called by libcurl to schedule a timeout.Ng     @�@)r7   rD   rE   Úadd_timeoutrM   Ú_handle_timeout)r!   rc   s     r"   r-   z CurlAsyncHTTPClient._set_timeout‰   s^   € àŒ=Ð$ØŒL×'Ò'¨¬Ñ6Ô6Ð6Øœ×0Ò0ØŒL×ÒÑÔ %¨&¡.Ñ0°$Ô2Fñ
ô 
ˆŒˆˆr$   Úeventsc                 óv  — d}|t           j        j        z  r|t          j        z  }|t           j        j        z  r|t          j        z  }	 	 | j                             ||¦  «        \  }}n)# t          j	        $ r}|j
        d         }Y d}~nd}~ww xY w|t          j        k    rnŒ[|                      ¦   «          dS )zXCalled by IOLoop when there is activity on one of our
        file descriptors.
        r   TN)r   rV   rY   r(   Ú
CSELECT_INr[   ÚCSELECT_OUTr*   Úsocket_actionÚerrorÚargsÚE_CALL_MULTI_PERFORMÚ_finish_pending_requests)r!   rQ   rg   ÚactionÚretÚnum_handlesÚes          r"   r`   z"CurlAsyncHTTPClient._handle_events‘   sÕ   € ð ˆØ•F”MÔ&Ñ&ð 	(Ø•fÔ'Ñ'ˆFØ•F”MÔ'Ñ'ð 	)Ø•fÔ(Ñ(ˆFð	ð Ø#'¤;×#<Ò#<¸RÀÑ#HÔ#HÑ ��[�[øÝ”<ð  ð  ð  Ø”f˜Q”i������øøøøð øøøà•fÔ1Ò1Ð1Øð	ð 	×%Ò%Ñ'Ô'Ð'Ð'Ð's   ÁA* Á*BÁ9BÂBc                 ót  — d| _         	 	 | j                             t          j        d¦  «        \  }}n)# t          j        $ r}|j        d         }Y d}~nd}~ww xY w|t          j        k    rnŒe|                      ¦   «          | j         	                    ¦   «         }|dk    r|  
                    |¦  «         dS dS )z7Called by IOLoop when the requested timeout has passed.NTr   )r7   r*   rk   r(   ÚSOCKET_TIMEOUTrl   rm   rn   ro   Útimeoutr-   )r!   rq   rr   rs   Únew_timeouts        r"   rf   z#CurlAsyncHTTPClient._handle_timeout£   s×   € àˆŒð	ð Ø#'¤;×#<Ò#<½VÔ=RÐTUÑ#VÔ#VÑ ��[�[øÝ”<ð  ð  ð  Ø”f˜Q”i������øøøøð øøøà•fÔ1Ò1Ð1Øð	ð 	×%Ò%Ñ'Ô'Ð'ð ”k×)Ò)Ñ+Ô+ˆØ˜!ÒÐØ×Ò˜kÑ*Ô*Ð*Ð*Ð*ð Ðs   Š(3 ³AÁAÁAc                 óâ   — 	 	 | j                              ¦   «         \  }}n)# t          j        $ r}|j        d         }Y d}~nd}~ww xY w|t          j        k    rnŒY|                      ¦   «          dS )zpCalled by IOLoop periodically to ask libcurl to process any
        events it may have forgotten about.
        Tr   N)r*   Ú
socket_allr(   rl   rm   rn   ro   )r!   rq   rr   rs   s       r"   r9   z)CurlAsyncHTTPClient._handle_force_timeoutÀ   sŒ   € ð	ð Ø#'¤;×#9Ò#9Ñ#;Ô#;Ñ ��[�[øÝ”<ð  ð  ð  Ø”f˜Q”i������øøøøð øøøà•fÔ1Ò1Ð1Øð	ð 	×%Ò%Ñ'Ô'Ð'Ð'Ð's   ƒ   A¯AÁAc                 óî   — 	 | j                              ¦   «         \  }}}|D ]}|                      |¦  «         Œ|D ]\  }}}|                      |||¦  «         Œ|dk    rnŒ_|                      ¦   «          dS )zbProcess any requests that were completed by the last
        call to multi.socket_action.
        Tr   N)r*   Ú	info_readÚ_finishrN   )r!   Únum_qÚok_listÚerr_listrG   ÚerrnumÚerrmsgs          r"   ro   z,CurlAsyncHTTPClient._finish_pending_requestsÍ   sŸ   € ð	Ø'+¤{×'<Ò'<Ñ'>Ô'>Ñ$ˆE�7˜HØð #ð #�Ø—’˜TÑ"Ô"Ð"Ð"Ø(0ð 3ð 3Ñ$��f˜fØ—’˜T 6¨6Ñ2Ô2Ð2Ð2Ø˜ŠzˆzØð	ð 	×ÒÑÔÐÐÐr$   c                 óÀ  — 	 d}| j         �rN| j        �rF|dz  }| j                              ¦   «         }| j                             ¦   «         \  }}}t	          j        ¦   «         t          ¦   «         |||t          j        ¦   «         | j         	                    ¦   «                              ¦   «         dœ|_
        	 |                      |||j
        d         |j
        d         ¦  «         | j                             |¦  «         nL# t          $ r?}| j                              |¦  «          |t!          |d|¬¦  «        ¦  «         Y d }~nd }~ww xY w| j         r| j        �°F|sd S �Œ^)	NTr   é   )ÚheadersÚbufferrH   rI   Úqueue_start_timeÚcurl_start_timeÚcurl_start_ioloop_timer…   r„   éW  )rH   Úcoderl   )r2   r5   ÚpopÚpopleftr   ÚHTTPHeadersr   rM   rD   ÚcurrentÚinfoÚ_curl_setup_requestr*   r=   Ú	ExceptionrL   r	   )r!   ÚstartedrG   rH   rI   r†   rs   s          r"   rN   z"CurlAsyncHTTPClient._process_queueÛ   s�  € ð&	ØˆGØ”/ñ !1 d¤nñ !1Ø˜1‘�Ø”×*Ò*Ñ,Ô,�Ø8<¼×8NÒ8NÑ8PÔ8PÑ5�˜(Ð$4õ  (Ô3Ñ5Ô5Ý%™iœiØ&Ø (Ø(8Ý'+¤y¡{¤{Ø.2¬l×.BÒ.BÑ.DÔ.D×.IÒ.IÑ.KÔ.Kðð �”	ð1Ø×,Ò,ØØØœ	 (Ô+Øœ	 )Ô,ñ	ô ð ð$ ”K×*Ò*¨4Ñ0Ô0Ð0Ð0øõ !ð 
Oð 
Oð 
Oð ”O×*Ò*¨4Ñ0Ô0Ð0Ø�H�\°'ÀÈ1ÐMÑMÔMÑNÔNÐNÐNÐNÐNÐNÐNøøøøð
Oøøøð+ ”/ð !1 d¤nñ !1ðF ð Ø�ñM&	s   Â6.C? Ã?
EÄ	5EÅErG   Ú
curl_errorÚcurl_messagec                 óÜ  — |j         }d |_         | j                             |¦  «         | j                             |¦  «         |d         }|r8|€J ‚t          ||¦  «        }|€J ‚|j        }d }|                     ¦   «          d }nUd }|                     t          j
        ¦  «        }|                     t          j        ¦  «        }|                     d¦  «         t          |d         |d         z
  |                     t          j        ¦  «        |                     t          j        ¦  «        |                     t          j        ¦  «        |                     t          j        ¦  «        |                     t          j        ¦  «        |                     t          j        ¦  «        |                     t          j        ¦  «        ¬¦  «        }		  |d         t+          |d         ||d         ||||d                              d	d ¦  «        | j                             ¦   «         |d         z
  |d
         |	¬¦
  «
        ¦  «         d S # t2          $ r |                      |d         ¦  «         Y d S w xY w)Nr…   r   rˆ   r†   )ÚqueueÚ
namelookupÚconnectÚ
appconnectÚpretransferÚstarttransferÚtotalÚredirectrI   rH   r„   zX-Http-Reasonr‡   )
rH   rŠ   r„   r…   Úeffective_urlrl   ÚreasonÚrequest_timeÚ
start_timeÚ	time_info)r�   r*   r>   r2   rL   Ú	CurlErrorrŠ   rF   Úgetinfor(   Ú	HTTP_CODEÚEFFECTIVE_URLÚseekÚdictÚNAMELOOKUP_TIMEÚCONNECT_TIMEÚAPPCONNECT_TIMEÚPRETRANSFER_TIMEÚSTARTTRANSFER_TIMEÚ
TOTAL_TIMEÚREDIRECT_TIMEr	   ÚgetrD   rM   r‘   Úhandle_callback_exception)
r!   rG   r“   r”   r�   r…   rl   rŠ   rž   r¢   s
             r"   r|   zCurlAsyncHTTPClient._finish  sL  € ð ŒyˆØˆŒ	ØŒ×!Ò! $Ñ'Ô'Ð'ØŒ×Ò˜tÑ$Ô$Ð$Ø�h”ˆØð 	ØÐ+Ð+Ð+Ý˜j¨,Ñ7Ô7ˆEØÐ$Ð$Ð$Ø”:ˆDØ ˆMØ�LŠL‰NŒNˆNØˆFˆFàˆEØ—<’<¥Ô 0Ñ1Ô1ˆDØ ŸLšL­Ô)=Ñ>Ô>ˆMØ�KŠK˜‰NŒNˆNõ ØÐ/Ô0°4Ð8JÔ3KÑKØ—|’|¥FÔ$:Ñ;Ô;Ø—L’L¥Ô!4Ñ5Ô5Ø—|’|¥FÔ$:Ñ;Ô;ØŸš¥VÔ%<Ñ=Ô=ØŸ,š,¥vÔ'@ÑAÔAØ—,’,�vÔ0Ñ1Ô1Ø—\’\¥&Ô"6Ñ7Ô7ð	
ñ 	
ô 	
ˆ	ð	=ØˆD�ÔÝØ  œOØØ  œOØ!Ø"/ØØ 	œ?×.Ò.¨ÀÑEÔEØ!%¤×!2Ò!2Ñ!4Ô!4°tÐ<TÔ7UÑ!UØ#Ð$5Ô6Ø'ðñ ô ñô ð ð ð øõ ð 	=ð 	=ð 	=Ø×*Ò*¨4°
Ô+;Ñ<Ô<Ð<Ð<Ð<Ð<ð	=øøøs   ÇA4I É%I+É*I+c                 ó4   — t          j        d|d¬¦  «         d S )NzException in callback %rT)Úexc_info)r   rl   )r!   rI   s     r"   r±   z-CurlAsyncHTTPClient.handle_callback_exception:  s    € ÝŒÐ0°(ÀTÐJÑJÔJÐJÐJÐJr$   c                 ó  — t          j        ¦   «         }t                               t          j        ¦  «        rE|                     t           j        d¦  «         |                     t           j        | j	        ¦  «         t          t           d¦  «        rn|                     t           j        t           j        t           j        z  ¦  «         |                     t           j        t           j        t           j        z  ¦  «         |S )Nrƒ   Ú	PROTOCOLS)r(   r<   Úcurl_logÚisEnabledForÚloggingÚDEBUGr+   ÚVERBOSEÚDEBUGFUNCTIONÚ_curl_debugÚhasattrrµ   Ú
PROTO_HTTPÚPROTO_HTTPSÚREDIR_PROTOCOLS)r!   rG   s     r"   r   z CurlAsyncHTTPClient._curl_create=  s¹   € ÝŒ{‰}Œ}ˆÝ× Ò ¥¤Ñ/Ô/ð 	@Ø�KŠK�œ¨Ñ*Ô*Ð*Ø�KŠK�Ô,¨dÔ.>Ñ?Ô?Ð?ÝÝ�Kñ
ô 
ð 	Xð �KŠK�Ô(­&Ô*;½fÔ>PÑ*PÑQÔQÐQØ�KŠK�Ô.µÔ0AÅFÔDVÑ0VÑWÔWÐWØˆr$   r…   r„   c                 óD  ‡ ‡‡‡— ‰                      t          j        t          ‰j        ¦  «        ¦  «         d‰j        vr
d‰j        d<   d‰j        vr
d‰j        d<   d„ ‰j                             ¦   «         D ¦   «         }|D ].}t                               |¦  «        rt          d|z  ¦  «        ‚Œ/‰                      t          j
        |¦  «         ‰                      t          j        t          j        ‰ j        |‰j        ¦  «        ¦  «         ‰j        r(dt"          t$          t&          f         dt(          fˆˆ fd„}n|j        }‰                      t          j        |¦  «         ‰                      t          j        ‰j        ¦  «         ‰                      t          j        ‰j        ¦  «         ‰j        €J ‚‰                      t          j        t)          d	‰j        z  ¦  «        ¦  «         ‰j        €J ‚‰                      t          j        t)          d	‰j        z  ¦  «        ¦  «         ‰j        r3‰                      t          j         t          ‰j        ¦  «        ¦  «         n ‰                      t          j         d
¦  «         ‰j!        r%‰                      t          j"        ‰j!        ¦  «         ‰j#        r!‰                      t          j$        d¦  «         n ‰                      t          j$        d ¦  «         ‰j%        �r+‰j&        �r#‰                      t          j'        ‰j%        ¦  «         ‰                      t          j(        ‰j&        ¦  «         ‰j)        rH‰j*        €J ‚tW          j,        ‰j)        ‰j*        ¦  «        }‰                      t          j-        |¦  «         ‰j.        �‰j.        dk    r+‰                      t          j/        t          j0        ¦  «         n½‰j.        dk    r+‰                      t          j/        t          j1        ¦  «         n‡t          d‰j.        z  ¦  «        ‚	 ‰ 2                    t          j'        ¦  «         n0# tf          $ r# ‰                      t          j'        d¦  «         Y nw xY w‰ 2                    t          j-        ¦  «         ‰j4        rA‰                      t          j5        d¦  «         ‰                      t          j6        d¦  «         n@‰                      t          j5        d¦  «         ‰                      t          j6        d¦  «         ‰j7        �&‰                      t          j8        ‰j7        ¦  «         n	 ‰j9        du r+‰                      t          j:        t          j;        ¦  «         n*‰                      t          j:        t          j<        ¦  «         t          j=        t          j>        t          j?        t          j@        dœ}	h d£}
|	 A                    ¦   «         D ]}‰                      |d¦  «         Œ‰jB        |	v rA‰ 2                    t          jC        ¦  «         ‰                      |	‰jB                 d¦  «         nM‰jD        s	‰jB        |
v r&‰                      t          jC        ‰jB        ¦  «         nt‹          d‰jB        z   ¦  «        ‚‰jB        dv }‰jF        d u}‰jD        s'|r|r|r!|st          d|rdnd›d‰jB        ›d�¦  «        ‚|s|�r&‰jB        dk    rt          d¦  «        ‚t�          t‘          ‰jF        pd¦  «        ¦  «        Šdt(          dd fˆˆfd„}‰                      t          jI        ‰jJ        ¦  «         ‰                      t          jK        |¦  «         ‰jB        d k    r5‰                      t          jL        t›          ‰jF        pd¦  «        ¦  «         nT‰                      t          j?        d¦  «         ‰                      t          jN        t›          ‰jF        pd¦  «        ¦  «         ‰jO        �ÿ‰jP        €J ‚‰jQ        �‰jQ        dk    r+‰                      t          jR        t          j0        ¦  «         nM‰jQ        dk    r+‰                      t          jR        t          j1        ¦  «         nt          d!‰jQ        z  ¦  «        ‚tW          j,        ‰jO        ‰jP        ¦  «        }‰                      t          jS        |¦  «         t¨           U                    d"‰jB        ‰j        ‰jO        ¦  «         nE‰ 2                    t          jS        ¦  «         t¨           U                    d#‰jB        ‰j        ¦  «         ‰jV        �%‰                      t          jW        ‰jV        ¦  «         ‰jX        �%‰                      t          jY        ‰jX        ¦  «         ‰jZ        �t          d$¦  «        ‚t·          j\        ¦   «         dk    r ‰                      t          j]        d¦  «         ‰j^        �‰ ^                    ‰¦  «         d S d S )%NÚExpectÚ ÚPragmac                 ó¢   — g | ]L\  }}d t          |¦  «                             d¦  «        t          |¦  «                             d¦  «        fz  ‘ŒMS )s   %s: %sÚASCIIz	ISO8859-1)r   Úencode)r   ÚkÚvs      r"   r#   z;CurlAsyncHTTPClient._curl_setup_request.<locals>.<listcomp>a  sd   € ð 
ð 
ð 
ñ ��1ð Ý˜!‰}Œ}×#Ò# GÑ,Ô,­j¸©m¬m×.BÒ.BÀ;Ñ.OÔ.OÐPñQð
ð 
ð 
r$   z+Illegal characters in header (CR or LF): %rÚbr   c                 ót   •— ‰j         €J ‚‰j                             ‰j         | ¦  «         t          | ¦  «        S rB   )Ústreaming_callbackrD   Úadd_callbackÚlen)rÊ   rH   r!   s    €€r"   Úwrite_functionz?CurlAsyncHTTPClient._curl_setup_request.<locals>.write_functions  s8   ø€ ØÔ1Ð=Ð=Ð=Ø”×)Ò)¨'Ô*DÀaÑHÔHÐHÝ˜1‘v”v�r$   r%   z Mozilla/5.0 (compatible; pycurl)zgzip,deflateÚbasicÚdigestzUnsupported proxy_auth_mode %srƒ   é   r   F)ÚGETÚPOSTÚPUTÚHEAD>   ÚPATCHÚDELETEÚOPTIONSTzunknown method )rÔ   r×   rÕ   z
Body must znot zbe None for method z+ (unless allow_nonstandard_methods is true)rÓ   z!Body must be None for GET requestÚcmdc                 óL   •— | ‰j         k    r‰                     d¦  «         d S d S rK   )ÚIOCMD_RESTARTREADr§   )rÚ   rG   Úrequest_buffers    €€r"   Úioctlz6CurlAsyncHTTPClient._curl_setup_request.<locals>.ioctlç  s3   ø€ Ø˜$Ô0Ò0Ð0Ø"×'Ò'¨Ñ*Ô*Ð*Ð*Ð*ð 1Ð0r$   rÔ   zUnsupported auth_mode %sz%s %s (username: %r)ú%s %sz,ssl_options not supported in curl_httpclient)_r+   r(   ÚURLr   Úurlr„   Úget_allÚCR_OR_LF_REÚsearchÚ
ValueErrorÚ
HTTPHEADERÚHEADERFUNCTIONÚ	functoolsÚpartialÚ_curl_header_callbackÚheader_callbackrÌ   r   ÚbytesÚ	bytearrayÚintÚwriteÚWRITEFUNCTIONÚFOLLOWLOCATIONÚfollow_redirectsÚ	MAXREDIRSÚmax_redirectsÚconnect_timeoutÚCONNECTTIMEOUT_MSÚrequest_timeoutÚ
TIMEOUT_MSÚ
user_agentÚ	USERAGENTÚnetwork_interfaceÚ	INTERFACEÚdecompress_responseÚENCODINGÚ
proxy_hostÚ
proxy_portÚPROXYÚ	PROXYPORTÚproxy_usernameÚproxy_passwordr   Úencode_username_passwordÚPROXYUSERPWDÚproxy_auth_modeÚ	PROXYAUTHÚHTTPAUTH_BASICÚHTTPAUTH_DIGESTÚunsetoptÚ	TypeErrorÚvalidate_certÚSSL_VERIFYPEERÚSSL_VERIFYHOSTÚca_certsÚCAINFOÚ
allow_ipv6Ú	IPRESOLVEÚIPRESOLVE_V4ÚIPRESOLVE_WHATEVERÚHTTPGETrÔ   ÚUPLOADÚNOBODYÚvaluesÚmethodÚCUSTOMREQUESTÚallow_nonstandard_methodsÚKeyErrorÚbodyr   r   ÚREADFUNCTIONÚreadÚIOCTLFUNCTIONÚPOSTFIELDSIZErÎ   Ú
INFILESIZEÚauth_usernameÚauth_passwordÚ	auth_modeÚHTTPAUTHÚUSERPWDr¶   ÚdebugÚclient_certÚSSLCERTÚ
client_keyÚSSLKEYÚssl_optionsÚ	threadingÚactive_countÚNOSIGNALÚprepare_curl_callback)r!   rG   rH   r…   r„   Úencoded_headersÚlinerÏ   ÚcredentialsÚcurl_optionsÚcustom_methodsÚoÚbody_expectedÚbody_presentrÞ   ÚuserpwdrÝ   s   ```             @r"   r�   z'CurlAsyncHTTPClient._curl_setup_requestI  sˆ	  øøøø€ ð 	�Š•F”J¥
¨7¬;Ñ 7Ô 7Ñ8Ô8Ð8ð ˜7œ?Ð*Ð*Ø(*ˆGŒO˜HÑ%ð ˜7œ?Ð*Ð*Ø(*ˆGŒO˜HÑ%ð
ð 
ð  œ×/Ò/Ñ1Ô1ð
ñ 
ô 
ˆð
 $ð 	Wð 	WˆDÝ×!Ò! $Ñ'Ô'ð WÝ Ð!NÐQUÑ!UÑVÔVÐVðWà�Š•FÔ% Ñ7Ô7Ð7à�ŠÝÔ!ÝÔØÔ*¨G°WÔ5Lñô ñ	
ô 	
ð 	
ð Ô%ð 	*ð¥%­­yÐ(8Ô"9ð ½cð ð ð ð ð ð ð ð ð $œ\ˆNØ�Š•FÔ(¨.Ñ9Ô9Ð9Ø�Š•FÔ)¨7Ô+CÑDÔDÐDØ�Š•FÔ$ gÔ&;Ñ<Ô<Ð<ØÔ&Ð2Ð2Ð2Ø�Š•FÔ,­c°$¸Ô9PÑ2PÑ.QÔ.QÑRÔRÐRØÔ&Ð2Ð2Ð2Ø�Š•FÔ%¥s¨4°'Ô2IÑ+IÑ'JÔ'JÑKÔKÐKØÔð 	NØ�KŠK�Ô(­*°WÔ5GÑ*HÔ*HÑIÔIÐIÐIà�KŠK�Ô(Ð*LÑMÔMÐMØÔ$ð 	EØ�KŠK�Ô(¨'Ô*CÑDÔDÐDØÔ&ð 	/Ø�KŠK�œ¨Ñ8Ô8Ð8Ð8à�KŠK�œ¨Ñ.Ô.Ð.ØÔñ 	/ 'Ô"4ñ 	/Ø�KŠK�œ gÔ&8Ñ9Ô9Ð9Ø�KŠK�Ô(¨'Ô*<Ñ=Ô=Ð=ØÔ%ð >ØÔ-Ð9Ð9Ð9Ý&Ô?ØÔ*¨GÔ,Bñô �ð —’�FÔ/°Ñ=Ô=Ð=àÔ&Ð.°'Ô2IÈWÒ2TÐ2TØ—’�FÔ,­fÔ.CÑDÔDÐDÐDØÔ(¨HÒ4Ð4Ø—’�FÔ,­fÔ.DÑEÔEÐEÐEå Ø4°wÔ7NÑNñô ð ð.Ø—’�fœlÑ+Ô+Ð+Ð+øÝð .ð .ð .Ø—’�FœL¨"Ñ-Ô-Ð-Ð-Ð-ð.øøøà�MŠM�&Ô-Ñ.Ô.Ð.ØÔ ð 	2Ø�KŠK�Ô-¨qÑ1Ô1Ð1Ø�KŠK�Ô-¨qÑ1Ô1Ð1Ð1à�KŠK�Ô-¨qÑ1Ô1Ð1Ø�KŠK�Ô-¨qÑ1Ô1Ð1ØÔÐ'Ø�KŠK�œ wÔ'7Ñ8Ô8Ð8Ð8ð àÔ Ð&Ð&ð �KŠK�Ô(­&Ô*=Ñ>Ô>Ð>Ð>à�KŠK�Ô(­&Ô*CÑDÔDÐDõ
 ”>Ý”KÝ”=Ý”Mð	
ð 
ˆð 8Ð7Ð7ˆØ×$Ò$Ñ&Ô&ð 	"ð 	"ˆAØ�KŠK˜˜5Ñ!Ô!Ð!Ð!ØŒ>˜\Ð)Ð)Ø�MŠM�&Ô.Ñ/Ô/Ð/Ø�KŠK˜ W¤^Ô4°dÑ;Ô;Ð;Ð;ØÔ.ð 	?°'´.ÀNÐ2RÐ2RØ�KŠK�Ô,¨g¬nÑ=Ô=Ð=Ð=åÐ,¨w¬~Ñ=Ñ>Ô>Ð>àœÐ*BÐBˆØ”|¨4Ð/ˆØÔ0ð 	ð ð  lð ØðØ%2ðõ !�jð "/Ð6�v�v°BÐ6Ð6¸¼¸¸ðHñô ð ð ð 	H˜Lñ 	HØŒ~ Ò&Ð&õ !Ð!DÑEÔEÐEÝ$¥T¨'¬,Ð*<¸"Ñ%=Ô%=Ñ>Ô>ˆNð+�3ð + 4ð +ð +ð +ð +ð +ð +ð +ð �KŠK�Ô+¨^Ô-@ÑAÔAÐAØ�KŠK�Ô,¨eÑ4Ô4Ð4ØŒ~ Ò'Ð'Ø—’�FÔ0µ#°g´lÐ6HÀbÑ2IÔ2IÑJÔJÐJÐJà—’�FœM¨4Ñ0Ô0Ð0Ø—’�FÔ-­s°7´<Ð3EÀ2Ñ/FÔ/FÑGÔGÐGàÔ Ð,ØÔ(Ð4Ð4Ð4ØÔ Ð(¨GÔ,=ÀÒ,HÐ,HØ—’�FœO­VÔ-BÑCÔCÐCÐCØÔ" hÒ.Ð.Ø—’�FœO­VÔ-CÑDÔDÐDÐDå Ð!;¸gÔ>OÑ!OÑPÔPÐPåÔ7ØÔ% wÔ'<ñô ˆGð �KŠK�œ¨Ñ0Ô0Ð0Ý�NŠNØ&Ø”Ø”ØÔ%ñ	ô ð ð ð �MŠM�&œ.Ñ)Ô)Ð)Ý�NŠN˜7 G¤N°G´KÑ@Ô@Ð@àÔÐ*Ø�KŠK�œ¨Ô(;Ñ<Ô<Ð<àÔÐ)Ø�KŠK�œ wÔ'9Ñ:Ô:Ð:àÔÐ*ÝÐKÑLÔLÐLåÔ!Ñ#Ô# aÒ'Ð'ð �KŠK�œ¨Ñ+Ô+Ð+ØÔ(Ð4Ø×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/ð 5Ð4s   Ð-Q Ñ*Q:Ñ9Q:rë   Úheader_line_bytesc                 óš  — t          |                     d¦  «        ¦  «        }|�| j                             ||¦  «         |                     ¦   «         }|                     d¦  «        rI|                     ¦   «          	 t          j        |¦  «        \  }}}d|z  }n# t          j	        $ r Y d S w xY w|sd S | 
                    |¦  «         d S )NÚlatin1zHTTP/zX-Http-Reason: %s)r   ÚdecoderD   rÍ   ÚrstripÚ
startswithÚclearr   Úparse_response_start_lineÚHTTPInputErrorÚ
parse_line)r!   r„   rë   r<  Úheader_lineÚ_versionÚ_coderŸ   s           r"   rê   z)CurlAsyncHTTPClient._curl_header_callback   sï   € õ !Ð!2×!9Ò!9¸(Ñ!CÔ!CÑDÔDˆØÐ&ØŒL×%Ò% o°{ÑCÔCÐCð "×(Ò(Ñ*Ô*ˆØ×!Ò! 'Ñ*Ô*ð 	Ø�MŠM‰OŒOˆOðÝ,4Ô,NØñ-ô -Ñ)�˜5 &ð 2°FÑ:��øÝÔ*ð ð ð Ø��ðøøøàð 	ØˆFØ×Ò˜;Ñ'Ô'Ð'Ð'Ð's   Á>B ÂB/Â.B/Ú
debug_typeÚ	debug_msgc                 ó‚  — d}|dk    r>t          |¦  «        }t                               d|                     ¦   «         ¦  «         d S |dv rJt          |¦  «        }|                     ¦   «         D ]$}t                               d||         |¦  «         Œ%d S |dk    r$t                               d||         |¦  «         d S d S )N)ÚIú<ú>rM  rN  r   z%s)rƒ   rÒ   rß   é   z%s %r)r   r¶   r)  ÚstripÚ
splitlines)r!   rI  rJ  Údebug_typesr4  s        r"   r¼   zCurlAsyncHTTPClient._curl_debug9  sÑ   € Ø/ˆØ˜Š?ˆ?Ý" 9Ñ-Ô-ˆIÝ�NŠN˜4 §¢Ñ!2Ô!2Ñ3Ô3Ð3Ð3Ð3Ø˜6Ð!Ð!Ý" 9Ñ-Ô-ˆIØ!×,Ò,Ñ.Ô.ð Gð G�Ý—’˜w¨°JÔ(?ÀÑFÔFÐFÐFðGð Gà˜1Š_ˆ_Ý�NŠN˜7 K°
Ô$;¸YÑGÔGÐGÐGÐGð ˆ_r$   )r   N)r   N)NN)"Ú__name__Ú
__module__Ú__qualname__rî   r   r   Ústrr   r'   rF   r   r   r	   rO   rì   r/   r-   r`   rf   r9   ro   rN   r(   r<   r|   r±   r   r   r   r�   r�   rê   r¼   Ú__classcell__)r@   s   @r"   r   r   3   sú  ø€ € € € € àJNð 5ð  5Øð 5Ø/7¸¸SÀ#¸X¼Ô/Gð 5à	ð 5ð  5ð  5ð  5ð  5ð  5ðDð ð ð ð ð ðØ"ðØ.6¸°~ÀtÐ7KÔ.Lðà	ðð ð ð ð) Cð )¨Sð )¸ð )ÀEð )Èdð )ð )ð )ð )ð:
 #ð 
¨$ð 
ð 
ð 
ð 
ð( ð (¨cð (°dð (ð (ð (ð (ð$+ð +ð +ð +ð:(ð (ð (ð (ðð ð ð ð'ð 'ð 'ð 'ðX %)Ø&*ð	4=ð 4=àŒkð4=ð ˜S”Mð4=ð ˜s”mð	4=ð
 
ð4=ð 4=ð 4=ð 4=ðlK°#ð K¸$ð Kð Kð Kð Kð
˜fœkð 
ð 
ð 
ð 
ðU0àŒkðU0ð ðU0ð ð	U0ð
 Ô%ðU0ð 
ðU0ð U0ð U0ð U0ðn(àÔ%ð(ð " 3 %¨ +Ô.ð(ð !ð	(ð
 
ð(ð (ð (ð (ð2
H cð 
H°cð 
H¸dð 
Hð 
Hð 
Hð 
Hð 
Hð 
Hð 
Hð 
Hr$   r   c                   ó"   — e Zd Zdededdfd„ZdS )r£   ÚerrnoÚmessager   Nc                 ó@   — t          j        | d|¦  «         || _        d S )Nr‰   )r
   Ú__init__rY  )r!   rY  rZ  s      r"   r\  zCurlError.__init__G  s"   € ÝÔ˜4  gÑ.Ô.Ð.ØˆŒ
ˆ
ˆ
r$   )rS  rT  rU  rî   rV  r\  r   r$   r"   r£   r£   F  s=   € € € € € ð˜cð ¨Cð °Dð ð ð ð ð ð r$   r£   Ú__main__))Ú__doc__r3   rè   r¸   r(   Úrer/  rM   Úior   Útornador   r   Útornado.escaper   r   Útornado.httpclientr   r	   r
   r   r   Útornado.logr   Útypingr   r   r   r   r   ÚTYPE_CHECKINGr   r   Ú	getLoggerr¶   Úcompilerã   r   r£   rS  Ú	configurer   r$   r"   ú<module>rj     s  ðð  <Ð ;à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø €€€à	Ôð $Ø#Ð#Ð#Ð#Ð#Ð#Ð#Ð#àˆ7ÔÐ6Ñ7Ô7€àˆbŒj˜Ñ"Ô"€ðPHð PHð PHð PHð PH˜/ñ PHô PHð PHðfð ð ð ð �	ñ ô ð ð ˆzÒÐØ€OÔÐ1Ñ2Ô2Ð2Ø€D�F„F€F€F€Fð Ðr$   