§
    ‹Ÿj_  ã                  óP  — d Z ddlm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 ddlZdd	lmZmZmZ  G d
„ de¦  «        Z G d„ d¦  «        Z G d„ deej        ¦  «        Z G d„ d¦  «        Z edd¬¦  «        Z G d„ deej        e         ¦  «        ZdS )z%Future-returning APIs for coroutines.é    )ÚannotationsN)ÚFuture)Údeque)Úpartial)Úchain)ÚAnyÚ	AwaitableÚCallableÚ
NamedTupleÚTypeVarÚcast)ÚEVENTSÚPOLLINÚPOLLOUTc                  óL   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d	ed<   dS )Ú_FutureEventr   ÚfutureÚstrÚkindÚtupleÚargsÚdictÚkwargsr   ÚmsgÚtimerN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úX/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/zmq/_future.pyr   r      sF   € € € € € € Ø€N€N�NØ€I€I�IØ€K€K�KØ€L€L�LØ€H€H�HØ€J€J�J€J€Jr!   r   c                  óF   — e Zd ZU dZdZded<   ded<   dd„Zdd	„Zddd„ZdS )Ú_AsynczMixin for common async logicNr   Ú_current_loopztype[Future]Ú_FutureÚreturnc                óú   — | j         €:|                      ¦   «         | _         |                      | j         ¦  «         | j         S |                      ¦   «         }|| j         ur|| _         |                      |¦  «         |S )z‡Get event loop

        Notice if event loop has changed,
        and register init_io_state on activation of a new event loop
        )r%   Ú_default_loopÚ_init_io_state)ÚselfÚcurrent_loops     r"   Ú	_get_loopz_Async._get_loop1   s‚   € ð ÔÐ%Ø!%×!3Ò!3Ñ!5Ô!5ˆDÔØ×Ò Ô 2Ñ3Ô3Ð3ØÔ%Ð%Ø×)Ò)Ñ+Ô+ˆØ˜tÔ1Ð1Ð1à!-ˆDÔØ×Ò Ñ-Ô-Ð-ØÐr!   c                ó    — t          d¦  «        ‚)Nz!Must be implemented in a subclass©ÚNotImplementedError)r+   s    r"   r)   z_Async._default_loopB   s   € Ý!Ð"EÑFÔFÐFr!   ÚNonec                ó   — d S ©Nr    ©r+   Úloops     r"   r*   z_Async._init_io_stateE   s   € Øˆr!   )r'   r   r3   )r'   r1   )	r   r   r   Ú__doc__r%   r   r-   r)   r*   r    r!   r"   r$   r$   +   s~   € € € € € € Ø&Ð&à€MÐÐÐÑØÐÐÑðð ð ð ð"Gð Gð Gð Gðð ð ð ð ð ð r!   r$   c                  ó`   ‡ — e Zd ZU dZded<   ded<   ded<   ded<   dd„Zdd„Zddˆ fd„Zˆ xZS )Ú_AsyncPollerz:Poller that returns a Future on poll, instead of blocking.ztype[_AsyncSocket]Ú_socket_classÚintÚ_READÚ_WRITEz	list[Any]Úraw_socketsr5   r   ÚsocketÚevtÚfr
   r'   r1   c                ó   — t          ¦   «         ‚)z"Schedule callback for a raw socketr/   )r+   r5   r>   r?   r@   s        r"   Ú_watch_raw_socketz_AsyncPoller._watch_raw_socketQ   ó   € å!Ñ#Ô#Ð#r!   Úsocketsc                ó   — t          ¦   «         ‚)z$Unschedule callback for a raw socketr/   )r+   r5   rD   s      r"   Ú_unwatch_raw_socketsz!_AsyncPoller._unwatch_raw_socketsU   rC   r!   éÿÿÿÿú Awaitable[list[tuple[Any, int]]]c                ó
  •‡ ‡‡‡‡‡‡— ‰                       ¦   «         Š|dk    rf	 t          ¦   «                              d¦  «        }‰                     |¦  «         n,# t          $ r}‰                     |¦  «         Y d}~nd}~ww xY w‰S ‰                      ¦   «         Š‰                       ¦   «         Šg Šˆfd„}‰                     ˆˆˆ fd„¦  «         g Šˆfd„}‰ j        D �]\  }}t          |t          j        ¦  «        r‘t          |‰ j        ¦  «        s/‰ j                             |¦  «        }‰                     |¦  «         |t          j        z  r|                     d‰¬¦  «         |t          j        z  r|                     d‰¬¦  «         Œ±‰                     |¦  «         d}|t          j        z  r
|‰ j        z  }|t          j        z  r
|‰ j        z  }‰                      ‰|||¦  «         �Œˆˆˆ ˆfd„}	‰                     |	¦  «         ‰r‰                     |¦  «         |�?|dk    r9ˆfd	„}
‰                     d
|z  |
¦  «        Šˆˆfd„}‰                     |¦  «         ˆfd„}‰                     |¦  «         ‰S )z Return a Future for a poll eventr   Nc                 ó^   •— ‰                      ¦   «         s‰                     d ¦  «         d S d S r3   ©ÚdoneÚ
set_result)r   Úwatchers    €r"   Úwake_rawz#_AsyncPoller.poll.<locals>.wake_rawm   s7   ø€ Ø—<’<‘>”>ð )Ø×"Ò" 4Ñ(Ô(Ð(Ð(Ð(ð)ð )r!   c                ó    •—  ‰j         ‰g‰¢R Ž S r3   )rF   )r@   r5   r=   r+   s    €€€r"   ú<lambda>z#_AsyncPoller.poll.<locals>.<lambda>r   s   ø€ Ð/�dÔ/°ÐC°{ÐCÐCÐC€ r!   c                ó:   •— ‰D ]}|                      ¦   «          Œd S r3   )Ú_clear_io_state)r@   ÚsÚwrapped_socketss     €r"   Ú_clear_wrapper_ioz,_AsyncPoller.poll.<locals>._clear_wrapper_iow   s1   ø€ Ø$ð $ð $�Ø×!Ò!Ñ#Ô#Ð#Ð#ð$ð $r!   Úpoll©r   c                óü  •— ‰                      ¦   «         rd S ‰                     ¦   «         r(	 ‰                     ¦   «          n# t          $ r Y nw xY wd S ‰                     ¦   «         r)‰                     ‰                     ¦   «         ¦  «         d S 	 t          t          ‰¦  «                             d¦  «        }‰ 	                    |¦  «         d S # t          $ r }‰                     |¦  «         Y d }~d S d }~ww xY w©Nr   )rL   Ú	cancelledÚcancelÚRuntimeErrorÚ	exceptionÚset_exceptionÚsuperr8   rW   rM   Ú	Exception)r@   ÚresultÚeÚ	__class__r   r+   rN   s      €€€€r"   Úon_poll_readyz(_AsyncPoller.poll.<locals>.on_poll_readyŽ   s&  ø€ Ø�{Š{‰}Œ}ð Ø�Ø× Ò Ñ"Ô"ð ðØ—M’M‘O”O�O�OøÝ#ð ð ð à�Dðøøøð �Ø× Ò Ñ"Ô"ð .Ø×$Ò$ W×%6Ò%6Ñ%8Ô%8Ñ9Ô9Ð9Ð9Ð9ð.Ý"¥<°Ñ6Ô6×;Ò;¸AÑ>Ô>�Fð ×%Ò% fÑ-Ô-Ð-Ð-Ð-øõ !ð ,ð ,ð ,Ø×(Ò(¨Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øøøøð,øøøs)   ­A Á
AÁAÂ(C Ã
C;ÃC6Ã6C;c                 ó^   •— ‰                       ¦   «         s‰                      d ¦  «         d S d S r3   rK   )rN   s   €r"   Útrigger_timeoutz*_AsyncPoller.poll.<locals>.trigger_timeout©   s7   ø€ Ø—|’|‘~”~ð -Ø×&Ò& tÑ,Ô,Ð,Ð,Ð,ð-ð -r!   çü©ñÒMbP?c                ó~   •— t          ‰d¦  «        r‰                     ¦   «          d S ‰                     ‰¦  «         d S )Nr\   )Úhasattrr\   Úremove_timeout)r@   r5   Útimeout_handles    €€r"   Úcancel_timeoutz)_AsyncPoller.poll.<locals>.cancel_timeout¯   sG   ø€ Ý˜>¨8Ñ4Ô4ð 8Ø"×)Ò)Ñ+Ô+Ð+Ð+Ð+à×'Ò'¨Ñ7Ô7Ð7Ð7Ð7r!   c                ó\   •— ‰                      ¦   «         s‰                     ¦   «          d S d S r3   )rL   r\   )r@   rN   s    €r"   Úcancel_watcherz)_AsyncPoller.poll.<locals>.cancel_watcher·   s3   ø€ Ø—<’<‘>”>ð !Ø—’Ñ Ô Ð Ð Ð ð!ð !r!   )r&   r`   rW   rM   ra   r_   r-   Úadd_done_callbackrD   Ú
isinstanceÚ_zmqÚSocketr9   Úfrom_socketÚappendr   Ú_add_recv_eventr   Ú_add_send_eventr;   r<   rB   Ú
call_later)r+   Útimeoutrb   rc   rO   rV   r>   Úmaskr?   re   rg   rm   ro   r   r5   r=   rl   rN   rU   rd   s   `            @@@@@@€r"   rW   z_AsyncPoller.pollY   sU  øøøøøøøø€ à—’‘”ˆØ�aŠ<ˆ<ð*Ý™œŸš a™œ�ð ×!Ò! &Ñ)Ô)Ð)Ð)øõ ð (ð (ð (Ø×$Ò$ QÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð(øøøð ˆMà�~Š~ÑÔˆð —,’,‘.”.ˆð "$ˆð	)ð 	)ð 	)ð 	)ð 	)ð 	×!Ò!ØCÐCÐCÐCÐCÐCñ	
ô 	
ð 	
ð /1ˆð	$ð 	$ð 	$ð 	$ð 	$ð !œLð 	Dñ 	D‰LˆF�DÝ˜&¥$¤+Ñ.Ô.ð DÝ! &¨$Ô*<Ñ=Ô=ð 3à!Ô/×;Ò;¸FÑCÔC�FØ#×*Ò*¨6Ñ2Ô2Ð2Ø�$œ+Ñ%ð CØ×*Ò*¨6¸'Ð*ÑBÔBÐBØ�$œ,Ñ&ð CØ×*Ò*¨6¸'Ð*ÑBÔBÐBøà×"Ò" 6Ñ*Ô*Ð*Ø�Ø�$œ+Ñ%ð &Ø˜4œ:Ñ%�CØ�$œ,Ñ&ð 'Ø˜4œ;Ñ&�CØ×&Ò& t¨V°S¸(ÑCÔCÐCÑCð	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð( 	×!Ò! -Ñ0Ô0Ð0àð 	9Ø×%Ò%Ð&7Ñ8Ô8Ð8àÐ 7¨Q¢; ;ð-ð -ð -ð -ð -ð "Ÿ_š_¨T°G©^¸_ÑMÔMˆNð8ð 8ð 8ð 8ð 8ð 8ð ×$Ò$ ^Ñ4Ô4Ð4ð	!ð 	!ð 	!ð 	!ð 	!ð 	× Ò  Ñ0Ô0Ð0àˆs   ¤!A Á
BÁ%A?Á?B)
r5   r   r>   r   r?   r:   r@   r
   r'   r1   )r5   r   rD   r   r'   r1   )rG   )r'   rH   )	r   r   r   r6   r   rB   rF   rW   Ú__classcell__©rd   s   @r"   r8   r8   I   s§   ø€ € € € € € ØDÐDà%Ð%Ð%Ñ%Ø€J€J�JØ€K€K�KØÐÐÑð$ð $ð $ð $ð$ð $ð $ð $ðdð dð dð dð dð dð dð dð dð dð dr!   r8   c                  ó$   — e Zd Zed„ ¦   «         ZdS )Ú_NoTimerc                 ó   — d S r3   r    r    r!   r"   r\   z_NoTimer.cancelÁ   s   € àˆr!   N)r   r   r   Ústaticmethodr\   r    r!   r"   r~   r~   À   s-   € € € € € Øðð ñ „\ðð ð r!   r~   ÚTÚ_AsyncSocket)Úboundc                  ó°  ‡ — e Zd ZU dZdZdZded<   eZdZ		 	 	 	 dDdEˆ fd
„Z
edFdGd„¦   «         ZdFdHˆ fd„Zej        j        j        e_        ˆ fd„Zej        j        j        e_        	 dIdJd„Z	 dIdKd „Zddd!œdLd$„Z	 dIdMd'„Z	 	 	 dIdNd*„Zd+„ Zdej        fdOd,„Zd-„ Zd.„ ZedFd/„¦   «         Zdddd0œdPd9„ZdQd:„Zd;„ Z d<„ Z!dRd=„Z"dFd>„Z#d?„ Z$d@„ Z%dA„ Z&dFdB„Z'dC„ Z(ˆ xZ)S )Sr‚   Nr   ú_zmq.SocketÚ_shadow_sockrG   Ú_from_socketú_zmq.Socket | Noner'   r1   c                ó   •— t          |t          j        ¦  «        rd |}}|�/t          ¦   «                              |j        ¬¦  «         || _        nD t          ¦   «         j        ||fi |¤Ž t          j                             | j        ¦  «        | _        |�)t          j	        | j
        j        › d�t          d¬¦  «         t          ¦   «         | _        t          ¦   «         | _        d| _        | j        j        | _        d S )N)Úshadowz^(io_loop) argument is deprecated in pyzmq 22.2. The currently active loop will always be used.é   )Ú
stacklevelr   )rq   rr   rs   r`   Ú__init__Ú
underlyingr†   rŠ   ÚwarningsÚwarnrd   r   ÚDeprecationWarningr   Ú_recv_futuresÚ_send_futuresÚ_stateÚFDÚ_fd)r+   ÚcontextÚsocket_typeÚio_loopr‡   r   rd   s         €r"   r�   z_AsyncSocket.__init__Ó   sý   ø€ õ �g�tœ{Ñ+Ô+ð 	4Ø%)¨7�\ˆGØÐ#Ý‰GŒG×Ò LÔ$;ÐÑ<Ô<Ð<Ø ,ˆDÔÐà�E‰GŒGÔ˜W kÐ<Ð<°VÐ<Ð<Ð<Ý $¤× 2Ò 2°4´?Ñ CÔ CˆDÔàÐÝŒMØ”>Ô*ð Bð Bð Bå"Øð	ñ ô ð õ #™WœWˆÔÝ"™WœWˆÔØˆŒØÔ$Ô'ˆŒˆˆr!   Úclsútype[T]r>   r™   r   r�   c                ó   —  | ||¬¦  «        S )z.Create an async socket from an existing Socket)r‡   r™   r    )rš   r>   r™   s      r"   rt   z_AsyncSocket.from_socketð   s   € ð ˆs °Ð8Ñ8Ô8Ð8r!   Úlingerú
int | Nonec                óx  •— | j         s�| j        �ˆt          t          | j        pg | j        pg ¦  «        ¦  «        }|D ]F}|j                             ¦   «         s+	 |j                             ¦   «          Œ6# t          $ r Y ŒBw xY wŒG|  
                    ¦   «          t          ¦   «                              |¬¦  «         d S )N)r�   )Úclosedr–   Úlistr   r’   r“   r   rL   r\   r]   rS   r`   Úclose)r+   r�   Ú
event_listÚeventrd   s       €r"   r¢   z_AsyncSocket.closeõ   sÚ   ø€ ØŒ{ð 	#˜tœxÐ3Ý-1Ý�dÔ(Ð.¨B°Ô0BÐ0HÀbÑIÔIñ.ô .ˆJð $ð ð �Ø”|×(Ò(Ñ*Ô*ð ðØœ×+Ò+Ñ-Ô-Ð-Ð-øÝ'ð ð ð à˜ðøøøðð × Ò Ñ"Ô"Ð"Ý‰Œ�Š˜VˆÑ$Ô$Ð$Ð$Ð$s   ÁA3Á3
B Á?B c                óŠ   •— t          ¦   «                              |¦  «        }|t          k    r|                      |¦  «         |S r3   )r`   Úgetr   Ú_schedule_remaining_events)r+   Úkeyrb   rd   s      €r"   r¦   z_AsyncSocket.get  s:   ø€ Ý‘”—’˜SÑ!Ô!ˆØ•&Š=ˆ=Ø×+Ò+¨FÑ3Ô3Ð3Øˆr!   TFÚflagsr:   ÚcopyÚboolÚtrackú)Awaitable[list[bytes] | list[_zmq.Frame]]c                óP   — |                       dt          |||¬¦  «        ¬¦  «        S )zvReceive a complete multipart zmq message.

        Returns a Future whose result will be a multipart message.
        Úrecv_multipart©r©   rª   r¬   ©r   ©rv   r   ©r+   r©   rª   r¬   s       r"   r¯   z_AsyncSocket.recv_multipart  s5   € ð ×#Ò#Ø¥T°¸DÈÐ%NÑ%NÔ%Nð $ñ 
ô 
ð 	
r!   úAwaitable[bytes | _zmq.Frame]c                óP   — |                       dt          |||¬¦  «        ¬¦  «        S )z™Receive a single zmq frame.

        Returns a Future, whose result will be the received frame.

        Recommend using recv_multipart instead.
        Úrecvr°   r±   r²   r³   s       r"   r¶   z_AsyncSocket.recv  s5   € ð ×#Ò#Ø�4 e°$¸eÐDÑDÔDð $ñ 
ô 
ð 	
r!   ©Únbytesr©   r¸   úAwaitable[int]c              óR   — |                       d|ft          ||¬¦  «        ¬¦  «        S )zŽReceive a single zmq frame into a pre-allocated buffer.

        Returns a Future, whose result will be the number of bytes received.
        Ú	recv_intor·   )r   r   r²   )r+   Úbufr¸   r©   s       r"   r»   z_AsyncSocket.recv_into&  s7   € ð ×#Ò#Ø˜s˜f­T¸ÀuÐ-MÑ-MÔ-Mð $ñ 
ô 
ð 	
r!   Ú	msg_partsú%Awaitable[_zmq.MessageTracker | None]c                óP   — ||d<   ||d<   ||d<   |                       d||¬¦  «        S )zqSend a complete multipart zmq message.

        Returns a Future that resolves when sending is complete.
        r©   rª   r¬   Úsend_multipart©r   r   )rw   )r+   r½   r©   rª   r¬   r   s         r"   rÀ   z_AsyncSocket.send_multipart1  s;   € ð  ˆˆw‰Øˆˆv‰Øˆˆw‰Ø×#Ò#Ð$4¸)ÈFÐ#ÑSÔSÐSr!   Údatar   c                óš   — ||d<   ||d<   ||d<   |                      t          |||¬¦  «        ¦  «         |                      d||¬¦  «        S )z”Send a single zmq frame.

        Returns a Future that resolves when sending is complete.

        Recommend using send_multipart instead.
        r©   rª   r¬   r°   ÚsendrÁ   )Úupdater   rw   )r+   rÂ   r©   rª   r¬   r   s         r"   rÄ   z_AsyncSocket.send=  s[   € ð  ˆˆw‰Øˆˆv‰Øˆˆw‰Ø�Š•d ¨T¸Ð?Ñ?Ô?Ñ@Ô@Ð@Ø×#Ò# F°¸VÐ#ÑDÔDÐDr!   c                ó¢   ‡‡‡— |                       ¦   «         Šˆˆˆfd„}‰                     |¦  «         ˆˆfd„}‰                     |¦  «         ‰S )zDeserialize with Futuresc                ó  •— ‰                      ¦   «         rK‰                     ¦   «         s5‰                     ¦   «         €!t          j        d‰› d‰› d�t
          ¦  «         dS ‰                     ¦   «         r)‰                     ‰                     ¦   «         ¦  «         dS ‰                     ¦   «         }	  ‰|¦  «        }‰                     |¦  «         dS # t          $ r }‰                     |¦  «         Y d}~dS d}~ww xY w)z+Chain result through serialization to recvdNzFuture z completed while awaiting z. A message has been dropped!)
rL   r[   r^   r�   r�   ÚRuntimeWarningr_   rb   rM   ra   )Ú_r¼   Úloadedrc   r@   ÚloadÚrecvds       €€€r"   Ú_chainz)_AsyncSocket._deserialize.<locals>._chainU  s  ø€ à�vŠv‰xŒxð ð —’Ñ(Ô(ð ¨U¯_ª_Ñ->Ô->Ð-FÝ”Mð d !ÐcÐc¸uÐcÐcÐcÝ&ñ	ô ð ð �Ø�ŠÑ Ô ð 	)Ø—’ §¢Ñ 1Ô 1Ñ2Ô2Ð2Ð2Ð2à—l’l‘n”n�ð)Ø!˜T #™YœY�Fð —L’L Ñ(Ô(Ð(Ð(Ð(øõ !ð 'ð 'ð 'Ø—O’O AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&øøøøð'øøøs   Â3C Ã
C?ÃC:Ã:C?c                óˆ   •— ‰                      ¦   «         rdS ‰                     ¦   «         r‰                     ¦   «          dS dS )z"Chain cancellation from f to recvdN)rL   r[   r\   )rÉ   r@   rÌ   s    €€r"   Ú_chain_cancelz0_AsyncSocket._deserialize.<locals>._chain_cancelp  sC   ø€ à�zŠz‰|Œ|ð Ø�Ø�{Š{‰}Œ}ð Ø—’‘”���ðð r!   )r&   rp   )r+   rÌ   rË   rÍ   rÏ   r@   s    ``  @r"   Ú_deserializez_AsyncSocket._deserializeQ  s„   øøø€ à�LŠL‰NŒNˆð	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð2 	×Ò Ñ'Ô'Ð'ð	ð 	ð 	ð 	ð 	ð 	ð 	
×Ò˜MÑ*Ô*Ð*àˆr!   c                óÎ  ‡ ‡‡— ‰ j         rt          j        t          j        ¦  «        ‚‰                      ¦   «         }|                     ‰ |¦  «         t          t          |                     |¦  «        ¦  «        Š‰  	                    ¦   «         Šˆˆˆ fd„}‰ 
                    ¦   «         r |‰¦  «         n‰                     |¦  «         ˆfd„}‰                     |¦  «         ‰S )zSpoll the socket for events

        returns a Future for the poll results.
        c                óº  •— ‰                      ¦   «         rd S ‰                     ¦   «         r(	 ‰                     ¦   «          n# t          $ r Y nw xY wd S |                      ¦   «         r)‰                     ‰                     ¦   «         ¦  «         d S t          ‰                     ¦   «         ¦  «        }‰                     | 	                    ‰d¦  «        ¦  «         d S rZ   )
rL   r[   r\   r]   r^   r_   r   rb   rM   r¦   )r@   Úevtsr   Úpoll_futurer+   s     €€€r"   Úunwrap_resultz(_AsyncSocket.poll.<locals>.unwrap_resultŠ  sÞ   ø€ Ø�{Š{‰}Œ}ð Ø�Ø×$Ò$Ñ&Ô&ð ðØ—M’M‘O”O�O�OøÝ#ð ð ð à�Dðøøøð �Ø�{Š{‰}Œ}ð 5Ø×$Ò$ [×%:Ò%:Ñ%<Ô%<Ñ=Ô=Ð=Ð=Ð=å˜K×.Ò.Ñ0Ô0Ñ1Ô1�Ø×!Ò! $§(¢(¨4°Ñ"3Ô"3Ñ4Ô4Ð4Ð4Ð4s   ­A Á
AÁAc                ó€   •— ‰                      ¦   «         s(	 ‰                     ¦   «          dS # t          $ r Y dS w xY wdS )z4Cancel underlying poll if request has been cancelledN)rL   r\   r]   )r   rÔ   s    €r"   Úcancel_pollz&_AsyncSocket.poll.<locals>.cancel_poll   s`   ø€ à×#Ò#Ñ%Ô%ð ðØ×&Ò&Ñ(Ô(Ð(Ð(Ð(øÝ#ð ð ð à�D�Dðøøøðð s   —- ­
;º;)r    rr   ÚZMQErrorÚENOTSUPÚ_poller_classÚregisterr   r   rW   r&   rL   rp   )r+   ry   r©   ÚprÕ   r×   r   rÔ   s   `     @@r"   rW   z_AsyncSocket.poll{  s  øøø€ ð Œ;ð 	.Ý”-¥¤Ñ-Ô-Ð-à×ÒÑ Ô ˆØ	�
Š
�4˜ÑÔÐÝ�6 1§6¢6¨'¡?¤?Ñ3Ô3ˆà—’‘”ˆð	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð  ×ÒÑÔð 	9àˆM˜+Ñ&Ô&Ð&Ð&à×)Ò)¨-Ñ8Ô8Ð8ð	ð 	ð 	ð 	ð 	ð 	× Ò  Ñ-Ô-Ð-àˆr!   c                ó:   ‡— ˆfd„}|                       ||¦  «        S )z'Add a timeout for a send or recv Futurec                 ó€   •— ‰                       ¦   «         rd S ‰                      t          j        ¦   «         ¦  «         d S r3   )rL   r_   rr   ÚAgainrX   s   €r"   Úfuture_timeoutz1_AsyncSocket._add_timeout.<locals>.future_timeout°  s:   ø€ Ø�{Š{‰}Œ}ð à�ð × Ò ¥¤¡¤Ñ.Ô.Ð.Ð.Ð.r!   )Ú_call_later)r+   r   ry   rà   s    `  r"   Ú_add_timeoutz_AsyncSocket._add_timeout­  s4   ø€ ð	/ð 	/ð 	/ð 	/ð 	/ð ×Ò ¨Ñ8Ô8Ð8r!   c                óR   — |                       ¦   «                              ||¦  «        S )zÊSchedule a function to be called later

        Override for different IOLoop implementations

        Tornado and asyncio happen to both have ioloop.call_later
        with the same signature.
        )r-   rx   )r+   ÚdelayÚcallbacks      r"   rá   z_AsyncSocket._call_laterº  s$   € ð �~Š~ÑÔ×*Ò*¨5°(Ñ;Ô;Ð;r!   c                ó\   — |sdS 	 |                      |¦  «         dS # t          $ r Y dS w xY w)z°Make sure that futures are removed from the event list when they resolve

        Avoids delaying cleanup until the next send/recv event,
        which may never come.
        N)ÚremoveÚ
ValueError)r   r£   r¤   s      r"   Ú_remove_finished_futurez$_AsyncSocket._remove_finished_futureÄ  sR   € ð ð 	ØˆFð	Ø×Ò˜eÑ$Ô$Ð$Ð$Ð$øÝð 	ð 	ð 	àˆFˆFð	øøøs   † �
+ª+)r   r   r   r   r   r   útuple | Noneúdict[str, Any] | Noner   úFuture | Noner   c               óŠ  — |p|                       ¦   «         }|€d}|€i }|                     d¦  «        r…|                     dd¦  «        t          j        z  rbt          | j        |¦  «        }	  ||i |¤Ž}|                     |¦  «         n,# t          $ r}| 	                    |¦  «         Y d}~nd}~ww xY w|S t          }	t          t          d¦  «        r+| j        j        }
|
dk    r|                      ||
dz  ¦  «        }	t          ||||d|	¬¦  «        }| j                             |¦  «         | j                             t"          ¦  «        t$          z  r|                      ¦   «          | j        rR|| j        v rI|                     t+          | j        | j        |¬	¦  «        ¦  «         |                      t$          ¦  «         |S )
z4Add a recv event, returning the corresponding FutureNr    r¶   r©   r   ÚRCVTIMEOrh   ©r   r   r   r   ©r£   r¤   )r&   Ú
startswithr¦   rr   ÚDONTWAITÚgetattrr†   rM   ra   r_   r~   rj   Úrcvtimeorâ   r   r’   ru   r   r   Ú_handle_recvrp   r   ré   Ú_add_io_state)r+   r   r   r   r   r@   r¶   Úrrc   r   Ú
timeout_msÚ_future_events               r"   rv   z_AsyncSocket._add_recv_eventÖ  s  € ð Ð$�d—l’l‘n”nˆØˆ<ØˆDØˆ>ØˆFØ�?Š?˜6Ñ"Ô"ð 		 v§z¢z°'¸1Ñ'=Ô'=ÅÄÑ'Mð 		å˜4Ô,¨dÑ3Ô3ˆDð Ø�D˜$Ð) &Ð)Ð)�ð —’˜Q‘”��øõ ð #ð #ð #Ø—’ Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"øøøøð#øøøð ˆHåˆÝ•4˜Ñ$Ô$ð 	@ØÔ*Ô3ˆJØ˜QŠˆØ×)Ò)¨!¨Z¸$Ñ->Ñ?Ô?�õ %Øˆt˜$ v°4¸uð
ñ 
ô 
ˆð 	Ô×!Ò! -Ñ0Ô0Ð0àÔ× Ò ¥Ñ(Ô(­6Ñ1ð 	 à×ÒÑÔÐØÔð 	' -°4Ô3EÐ"EÐ"Eð ×ÒÝØÔ0Ø#Ô1Ø'ðñ ô ñô ð ð ×Ò�vÑ&Ô&Ð&Øˆs   Á-B Â
B4ÂB/Â/B4c                óð  — |p|                       ¦   «         }|dv �r| j        sü|                     dd¦  «        }|                     ¦   «         }|t          j        z  |d<   t          | j        |¦  «        }d}		  ||fi |¤Ž}
|                     |
¦  «         nj# t          j	        $ r1}|t          j        z  r| 
                    |¦  «         nd}	Y d}~n/d}~wt          $ r}| 
                    |¦  «         Y d}~nd}~ww xY w|	r| j        r|                      ¦   «          |S t          }t          t          d¦  «        rC| j                             t          j        ¦  «        }|dk    r|                      ||dz  ¦  «        }t%          ||d	|||¬
¦  «        }| j                             |¦  «         |                     t+          | j        | j        |¬¦  «        ¦  «         |                      t0          ¦  «         |S )z4Add a send event, returning the corresponding Future)rÄ   rÀ   r©   r   TFNÚSNDTIMEOrh   r    rï   rð   )r&   r“   r¦   rª   rr   rò   ró   r†   rM   rß   r_   ra   r’   r§   r~   rj   rû   râ   r   ru   rp   r   ré   rö   r   )r+   r   r   r   r   r@   r©   Únowait_kwargsrÄ   Úfinish_earlyr÷   rc   r   rø   rù   s                  r"   rw   z_AsyncSocket._add_send_event  s@  € àÐ$�d—l’l‘n”nˆð Ð-Ð-Ñ-°dÔ6HÐ-Ø—J’J˜w¨Ñ*Ô*ˆEØ"ŸKšK™MœMˆMØ%*­T¬]Ñ%:ˆM˜'Ñ"õ ˜4Ô,¨dÑ3Ô3ˆDð  ˆLð Ø�D˜Ð.Ð. Ð.Ð.�ð —’˜Q‘”��øõ ”:ð )ð )ð )Ø�4œ=Ñ(ð )Ø—O’O AÑ&Ô&Ð&Ð&ð $)�LøøøøøøøøøÝð #ð #ð #Ø—’ Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"øøøøð#øøøð
 ð ð Ô%ð 6Ø×3Ò3Ñ5Ô5Ð5Ø�åˆÝ•4˜Ñ$Ô$ð 	@ØÔ*×.Ò.­t¬}Ñ=Ô=ˆJØ˜QŠˆØ×)Ò)¨!¨Z¸$Ñ->Ñ?Ô?�õ %Øˆt˜" V°¸Eð
ñ 
ô 
ˆð 	Ô×!Ò! -Ñ0Ô0Ð0à	×ÒÝØÔ,ØÔ-Ø#ðñ ô ñ	
ô 	
ð 	
ð 	×Ò�7Ñ#Ô#Ð#Øˆs$   Á7	B ÂC=Â%'CÃC=ÃC8Ã8C=c                óô  — | j                              t          ¦  «        t          z  sdS d}| j        r?| j                             ¦   «         \  }}}}}}|                     ¦   «         rd}nn| j        °?| j        s|                      t          ¦  «         |€dS |                     ¦   «          |dk    r| 	                    d¦  «         dS |dk    r| j         j
        }n8|dk    r| j         j        }n%|dk    r| j         j        }nt          d|›�¦  «        ‚|dxx         t          j        z  cc<   	  ||i |¤Ž}| 	                    |¦  «         dS # t           $ r }	|                     |	¦  «         Y d}	~	dS d}	~	ww xY w)zHandle recv eventsNrW   r¯   r¶   r»   zUnhandled recv event type: r©   )r†   r¦   r   r   r’   ÚpopleftrL   Ú_drop_io_stater\   rM   r¯   r¶   r»   rè   rr   rò   ra   r_   )
r+   r@   r   r   r   rÉ   r   r¶   rb   rc   s
             r"   rõ   z_AsyncSocket._handle_recvJ  sÃ  € àÔ ×$Ò$¥VÑ,Ô,­vÑ5ð 	àˆFØˆØÔ ð 	Ø.2Ô.@×.HÒ.HÑ.JÔ.JÑ+ˆAˆt�T˜6 1 eà�vŠv‰xŒxð Ø��àð Ô ð 	ð Ô!ð 	(Ø×Ò¥Ñ'Ô'Ð'àˆ9ØˆFà�Š‰Œˆà�6Š>ˆ>à�LŠL˜ÑÔÐØˆFØÐ%Ò%Ð%ØÔ$Ô3ˆDˆDØ�VŠ^ˆ^ØÔ$Ô)ˆDˆDØ�[Ò Ð ØÔ$Ô.ˆDˆDåÐC¸4ÐCÐCÑDÔDÐDàˆwˆˆŒ�4œ=Ñ(ˆˆ‰ð	!Ø�T˜4Ð* 6Ð*Ð*ˆFð �LŠL˜Ñ Ô Ð Ð Ð øõ ð 	ð 	ð 	Ø�OŠO˜AÑÔÐÐÐÐÐÐÐøøøøð	øøøs   Ä.E Å
E7ÅE2Å2E7c                óÐ  — | j                              t          ¦  «        t          z  sd S d }| j        r?| j                             ¦   «         \  }}}}}}|                     ¦   «         rd }nn| j        °?| j        s|                      t          ¦  «         |€d S |                     ¦   «          |dk    r| 	                    d ¦  «         d S |dk    r| j         j
        }n%|dk    r| j         j        }nt          d|›�¦  «        ‚|dxx         t          j        z  cc<   	  ||fi |¤Ž}| 	                    |¦  «         d S # t          $ r }	|                     |	¦  «         Y d }	~	d S d }	~	ww xY w)NrW   rÀ   rÄ   zUnhandled send event type: r©   )r†   r¦   r   r   r“   rÿ   rL   r   r\   rM   rÀ   rÄ   rè   rr   rò   ra   r_   )
r+   r@   r   r   r   r   r   rÄ   rb   rc   s
             r"   Ú_handle_sendz_AsyncSocket._handle_sendu  s®  € ØÔ ×$Ò$¥VÑ,Ô,­wÑ6ð 	àˆFØˆØÔ ð 	Ø04Ô0B×0JÒ0JÑ0LÔ0LÑ-ˆAˆt�T˜6 3¨à�vŠv‰xŒxð Ø��àð Ô ð 	ð Ô!ð 	)Ø×Ò¥Ñ(Ô(Ð(àˆ9ØˆFà�Š‰Œˆà�6Š>ˆ>à�LŠL˜ÑÔÐØˆFØÐ%Ò%Ð%ØÔ$Ô3ˆDˆDØ�VŠ^ˆ^ØÔ$Ô)ˆDˆDåÐC¸4ÐCÐCÑDÔDÐDàˆwˆˆŒ�4œ=Ñ(ˆˆ‰ð	!Ø�T˜#Ð(Ð( Ð(Ð(ˆFð �LŠL˜Ñ Ô Ð Ð Ð øõ ð 	ð 	ð 	Ø�OŠO˜AÑÔÐÐÐÐÐÐÐøøøøð	øøøs   Ä	D; Ä;
E%ÅE Å E%c                ó  — | j         j        rdS | j                              t          ¦  «        }|t          j        z  r|                      ¦   «          |t          j        z  r|                      ¦   «          |  	                    ¦   «          dS )z(Dispatch IO events to _handle_recv, etc.N)
r†   r    r¦   r   rr   r   rõ   r   r  r§   )r+   ÚfdÚeventsÚ
zmq_eventss       r"   Ú_handle_eventsz_AsyncSocket._handle_eventsž  s…   € àÔÔ#ð 	ØˆFàÔ&×*Ò*­6Ñ2Ô2ˆ
Ø�œÑ#ð 	 Ø×ÒÑÔÐØ�œÑ$ð 	 Ø×ÒÑÔÐØ×'Ò'Ñ)Ô)Ð)Ð)Ð)r!   c                ó°   — | j         dk    rdS |€| j                             t          ¦  «        }|| j         z  r|                      d| j        ¦  «         dS dS )zkSchedule a call to handle_events next loop iteration

        If there are still events to handle.
        r   N)r”   r†   r¦   r   rá   r  )r+   r  s     r"   r§   z'_AsyncSocket._schedule_remaining_eventsª  si   € ð Œ;˜!ÒÐàˆFØˆ>ØÔ&×*Ò*­6Ñ2Ô2ˆFØ�D”KÑð 	5Ø×Ò˜Q Ô 3Ñ4Ô4Ð4Ð4Ð4ð	5ð 	5r!   c                ór   — | j         |k    r| j         |z  x}| _         |                      | j         ¦  «         dS )zAdd io_state to poller.N©r”   Ú_update_handler©r+   Ústates     r"   rö   z_AsyncSocket._add_io_stateº  s>   € àŒ;˜%ÒÐØ"&¤+°Ñ"5Ð5ˆE�D”KØ×Ò˜Tœ[Ñ)Ô)Ð)Ð)Ð)r!   c                ón   — | j         |z  r| j         | z  | _         |                      | j         ¦  «         dS )z&Stop poller from watching an io_state.Nr
  r  s     r"   r   z_AsyncSocket._drop_io_stateÀ  s=   € àŒ;˜Ñð 	1Øœ+¨%¨Ñ0ˆDŒKØ×Ò˜Tœ[Ñ)Ô)Ð)Ð)Ð)r!   c                óZ   — |r|                       ¦   «          |                      ¦   «          dS )zOUpdate IOLoop handler with state.

        zmq FD is always read-only.
        N)r-   r§   r  s     r"   r  z_AsyncSocket._update_handlerÆ  s4   € ð ð 	Ø�NŠNÑÔÐØ×'Ò'Ñ)Ô)Ð)Ð)Ð)r!   c                ó´   — |€|                       ¦   «         }|                     | j        | j        | j        ¦  «         |                      d| j        ¦  «         dS )z#initialize the ioloop event handlerNr   )r-   Úadd_handlerr†   r  r;   rá   r4   s     r"   r*   z_AsyncSocket._init_io_stateÑ  sU   € àˆ<Ø—>’>Ñ#Ô#ˆDØ×Ò˜Ô*¨DÔ,?ÀÄÑLÔLÐLØ×Ò˜˜DÔ/Ñ0Ô0Ð0Ð0Ð0r!   c                ó€   — | j         }| j         j        r| j        }| j        �| j                             |¦  «         dS dS )zNunregister the ioloop event handler

        called once during close
        N)r†   r    r–   r%   Úremove_handler)r+   r  s     r"   rS   z_AsyncSocket._clear_io_stateØ  sO   € ð
 ÔˆØÔÔ#ð 	Ø”ˆBØÔÐ)ØÔ×-Ò-¨bÑ1Ô1Ð1Ð1Ð1ð *Ð)r!   )NrG   NN)r‡   rˆ   r'   r1   r3   )rš   r›   r>   r…   r™   r   r'   r�   )r�   rž   r'   r1   )r   TF)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ê   r   rë   r   rì   r'   r   )NNN)r   r   )*r   r   r   r’   r“   r”   r   r8   rÚ   r–   r�   Úclassmethodrt   r¢   rr   rs   r6   r¦   r¯   r¶   r»   rÀ   rÄ   rÐ   r   rW   râ   rá   r€   ré   rv   rw   rõ   r  r  r§   rö   r   r  r*   rS   r{   r|   s   @r"   r‚   r‚   É   sö  ø€ € € € € € ð €MØ€MØ€FØÐÐÑØ €MØ
€Cð ØØØ+/ð(ð (ð (ð (ð (ð (ð (ð: ð9ð 9ð 9ð 9ñ „[ð9ð%ð %ð %ð %ð %ð %ð %ð ”KÔ%Ô-€E„Mðð ð ð ð ð ”+”/Ô)€C„Kð @Eð	
ð 	
ð 	
ð 	
ð 	
ð @Eð
ð 
ð 
ð 
ð 
ð ()°qð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð HMð
Tð 
Tð 
Tð 
Tð 
Tð ØØðEð Eð Eð Eð Eð((ð (ð (ðT   t¤{ð 0ð 0ð 0ð 0ð 0ðd9ð 9ð 9ð<ð <ð <ð ðð ð ñ „\ðð* "Ø(,Ø $ð5ð 5ð 5ð 5ð 5ð 5ðn;ð ;ð ;ð ;ðz)!ð )!ð )!ðV&!ð &!ð &!ðR
*ð 
*ð 
*ð 
*ð5ð 5ð 5ð 5ð *ð *ð *ð*ð *ð *ð	*ð 	*ð 	*ð1ð 1ð 1ð 1ð	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2r!   ) r6   Ú
__future__r   r�   Úasyncior   Úcollectionsr   Ú	functoolsr   Ú	itertoolsr   Útypingr   r	   r
   r   r   r   Úzmqrr   r   r   r   r   r$   ÚPollerr8   r~   r�   rs   r‚   r    r!   r"   ú<module>r     sú  ðØ +Ð +ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð �:ñ ô ð ð$ð ð ð ð ñ ô ð ð<tð tð tð tð t�6˜4œ;ñ tô tð tðnð ð ð ð ñ ô ð ð €GˆC�~Ð&Ñ&Ô&€ðX2ð X2ð X2ð X2ð X2�6˜4œ; vÔ.ñ X2ô X2ð X2ð X2ð X2r!   