Ë
    %¹šj”]  ã                   óš  — 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jB                  d«      Z" ejF                  d«      Z$ G d„ de«      Z% G d„ de«      Z&e'dk(  r ejP                  e%«        e«        yy)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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j8                  ddf
d„Zdej8                  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 )(ÚCurlAsyncHTTPClientNÚmax_clientsÚdefaultsÚreturnc                 ó”  •— t         ‰| �  |¬«       t        j                  «       | _        | j                  j                  t        j                  | j                  «       | j                  j                  t        j                  | j                  «       t        |«      D �cg c]  }| j                  «       ‘Œ c}| _        | j                  d d  | _        t        j                  «       | _        i | _        d | _        t        j&                  «       }| j                  j)                  |«       | j                  j+                  |«       y c c}w )N)r   )ÚsuperÚ
initializeÚpycurlÚ	CurlMultiÚ_multiÚsetoptÚM_TIMERFUNCTIONÚ_set_timeoutÚM_SOCKETFUNCTIONÚ_handle_socketÚrangeÚ_curl_createÚ_curlsÚ
_free_listÚcollectionsÚdequeÚ	_requestsÚ_fdsÚ_timeoutÚCurlÚ
add_handleÚremove_handle)Úselfr   r   ÚiÚdummy_curl_handleÚ	__class__s        €ú7lib/python3.12/site-packages/tornado/curl_httpclient.pyr   zCurlAsyncHTTPClient.initialize4   s÷   ø€ ô 	‰Ñ HÐÔ-ä×&Ñ&Ó(ˆŒØ�‰×Ñœ6×1Ñ1°4×3DÑ3DÔEØ�‰×Ñœ6×2Ñ2°D×4GÑ4GÔHÜ49¸+Ô4FÓGÑ4F¨q�t×(Ñ(Õ*Ð4FÑGˆŒØŸ+™+¡a˜.ˆŒä×ÑÓð 	Œð ˆŒ	ØˆŒô #ŸK™K›MÐØ�‰×ÑÐ0Ô1Ø�‰×!Ñ!Ð"3Õ4ùò Hs   Â Ec                 ó  •— | j                   �%| j                  j                  | j                   «       | j                  D ]  }|j	                  «        Œ | j
                  j	                  «        t        ‰| �  «        d | _        y ©N)r-   Úio_loopÚremove_timeoutr'   Úcloser   r   )r1   Úcurlr4   s     €r5   r:   zCurlAsyncHTTPClient.closeM   s\   ø€ Ø�=‰=Ð$Ø�L‰L×'Ñ'¨¯©Ô6Ø—K”KˆDØ�J‰J�Lð  à�‰×ÑÔÜ‰‰Œð
 ˆ�ó    ÚrequestÚcallbackc                 ó²   — | j                   j                  ||| j                  j                  «       f«       | j	                  «        | j                  d«       y )Nr   )r+   Úappendr8   ÚtimeÚ_process_queuer"   )r1   r=   r>   s      r5   Ú
fetch_implzCurlAsyncHTTPClient.fetch_implZ   sD   € ð 	�‰×Ñ˜w¨°$·,±,×2CÑ2CÓ2EÐFÔGØ×ÑÔØ×Ñ˜!Õr<   ÚeventÚfdÚmultiÚdatac           	      óÜ  — 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(  r8|| j                  v r)| j                  j                  |«       | j                  |= yy||   }|| j                  v r| j                  j                  |«       | j                  j                  || j                  |«       || j                  |<   y)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_REMOVEr,   r8   Úremove_handlerÚadd_handlerÚ_handle_events)r1   rD   rE   rF   rG   Ú	event_mapÚioloop_events          r5   r$   z"CurlAsyncHTTPClient._handle_socketa   sû   € ô
 ×ÑœfŸm™m×0Ñ0Ü�N‰NœFŸM™M×.Ñ.Ü�O‰OœVŸ]™]×0Ñ0Ü×ÑœvŸ}™}×1Ñ1´F·M±M×4GÑ4GÑGð	
ˆ	ð ”F×&Ñ&Ò&Ø�T—Y‘Y‰Ø—‘×+Ñ+¨BÔ/Ø—I‘I˜b‘Mð ð % UÑ+ˆLð �T—Y‘Y‰Ø—‘×+Ñ+¨BÔ/Ø�L‰L×$Ñ$ R¨×)<Ñ)<¸lÔKØ(ˆD�I‰I�bŠMr<   Úmsecsc                 óø   — | j                   �%| j                  j                  | j                   «       | j                  j                  | j                  j	                  «       |dz  z   | j
                  «      | _         y)z(Called by libcurl to schedule a timeout.Ng     @�@)r-   r8   r9   Úadd_timeoutrA   Ú_handle_timeout)r1   rW   s     r5   r"   z CurlAsyncHTTPClient._set_timeout~   sY   € à�=‰=Ð$Ø�L‰L×'Ñ'¨¯©Ô6ØŸ™×0Ñ0Ø�L‰L×ÑÓ %¨&¡.Ñ0°$×2FÑ2Fó
ˆ�r<   Úeventsc                 ó²  — d}|t         j                  j                  z  r|t        j                  z  }|t         j                  j
                  z  r|t        j                  z  }	 	 | j                  j                  ||«      \  }}|t        j                  k7  rnŒ5| j                  «        y# t        j                  $ r}|j                  d   }Y d}~ŒMd}~ww xY w)zXCalled by IOLoop when there is activity on one of our
        file descriptors.
        r   N)r   rJ   rM   r   Ú
CSELECT_INrO   ÚCSELECT_OUTr   Úsocket_actionÚerrorÚargsÚE_CALL_MULTI_PERFORMÚ_finish_pending_requests)r1   rE   r[   ÚactionÚretÚnum_handlesÚes          r5   rT   z"CurlAsyncHTTPClient._handle_events†   s¹   € ð ˆØ”F—M‘M×&Ñ&Ò&Ø”f×'Ñ'Ñ'ˆFØ”F—M‘M×'Ñ'Ò'Ø”f×(Ñ(Ñ(ˆFØð Ø#'§;¡;×#<Ñ#<¸RÀÓ#HÑ ��[ð ”f×1Ñ1Ò1Øð ð 	×%Ñ%Õ'øô	 —<‘<ò  Ø—f‘f˜Q‘i•ûð ús   Á%B* Â*CÂ=CÃCc                 óz  — d| _         	 	 | j                  j                  t        j                  d«      \  }}|t        j                  k7  rnŒC| j                  «        | j                  j                  «       }|dk\  r| j                  |«       yy# t        j
                  $ r}|j                  d   }Y d}~Œ~d}~ww xY w)z7Called by IOLoop when the requested timeout has passed.Nr   )r-   r   r_   r   ÚSOCKET_TIMEOUTr`   ra   rb   rc   Útimeoutr"   )r1   re   rf   rg   Únew_timeouts        r5   rZ   z#CurlAsyncHTTPClient._handle_timeout˜   s«   € àˆŒØð Ø#'§;¡;×#<Ñ#<¼V×=RÑ=RÐTUÓ#VÑ ��[ð ”f×1Ñ1Ò1Øð ð 	×%Ñ%Ô'ð —k‘k×)Ñ)Ó+ˆØ˜!ÒØ×Ñ˜kÕ*ð øô) —<‘<ò  Ø—f‘f˜Q‘i•ûð ús   Š-B ÂB:Â!B5Â5B:c                 óÜ   — 	 | j                   j                  «       \  }}}|D ]  }| j                  |«       Œ |D ]  \  }}}| j                  |||«       Œ |dk(  rnŒ[| j                  «        y)zbProcess any requests that were completed by the last
        call to multi.socket_action.
        r   N)r   Ú	info_readÚ_finishrB   )r1   Únum_qÚok_listÚerr_listr;   ÚerrnumÚerrmsgs          r5   rc   z,CurlAsyncHTTPClient._finish_pending_requestsµ   st   € ð Ø'+§{¡{×'<Ñ'<Ó'>Ñ$ˆE�7˜HÛ�Ø—‘˜TÕ"ð  ã(0Ñ$��f˜fØ—‘˜T 6¨6Õ2ð )1à˜ŠzØð ð 	×ÑÕr<   c                 óô  — 	 d}| j                   �r| j                  �r|dz  }| j                   j                  «       }| j                  j                  «       \  }}}t	        j
                  «       t        «       |||t        j                  «       | j                  j                  «       j                  «       dœ|_
        	 | j                  |||j                  d   |j                  d   «       | j                  j                  |«       | j                   r| j                  r�Œ|sy �Œ## t        $ rI}|j                  «        | j                   j!                  |«        |t#        |d|¬«      «       Y d }~Œld }~ww xY w)Nr   é   )ÚheadersÚbufferr=   r>   Úqueue_start_timeÚcurl_start_timeÚcurl_start_ioloop_timerw   rv   éW  )r=   Úcoder`   )r(   r+   ÚpopÚpopleftr   ÚHTTPHeadersr   rA   r8   ÚcurrentÚinfoÚ_curl_setup_requestr   r/   Ú	ExceptionÚresetr@   r	   )r1   Ústartedr;   r=   r>   rx   rg   s          r5   rB   z"CurlAsyncHTTPClient._process_queueÃ   s<  € ØØˆGØ—/“/ d§n£nØ˜1‘�Ø—‘×*Ñ*Ó,�Ø8<¿¹×8NÑ8NÓ8PÑ5�˜(Ð$4ô  (×3Ñ3Ó5Ü%›iØ&Ø (Ø(8Ü'+§y¡y£{Ø.2¯l©l×.BÑ.BÓ.D×.IÑ.IÓ.Kñ�”	ð1Ø×,Ñ,ØØØŸ	™	 (Ñ+ØŸ	™	 )Ñ,ô	ð& —K‘K×*Ñ*¨4Ô0ðE —/’/ d§n¤nñH ØñO øô. !ò Oð —J‘J”LØ—O‘O×*Ñ*¨4Ô0Ùœ\°'ÀÈ1ÔM×NÑNûðOús   Â=.D% Ä%	E7Ä.?E2Å2E7r;   Ú
curl_errorÚcurl_messagec                 ó–  — |j                   }d |_         | j                  j                  |«       |d   }|r5|€J ‚t        ||«      }|€J ‚|j                  }d }|j                  «        d }nQd }|j                  t        j                  «      }|j                  t        j                  «      }|j                  d«       t        |d   |d   z
  |j                  t        j                  «      |j                  t        j                  «      |j                  t        j                  «      |j                  t        j                  «      |j                  t        j                   «      |j                  t        j"                  «      |j                  t        j$                  «      ¬«      }		  |d   t'        |d   ||d   ||||d   j)                  d	d «      | j*                  j-                  «       |d   z
  |d
   |	¬«
      «       |j3                  «        | j4                  j7                  |«       y # t.        $ r | j1                  |d   «       Y ŒKw xY w)Nrw   r   rz   rx   )ÚqueueÚ
namelookupÚconnectÚ
appconnectÚpretransferÚstarttransferÚtotalÚredirectr>   r=   rv   zX-Http-Reasonry   )
r=   r|   rv   rw   Úeffective_urlr`   ÚreasonÚrequest_timeÚ
start_timeÚ	time_info)r�   r   r0   Ú	CurlErrorr|   r:   Úgetinfor   Ú	HTTP_CODEÚEFFECTIVE_URLÚseekÚdictÚNAMELOOKUP_TIMEÚCONNECT_TIMEÚAPPCONNECT_TIMEÚPRETRANSFER_TIMEÚSTARTTRANSFER_TIMEÚ
TOTAL_TIMEÚREDIRECT_TIMEr	   Úgetr8   rA   rƒ   Úhandle_callback_exceptionr„   r(   r@   )
r1   r;   r†   r‡   r�   rw   r`   r|   r‘   r•   s
             r5   rn   zCurlAsyncHTTPClient._finishí   sú  € ð �y‰yˆØˆŒ	Ø�‰×!Ñ! $Ô'Ø�h‘ˆÙØÐ+Ð+Ð+Ü˜j¨,Ó7ˆEØÐ$Ð$Ð$Ø—:‘:ˆDØ ˆMØ�L‰LŒNØ‰FàˆEØ—<‘<¤× 0Ñ 0Ó1ˆDØ ŸL™L¬×)=Ñ)=Ó>ˆMØ�K‰K˜ŒNô ØÐ/Ñ0°4Ð8JÑ3KÑKØ—|‘|¤F×$:Ñ$:Ó;Ø—L‘L¤×!4Ñ!4Ó5Ø—|‘|¤F×$:Ñ$:Ó;ØŸ™¤V×%<Ñ%<Ó=ØŸ,™,¤v×'@Ñ'@ÓAØ—,‘,œv×0Ñ0Ó1Ø—\‘\¤&×"6Ñ"6Ó7ô	
ˆ	ð	=ØˆD�ÑÜØ  ™OØØ  ™OØ!Ø"/ØØ 	™?×.Ñ.¨ÀÓEØ!%§¡×!2Ñ!2Ó!4°tÐ<TÑ7UÑ!UØ#Ð$5Ñ6Ø'ôôð  	�
‰
ŒØ�‰×Ñ˜tÕ$øô ò 	=Ø×*Ñ*¨4°
Ñ+;Ö<ð	=ús   Æ$AH( È(IÉIc                 ó4   — t        j                  d|d¬«       y )NzException in callback %rT)Úexc_info)r   r`   )r1   r>   s     r5   r¤   z-CurlAsyncHTTPClient.handle_callback_exception$  s   € Ü�‰Ð0°(ÀTÖJr<   c                 ó*   — t        j                  «       S r7   )r   r.   )r1   s    r5   r&   z CurlAsyncHTTPClient._curl_create'  s   € Ü�{‰{‹}Ðr<   rw   rv   c           	      ó&  ‡ ‡‡— t         j                  t        j                  «      rJ|j	                  t
        j                  d«       |j	                  t
        j                  ‰ j                  «       t        t
        d«      r~|j	                  t
        j                  t
        j                  t
        j                  z  «       |j	                  t
        j                  t
        j                  t
        j                  z  «       |j	                  t
        j                  t        ‰j                   «      «       d‰j"                  vrd‰j"                  d<   d‰j"                  vrd‰j"                  d<   ‰j"                  j%                  «       D ��cg c]<  \  }}dt        |«      j'                  d«      t        |«      j'                  d«      fz  ‘Œ> }}}|D ]%  }t(        j+                  |«      sŒt-        d	|z  «      ‚ |j	                  t
        j.                  |«       |j	                  t
        j0                  t3        j4                  ‰ j6                  |‰j8                  «      «       ‰j:                  r!d
t<        t>        t@        f   dtB        fˆˆ fd„}	n|jD                  }	|j	                  t
        jF                  |	«       |j	                  t
        jH                  ‰jJ                  «       |j	                  t
        jL                  ‰jN                  «       ‰jP                  €J ‚|j	                  t
        jR                  tC        d‰jP                  z  «      «       ‰jT                  €J ‚|j	                  t
        jV                  tC        d‰jT                  z  «      «       ‰jX                  r4|j	                  t
        jZ                  t        ‰jX                  «      «       n |j	                  t
        jZ                  d«       ‰j\                  r*|j	                  t
        j^                  ‰j\                  «       ‰j`                  r!|j	                  t
        jb                  d«       n |j	                  t
        jb                  d «       ‰jd                  �re‰jf                  �rX|j	                  t
        jh                  ‰jd                  «       |j	                  t
        jj                  ‰jf                  «       ‰jl                  rX‰jn                  €J ‚tq        jr                  ‰jl                  ‰jn                  «      }
|j	                  t
        jt                  |
«       ‰jv                  �‰jv                  dk(  r/|j	                  t
        jx                  t
        jz                  «       n•‰jv                  dk(  r/|j	                  t
        jx                  t
        j|                  «       nWt-        d‰jv                  z  «      ‚	 |j                  t
        jh                  «       |j                  t
        jt                  «       ‰j‚                  rA|j	                  t
        j„                  d«       |j	                  t
        j†                  d«       n@|j	                  t
        j„                  d«       |j	                  t
        j†                  d«       ‰jˆ                  �+|j	                  t
        jŠ                  ‰jˆ                  «       n	 ‰jŒ                  du r/|j	                  t
        jŽ                  t
        j�                  «       n.|j	                  t
        jŽ                  t
        j’                  «       t
        j”                  t
        j–                  t
        j˜                  t
        jš                  dœ}h d£}|j�                  «       D ]  }|j	                  |d«       Œ ‰jž                  |v r?|j                  t
        j                   «       |j	                  |‰jž                     d«       n]‰j¢                  s‰jž                  |v r+|j	                  t
        j                   ‰jž                  «       nt¥        d‰jž                  z   «      ‚‰jž                  dv }‰j¦                  d u}‰j¢                  s(|r|r|r"|s t-        d|rdnd›d‰jž                  ›d�«      ‚|s|�r<‰jž                  dk(  rt-        d «      ‚t©        t«        ‰j¦                  xs d«      «      Šd!tB        d"tB        dtB        fˆfd#„}|j	                  t
        j¬                  ‰j®                  «       |j	                  t
        j°                  |«       ‰jž                  d$k(  r8|j	                  t
        j²                  tµ        ‰j¦                  xs d«      «       nW|j	                  t
        j˜                  d«       |j	                  t
        j¶                  tµ        ‰j¦                  xs d«      «       ‰j¸                  ��/‰jº                  €J ‚‰j¼                  �‰j¼                  dk(  r/|j	                  t
        j¾                  t
        jz                  «       nV‰j¼                  dk(  r/|j	                  t
        j¾                  t
        j|                  «       nt-        d%‰j¼                  z  «      ‚tq        jr                  ‰j¸                  ‰jº                  «      }|j	                  t
        jÀ                  |«       t         jÃ                  d&‰jž                  ‰j                   ‰j¸                  «       nJ|j                  t
        jÀ                  «       t         jÃ                  d'‰jž                  ‰j                   «       ‰jÄ                  �*|j	                  t
        jÆ                  ‰jÄ                  «       ‰jÈ                  �*|j	                  t
        jÊ                  ‰jÈ                  «       ‰jÌ                  �t-        d(«      ‚tÏ        jÐ                  «       dkD  r |j	                  t
        jÒ                  d«       ‰jÔ                  �‰jÕ                  |«       y y c c}}w # t€        $ r$ |j	                  t
        jh                  d«       Y �Œ…w xY w))Nru   Ú	PROTOCOLSÚExpectÚ ÚPragmas   %s: %sÚASCIIz	ISO8859-1z+Illegal characters in header (CR or LF): %rÚbr   c                 ó‚   •— ‰j                   €J ‚‰j                  j                  ‰j                   | «       t        | «      S r7   )Ústreaming_callbackr8   Úadd_callbackÚlen)r®   r=   r1   s    €€r5   Úwrite_functionz?CurlAsyncHTTPClient._curl_setup_request.<locals>.write_function]  s8   ø€ Ø×1Ñ1Ð=Ð=Ð=Ø—‘×)Ñ)¨'×*DÑ*DÀaÔHÜ˜1“v�r<   iè  z Mozilla/5.0 (compatible; pycurl)zgzip,deflateÚbasicÚdigestzUnsupported proxy_auth_mode %sé   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ÚoffsetÚoriginc                 óH   •— ‰j                  | |«       t        j                  S r7   )rš   r   ÚSEEKFUNC_OK)r¾   r¿   Úrequest_buffers     €r5   rš   z5CurlAsyncHTTPClient._curl_setup_request.<locals>.seekÑ  s   ø€ Ø×#Ñ# F¨FÔ3Ü×)Ñ)Ð)r<   r¸   zUnsupported auth_mode %sz%s %s (username: %r)ú%s %sz,ssl_options not supported in curl_httpclient)kÚcurl_logÚisEnabledForÚloggingÚDEBUGr    r   ÚVERBOSEÚDEBUGFUNCTIONÚ_curl_debugÚhasattrr©   Ú
PROTO_HTTPÚPROTO_HTTPSÚREDIR_PROTOCOLSÚURLr   Úurlrv   Úget_allÚencodeÚ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ÚSEEKFUNCTIONÚPOSTFIELDSIZEr²   Ú
INFILESIZEÚauth_usernameÚauth_passwordÚ	auth_modeÚHTTPAUTHÚUSERPWDÚdebugÚclient_certÚSSLCERTÚ
client_keyÚSSLKEYÚssl_optionsÚ	threadingÚactive_countÚNOSIGNALÚprepare_curl_callback)r1   r;   r=   rw   rv   ÚkÚvÚencoded_headersÚliner³   ÚcredentialsÚcurl_optionsÚcustom_methodsÚoÚbody_expectedÚbody_presentrš   ÚuserpwdrÂ   s   ` `               @r5   r‚   z'CurlAsyncHTTPClient._curl_setup_request*  s	  ú€ ô × Ñ ¤§¡Ô/Ø�K‰KœŸ™¨Ô*Ø�K‰Kœ×,Ñ,¨d×.>Ñ.>Ô?ÜÜ�Kô
ð �K‰Kœ×(Ñ(¬&×*;Ñ*;¼f×>PÑ>PÑ*PÔQØ�K‰Kœ×.Ñ.´×0AÑ0AÄF×DVÑDVÑ0VÔWà�‰”F—J‘J¤
¨7¯;©;Ó 7Ô8ð ˜7Ÿ?™?Ñ*Ø(*ˆG�O‰O˜HÑ%ð ˜7Ÿ?™?Ñ*Ø(*ˆG�O‰O˜HÑ%ð
  Ÿ™×/Ñ/Ô1ô
ñ 2‘��1ð Ü˜!‹}×#Ñ# GÓ,¬j¸«m×.BÑ.BÀ;Ó.OÐPóQà1ð 	ñ 
ó
 $ˆDÜ×!Ñ! $Õ'Ü Ð!NÐQUÑ!UÓVÐVð $ð 	�‰”F×%Ñ% Ô7à�‰Ü×!Ñ!Ü×ÑØ×*Ñ*¨G°W×5LÑ5Lóô	
ð ×%Ò%ð¤%¬¬yÐ(8Ñ"9ð ¼c÷ ð $Ÿ\™\ˆNØ�‰”F×(Ñ(¨.Ô9Ø�‰”F×)Ñ)¨7×+CÑ+CÔDØ�‰”F×$Ñ$ g×&;Ñ&;Ô<Ø×&Ñ&Ð2Ð2Ð2Ø�‰”F×,Ñ,¬c°$¸×9PÑ9PÑ2PÓ.QÔRØ×&Ñ&Ð2Ð2Ð2Ø�‰”F×%Ñ%¤s¨4°'×2IÑ2IÑ+IÓ'JÔKØ×ÒØ�K‰Kœ×(Ñ(¬*°W×5GÑ5GÓ*HÕIà�K‰Kœ×(Ñ(Ð*LÔMØ×$Ò$Ø�K‰Kœ×(Ñ(¨'×*CÑ*CÔDØ×&Ò&Ø�K‰KœŸ™¨Õ8à�K‰KœŸ™¨Ô.Ø×Ó '×"4Ó"4Ø�K‰KœŸ™ g×&8Ñ&8Ô9Ø�K‰Kœ×(Ñ(¨'×*<Ñ*<Ô=Ø×%Ò%Ø×-Ñ-Ð9Ð9Ð9Ü&×?Ñ?Ø×*Ñ*¨G×,BÑ,Bó�ð —‘œF×/Ñ/°Ô=à×&Ñ&Ð.°'×2IÑ2IÈWÒ2TØ—‘œF×,Ñ,¬f×.CÑ.CÕDØ×(Ñ(¨HÒ4Ø—‘œF×,Ñ,¬f×.DÑ.DÕEä Ø4°w×7NÑ7NÑNóð ð.Ø—‘œfŸl™lÔ+ð �M‰Mœ&×-Ñ-Ô.Ø× Ò Ø�K‰Kœ×-Ñ-¨qÔ1Ø�K‰Kœ×-Ñ-¨qÕ1à�K‰Kœ×-Ñ-¨qÔ1Ø�K‰Kœ×-Ñ-¨qÔ1Ø×ÑÐ'Ø�K‰KœŸ™ w×'7Ñ'7Õ8ð à×Ñ Ñ&ð �K‰Kœ×(Ñ(¬&×*=Ñ*=Õ>à�K‰Kœ×(Ñ(¬&×*CÑ*CÔDô
 —>‘>Ü—K‘KÜ—=‘=Ü—M‘Mñ	
ˆò 8ˆØ×$Ñ$Ö&ˆAØ�K‰K˜˜5Õ!ð 'à�>‰>˜\Ñ)Ø�M‰Mœ&×.Ñ.Ô/Ø�K‰K˜ W§^¡^Ñ4°dÕ;Ø×.Ò.°'·.±.ÀNÑ2RØ�K‰Kœ×,Ñ,¨g¯n©nÕ=äÐ,¨w¯~©~Ñ=Ó>Ð>àŸ™Ð*BÐBˆØ—|‘|¨4Ð/ˆØ×0Ò0ñ ¡lÙ¡]å ñ "/‘v°BÑ6¸¿»ðHóð ñ šLØ�~‰~ Ò&ô !Ð!DÓEÐEÜ$¤T¨'¯,©,Ò*<¸"Ó%=Ó>ˆNð*œSð *¬#ð *´#õ *ð �K‰Kœ×+Ñ+¨^×-@Ñ-@ÔAØ�K‰Kœ×+Ñ+¨TÔ2Ø�~‰~ Ò'Ø—‘œF×0Ñ0´#°g·l±lÒ6HÀbÓ2IÕJà—‘œFŸM™M¨4Ô0Ø—‘œF×-Ñ-¬s°7·<±<Ò3EÀ2Ó/FÔGà× Ñ Ñ,Ø×(Ñ(Ð4Ð4Ð4Ø× Ñ Ð(¨G×,=Ñ,=ÀÒ,HØ—‘œFŸO™O¬V×-BÑ-BÕCØ×"Ñ" hÒ.Ø—‘œFŸO™O¬V×-CÑ-CÕDä Ð!;¸g×>OÑ>OÑ!OÓPÐPä×7Ñ7Ø×%Ñ% w×'<Ñ'<óˆGð �K‰KœŸ™¨Ô0Ü�N‰NØ&Ø—‘Ø—‘Ø×%Ñ%õ	ð �M‰Mœ&Ÿ.™.Ô)Ü�N‰N˜7 G§N¡N°G·K±KÔ@à×ÑÐ*Ø�K‰KœŸ™¨×(;Ñ(;Ô<à×ÑÐ)Ø�K‰KœŸ™ w×'9Ñ'9Ô:à×ÑÐ*ÜÐKÓLÐLä×!Ñ!Ó# aÒ'ð �K‰KœŸ™¨Ô+Ø×(Ñ(Ð4Ø×)Ñ)¨$Õ/ð 5ùóy
øô~ ò .Ø—‘œFŸL™L¨"×-ð.ús   Æ	Aq×+q# ñ#)ròrrÛ   Úheader_line_bytesc                 ón  — t        |j                  d«      «      }|�| j                  j                  ||«       |j	                  «       }|j                  d«      r/|j                  «        	 t        j                  |«      \  }}}d|z  }|sy |j                  |«       y # t        j                  $ r Y y w xY w)NÚlatin1zHTTP/zX-Http-Reason: %s)r   Údecoder8   r±   ÚrstripÚ
startswithÚclearr   Úparse_response_start_lineÚHTTPInputErrorÚ
parse_line)r1   rv   rÛ   r.  Úheader_lineÚ_versionÚ_coder’   s           r5   rÚ   z)CurlAsyncHTTPClient._curl_header_callback
  s¶   € ô !Ð!2×!9Ñ!9¸(Ó!CÓDˆØÐ&Ø�L‰L×%Ñ% o°{ÔCð "×(Ñ(Ó*ˆØ×!Ñ! 'Ô*Ø�M‰MŒOðÜ,4×,NÑ,NØó-Ñ)�˜5 &ð 2°FÑ:�ñ ØØ×Ñ˜;Õ'øô	 ×*Ñ*ò Ùðús   Á+B ÂB4Â3B4Ú
debug_typeÚ	debug_msgc                 ó0  — d}|dk(  r0t        |«      }t        j                  d|j                  «       «       y |dv r;t        |«      }|j	                  «       D ]  }t        j                  d||   |«       Œ y |dk(  rt        j                  d||   |«       y y )N)ÚIÚ<Ú>r?  r@  r   z%s)ru   r¶   rÃ   é   z%s %r)r   rÄ   r  ÚstripÚ
splitlines)r1   r;  r<  Údebug_typesr&  s        r5   rÊ   zCurlAsyncHTTPClient._curl_debug#  sˆ   € Ø/ˆØ˜Š?Ü" 9Ó-ˆIÜ�N‰N˜4 §¡Ó!2Õ3Ø˜6Ñ!Ü" 9Ó-ˆIØ!×,Ñ,Ö.�Ü—‘˜w¨°JÑ(?ÀÕFñ /à˜1Š_Ü�N‰N˜7 K°
Ñ$;¸YÕGð r<   )é
   N)r   N)NN)!Ú__name__Ú
__module__Ú__qualname__rÞ   r   r   Ústrr   r   r:   r   r   r	   rC   rÜ   r$   r"   rT   rZ   rc   rB   r   r.   rn   r¤   r&   r   r   r   r‚   rÚ   rÊ   Ú__classcell__)r4   s   @r5   r   r   3   sÉ  ø„ àJNñ5Øð5Ø/7¸¸SÀ#¸X¹Ñ/Gð5à	õ5õ2ðØ"ðØ.6¸°~ÀtÐ7KÑ.Lðà	óð) Cð )¨Sð )¸ð )ÀEð )Èdó )ð:
 #ð 
¨$ó 
ð( ð (¨cð (°dó (ó$+ó:ó(ðZ %)Ø&*ñ	5%à�k‰kð5%ð ˜S‘Mð5%ð ˜s‘mð	5%ð
 
ó5%ðnK°#ð K¸$ó Kð˜fŸk™kó ð^0à�k‰kð^0ð ð^0ð ð	^0ð
 ×%Ñ%ð^0ð 
ó^0ð@(à×%Ñ%ð(ð " 3 %¨ +Ñ.ð(ð !ð	(ð
 
ó(ð2
H cð 
H°cð 
H¸d÷ 
Hr<   r   c                   ó    — e Zd Zdededdfd„Zy)r–   ÚerrnoÚmessager   Nc                 ó@   — t        j                  | d|«       || _        y )Nr{   )r
   Ú__init__rL  )r1   rL  rM  s      r5   rO  zCurlError.__init__1  s   € Ü×Ñ˜4  gÔ.Øˆ�
r<   )rF  rG  rH  rÞ   rI  rO  © r<   r5   r–   r–   0  s   „ ð˜cð ¨Cð °Dô r<   r–   Ú__main__))Ú__doc__r)   rØ   rÆ   r   Úrer  rA   Ú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–   rF  Ú	configurerP  r<   r5   Ú<module>r^     s´   ðñ  <ã Û Û Û Û 	Û Û Ý å Ý ç +÷õ õ  ç 7Õ 7Û à	×Òß#àˆ7×ÑÐ6Ó7€àˆb�j‰j˜Ó"€ôzH˜/ô zHôz�	ô ð ˆzÒØ€O×ÑÐ1Ô2Ù…Fð r<   