Ë
    òT•j¦¡  ã                   óº  — g d ¢Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZ ddlmZmZ ddlmZ ej"                  Z	 ddlZddlmZmZmZmZ d	Zd
Z e	j8                  «       ZdZdgZ e ed«      rdZedgz  Zej2                  dk(  rdZedgz  Zefd„Z!d„ Z"d„ Z#d„ Z$d„ Z% G d„ d«      Z&er G d„ de&«      Z' G d„ de&«      Z( G d„ de)«      Z*dEd„Z+ej2                  dk7  rdFd„Z,ndFd„Z, G d„ de)«      Z-d „ Z.ej2                  dk(  r G d!„ d"e)«      Z/d#„ Z0d$Z1d%Z2d&Z3d'Z4 e5h d(£«      Z6 e7d)„ e6D «       «      Z8d*Z9d+Z:e9e:fZ;d,e<d-e=e<ffd.„Z>d/„ Z?d0„ Z@dGd1e<fd2„ZAd1e<fd3„ZB G d4„ d5e)«      ZCd6„ ZDd7„ ZE G d8„ d9e*«      ZFd:„ ZGej2                  dk(  r d;„ ZHej’                  ej”                  hZKdHd<„ZLn*ddlMZM e eMd=«      reMjœ                  ZOneMj                   ZOdHd>„ZLej2                  dk(  r3d?„ ZQd@„ ZR ej¦                  e(eQ«       dA„ ZTdB„ ZU ej¦                  e'eT«       ydC„ ZQdD„ ZR ej¦                  e(eQ«       y# e$ r ej2                  dk(  r‚ dZY �Œûw xY w)I)ÚClientÚListenerÚPipeÚwaité    Né   )Úutil)ÚAuthenticationErrorÚBufferTooShort)Ú	reduction)ÚWAIT_OBJECT_0ÚWAIT_ABANDONED_0ÚWAIT_TIMEOUTÚINFINITEÚwin32i    g      4@ÚAF_INETÚAF_UNIXÚAF_PIPEc                 ó0   — t        j                  «       | z   S ©N©ÚtimeÚ	monotonic)Útimeouts    ú1/usr/lib/python3.12/multiprocessing/connection.pyÚ_init_timeoutr   <   s   € Ü�>‰>Ó˜gÑ%Ð%ó    c                 ó0   — t        j                  «       | kD  S r   r   )Úts    r   Ú_check_timeoutr   ?   s   € Ü�>‰>Ó˜aÑÐr   c                 ó   — | dk(  ry| dk(  r)t        j                  dt        j                  «       ¬«      S | dk(  r;t        j                  dt	        j
                  «       t        t        «      fz  d¬«      S t        d	«      ‚)
z?
    Return an arbitrary free address for the given family
    r   )Ú	localhostr   r   z	listener-)ÚprefixÚdirr   z\\.\pipe\pyc-%d-%d-Ú zunrecognized family)	ÚtempfileÚmktempr   Úget_temp_dirÚosÚgetpidÚnextÚ_mmap_counterÚ
ValueError©Úfamilys    r   Úarbitrary_addressr/   F   sy   € ð �ÒØØ	�9Ò	Ü�‰ k´t×7HÑ7HÓ7JÔKÐKØ	�9Ò	Ü�‰Ð&<Ü "§	¡	£¬T´-Ó-@ÐAñ'BØGIôKð 	Kô Ð.Ó/Ð/r   c                 óÀ   — t         j                  dk7  r| dk(  rt        d| z  «      ‚t         j                  dk(  r%| dk(  rt        t        | «      st        d| z  «      ‚yyy)zD
    Checks if the family is valid for the current environment.
    r   r   zFamily %s is not recognized.r   N)ÚsysÚplatformr,   ÚhasattrÚsocketr-   s    r   Ú_validate_familyr5   T   sc   € ô ‡|�|�wÒ 6¨YÒ#6ÜÐ7¸&Ñ@ÓAÐAä
‡|�|�wÒ 6¨YÒ#6ä”v˜vÔ&ÜÐ;¸fÑDÓEÐEð 'ð $7Ðr   c                 óØ   — t        | «      t        k(  ryt        | «      t        u r| j                  d«      ryt        | «      t        u st	        j
                  | «      ryt        d| z  «      ‚)z]
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    r   z\\r   r   zaddress type of %r unrecognized)ÚtypeÚtupleÚstrÚ
startswithr   Úis_abstract_socket_namespacer,   )Úaddresss    r   Úaddress_typer=   `   s\   € ô ˆGƒ}œÒØÜ	ˆg‹œ#Ñ	 '×"4Ñ"4°VÔ"<ØÜ	ˆg‹œ#Ñ	¤×!BÑ!BÀ7Ô!KØäÐ:¸WÑDÓEÐEr   c                   óª   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d„ «       Ze
d	„ «       Ze
d
„ «       Zd„ Zd„ Zdd„Zd„ Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zy)Ú_ConnectionBaseNc                 óŒ   — |j                  «       }|dk  rt        d«      ‚|s|st        d«      ‚|| _        || _        || _        y )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)Ú	__index__r,   Ú_handleÚ	_readableÚ	_writable)ÚselfÚhandleÚreadableÚwritables       r   Ú__init__z_ConnectionBase.__init__v   sO   € Ø×!Ñ!Ó#ˆØ�AŠ:ÜÐ-Ó.Ð.Ù¡ÜØHóJð JàˆŒØ!ˆŒØ!ˆ�r   c                 ó>   — | j                   �| j                  «        y y r   ©rB   Ú_close©rE   s    r   Ú__del__z_ConnectionBase.__del__ƒ   s   € Ø�<‰<Ð#Ø�K‰K�Mð $r   c                 ó2   — | j                   €t        d«      ‚y )Núhandle is closed)rB   ÚOSErrorrM   s    r   Ú_check_closedz_ConnectionBase._check_closed‡   s   € Ø�<‰<ÐÜÐ,Ó-Ð-ð  r   c                 ó2   — | j                   st        d«      ‚y )Nzconnection is write-only)rC   rQ   rM   s    r   Ú_check_readablez_ConnectionBase._check_readable‹   s   € Ø�~Š~ÜÐ4Ó5Ð5ð r   c                 ó2   — | j                   st        d«      ‚y )Nzconnection is read-only)rD   rQ   rM   s    r   Ú_check_writablez_ConnectionBase._check_writable�   s   € Ø�~Š~ÜÐ3Ó4Ð4ð r   c                 ót   — | j                   rd| _        t        d«      ‚| j                  «        t        d«      ‚)NFzbad message length)rD   rC   ÚcloserQ   rM   s    r   Ú_bad_message_lengthz#_ConnectionBase._bad_message_length“   s5   € Ø�>Š>Ø"ˆDŒNô Ð*Ó+Ð+ð �J‰JŒLÜÐ*Ó+Ð+r   c                 ó   — | j                   du S )z True if the connection is closedN©rB   rM   s    r   Úclosedz_ConnectionBase.closedš   s   € ð �|‰|˜tÐ#Ð#r   c                 ó   — | j                   S )z"True if the connection is readable)rC   rM   s    r   rG   z_ConnectionBase.readableŸ   ó   € ð �~‰~Ðr   c                 ó   — | j                   S )z"True if the connection is writable)rD   rM   s    r   rH   z_ConnectionBase.writable¤   r^   r   c                 ó:   — | j                  «        | j                  S )z+File descriptor or handle of the connection)rR   rB   rM   s    r   Úfilenoz_ConnectionBase.fileno©   s   € à×ÑÔØ�|‰|Ðr   c                 óf   — | j                   �	 | j                  «        d| _         yy# d| _         w xY w)zClose the connectionNrK   rM   s    r   rX   z_ConnectionBase.close®   s1   € à�<‰<Ð#ð$Ø—‘”à#�•ð	 $øð  $�•ús   Ž' §	0c                 óv  — | j                  «        | j                  «        t        |«      }|j                  dkD  r|j	                  d«      }|j
                  }|dk  rt        d«      ‚||k  rt        d«      ‚|€||z
  }n#|dk  rt        d«      ‚||z   |kD  rt        d«      ‚| j                  ||||z    «       y)	z,Send the bytes data from a bytes-like objectr   ÚBr   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rR   rV   Ú
memoryviewÚitemsizeÚcastÚnbytesr,   Ú_send_bytes)rE   ÚbufÚoffsetÚsizeÚmÚns         r   Ú
send_bytesz_ConnectionBase.send_bytes¶   s¼   € à×ÑÔØ×ÑÔÜ�s‹OˆØ�:‰:˜Š>Ø—‘�s“ˆAØ�H‰HˆØ�AŠ:ÜÐ1Ó2Ð2ØˆvŠ:ÜÐ5Ó6Ð6Øˆ<Ø�v‘:‰DØ�AŠXÜÐ/Ó0Ð0Ø�d‰]˜QÒÜÐ<Ó=Ð=Ø×Ñ˜˜6 &¨4¡-Ð0Õ1r   c                 óŒ   — | j                  «        | j                  «        | j                  t        j	                  |«      «       y)zSend a (picklable) objectN)rR   rV   ri   Ú_ForkingPicklerÚdumps©rE   Úobjs     r   Úsendz_ConnectionBase.sendÊ   s3   € à×ÑÔØ×ÑÔØ×Ñœ×.Ñ.¨sÓ3Õ4r   c                 óÌ   — | j                  «        | j                  «        |�|dk  rt        d«      ‚| j                  |«      }|€| j	                  «        |j                  «       S )z7
        Receive bytes data as a bytes object.
        r   znegative maxlength)rR   rT   r,   Ú_recv_bytesrY   Úgetvalue)rE   Ú	maxlengthrj   s      r   Ú
recv_bytesz_ConnectionBase.recv_bytesÐ   sa   € ð 	×ÑÔØ×ÑÔØÐ  Y°¢]ÜÐ1Ó2Ð2Ø×Ñ˜yÓ)ˆØˆ;Ø×$Ñ$Ô&Ø�|‰|‹~Ðr   c                 óÚ  — | j                  «        | j                  «        t        |«      5 }|j                  }|t	        |«      z  }|dk  rt        d«      ‚||kD  rt        d«      ‚| j                  «       }|j                  «       }|||z   k  rt        |j                  «       «      ‚|j                  d«       |j                  |||z  ||z   |z   «       |cddd«       S # 1 sw Y   yxY w)zq
        Receive bytes data into a writeable bytes-like object.
        Return the number of bytes read.
        r   znegative offsetzoffset too largeN)rR   rT   re   rf   Úlenr,   rw   Útellr
   rx   ÚseekÚreadinto)rE   rj   rk   rm   rf   ÚbytesizeÚresultrl   s           r   Úrecv_bytes_intoz_ConnectionBase.recv_bytes_intoÝ   sã   € ð
 	×ÑÔØ×ÑÔÜ˜‹_ð 	 à—z‘zˆHØ¤# a£&Ñ(ˆHØ˜ŠzÜ Ð!2Ó3Ð3Ø˜(Ò"Ü Ð!3Ó4Ð4Ø×%Ñ%Ó'ˆFØ—;‘;“=ˆDØ˜& 4™-Ò'Ü$ V§_¡_Ó%6Ó7Ð7à�K‰K˜ŒNØ�O‰O˜A˜f¨Ñ0Ø%¨™}°Ñ9ð;ô <à÷!	÷ 	ò 	ús   ¬B+C!Ã!C*c                 ó¨   — | j                  «        | j                  «        | j                  «       }t        j	                  |j                  «       «      S )zReceive a (picklable) object)rR   rT   rw   rq   ÚloadsÚ	getbuffer)rE   rj   s     r   Úrecvz_ConnectionBase.recvö   s?   € à×ÑÔØ×ÑÔØ×ÑÓ ˆÜ×$Ñ$ S§]¡]£_Ó5Ð5r   c                 ód   — | j                  «        | j                  «        | j                  |«      S )z/Whether there is any input available to be read)rR   rT   Ú_poll©rE   r   s     r   Úpollz_ConnectionBase.pollý   s)   € à×ÑÔØ×ÑÔØ�z‰z˜'Ó"Ð"r   c                 ó   — | S r   © rM   s    r   Ú	__enter__z_ConnectionBase.__enter__  ó   € Øˆr   c                 ó$   — | j                  «        y r   ©rX   ©rE   Úexc_typeÚ	exc_valueÚexc_tbs       r   Ú__exit__z_ConnectionBase.__exit__  ó   € Ø�
‰
�r   )TT)r   Nr   )r   )g        )Ú__name__Ú
__module__Ú__qualname__rB   rI   rN   rR   rT   rV   rY   Úpropertyr\   rG   rH   ra   rX   ro   ru   rz   r‚   r†   rŠ   r�   r•   rŒ   r   r   r?   r?   s   s“   „ Ø€Gó	"òò.ò6ò5ò,ð ñ$ó ð$ð ñó ðð ñó ðòò
$ó2ò(5óóò26ó#òór   r?   c                   óP   — e Zd ZdZdZdZej                  fd„Zd„ Z	d	d„Z
d„ Zd„ Zy)
ÚPipeConnectionzª
        Connection class based on a Windows named pipe.
        Overlapped I/O is used, so the handles must have been created
        with FILE_FLAG_OVERLAPPED.
        FNc                 ód   — | j                   }|�|j                  «         || j                  «       y r   )Ú_send_ovÚcancelrB   )rE   Ú_CloseHandleÚovs      r   rL   zPipeConnection._close  s%   € Ø—‘ˆBØˆ~à—	‘	”Ù˜Ÿ™Õ&r   c                 ó>  — | j                   �t        d«      ‚t        j                  | j                  |d¬«      \  }}|| _         	 |t        j
                  k(  r1t        j                  |j                  gdt        «      }|t        k(  sJ ‚d | _         |j                  d«      \  }}|t        j                  k(  rt        t        j                  d«      ‚|dk(  sJ ‚|t!        |«      k(  sJ ‚y #  |j                  «        ‚ xY w# d | _         |j                  d«      \  }}w xY w)Nz/concurrent send_bytes() calls are not supportedT©Ú
overlappedFrP   r   )rž   r,   Ú_winapiÚ	WriteFilerB   ÚERROR_IO_PENDINGÚWaitForMultipleObjectsÚeventr   r   rŸ   ÚGetOverlappedResultÚERROR_OPERATION_ABORTEDrQ   ÚerrnoÚEPIPEr|   )rE   rj   r¡   ÚerrÚwaitresÚnwrittens         r   ri   zPipeConnection._send_bytes  s
  € Ø�}‰}Ð(ä ð "5ó 6ð 6ä×'Ñ'¨¯©°cÀdÔK‰GˆB�ØˆDŒMð
=Øœ'×2Ñ2Ò2Ü%×<Ñ<ØŸ™˜
 E¬8ó5�Gà"¤mÒ3Ð3Ð3ð
 !%�”Ø "× 6Ñ 6°tÓ <‘�˜#Ø”g×5Ñ5Ò5ô œeŸk™kÐ+=Ó>Ð>Ø˜!’8ˆO�8Øœs 3›xÒ'Ð'Ñ'øðØ—	‘	”Øûà $�”Ø "× 6Ñ 6°tÓ <‘�™#ús   ÁAC) Ã)C<Ã<C? Ã?Dc                 óÚ  — | j                   rd| _         t        j                  «       S |€dnt        |d«      }	 t	        j
                  | j                  |d¬«      \  }}	 |t        j                  k(  r1t	        j                  |j                  gdt        «      }|t        k(  sJ ‚|j                  d«      \  }}|dk(  r5t        j                  «       }|j                  |j                  «       «       |S |t        j                   k(  r| j#                  ||«      S 	 t-        d«      ‚#  |j                  «        ‚ xY w# |j                  d«      \  }}|dk(  r9t        j                  «       }|j                  |j                  «       «       |c cY S |t        j                   k(  r| j#                  ||«      c cY S w xY w# t$        $ r)}|j&                  t        j(                  k(  rt*        ‚‚ d }~ww xY w)NFé€   Tr£   r   z.shouldn't get here; expected KeyboardInterrupt)Ú_got_empty_messageÚioÚBytesIOÚminr¥   ÚReadFilerB   r§   r¨   r©   r   r   rŸ   rª   Úwriter…   ÚERROR_MORE_DATAÚ_get_more_datarQ   ÚwinerrorÚERROR_BROKEN_PIPEÚEOFErrorÚRuntimeError)	rE   ÚmaxsizeÚbsizer¡   r®   r¯   ÚnreadÚfÚes	            r   rw   zPipeConnection._recv_bytes6  s¨  € Ø×&Ò&Ø*/�Ô'Ü—z‘z“|Ð#à&˜™´C¸ÀÓ4E�ðÜ%×.Ñ.¨t¯|©|¸UØ;?ôA‘G�B˜ðDØ¤'×":Ñ":Ò:Ü&-×&DÑ&DØ!#§¡ 
¨E´8ó'=˜Gà#*¬mÒ#;Ð;Ð#;ð
 &(×%;Ñ%;¸DÓ%A™
˜˜sØ !š8Ü "§
¡
£˜AØŸG™G B§L¡L£NÔ3Ø#$˜HØ ¤G×$;Ñ$;Ò;Ø#'×#6Ñ#6°r¸7Ó#CÐCð <ô ÐOÓPÐPøð!ØŸ	™	œØûà%'×%;Ñ%;¸DÓ%A™
˜˜sØ !š8Ü "§
¡
£˜AØŸG™G B§L¡L£NÔ3Ø#$œHØ ¤G×$;Ñ$;Ò;Ø#'×#6Ñ#6°r¸7Ó#CÔCð <ûäò Ø—z‘z¤W×%>Ñ%>Ò>Ü&˜àûð	ús\   ¹%F8 ÁAD" Â#AF8 Ã1$F8 Ä"D5Ä5D8 Ä8AF5Æ	F8 Æ'F5Æ2F8 Æ4F5Æ5F8 Æ8	G*Ç$G%Ç%G*c                 ó’   — | j                   s%t        j                  | j                  «      d   dk7  ryt	        t        | g|«      «      S )Nr   T)r³   r¥   ÚPeekNamedPiperB   Úboolr   r‰   s     r   rˆ   zPipeConnection._pollV  s>   € Ø×'Ò'Ü×-Ñ-¨d¯l©lÓ;¸AÑ>À!ÒCØÜœ˜d˜V WÓ-Ó.Ð.r   c                 óÔ  — |j                  «       }t        j                  «       }|j                  |«       t	        j
                  | j                  «      d   }|dkD  sJ ‚|�!t        |«      |z   |kD  r| j                  «        t	        j                  | j                  |d¬«      \  }}|j                  d«      \  }}|dk(  sJ ‚||k(  sJ ‚|j                  |j                  «       «       |S )Nr   r   Tr£   )r…   r´   rµ   r¸   r¥   rÅ   rB   r|   rY   r·   rª   )rE   r¡   r¿   rj   rÂ   Úleftr®   Úrbytess           r   rº   zPipeConnection._get_more_data\  sÆ   € Ø—,‘,“.ˆCÜ—
‘
“ˆAØ�G‰G�CŒLÜ×(Ñ(¨¯©Ó6°qÑ9ˆDØ˜!’8ˆO�8ØÐ"¤s¨3£x°$¡¸Ò'@Ø×(Ñ(Ô*Ü×&Ñ& t§|¡|°TÀdÔK‰GˆB�Ø×0Ñ0°Ó6‰KˆF�CØ˜!’8ˆO�8Ø˜T’>Ð!�>Ø�G‰G�B—L‘L“NÔ#ØˆHr   r   )r—   r˜   r™   Ú__doc__r³   rž   r¥   ÚCloseHandlerL   ri   rw   rˆ   rº   rŒ   r   r   rœ   rœ     s8   „ ñ	ð
 #ÐØˆà&-×&9Ñ&9ó 	'ò	(ó4	Qò@	/ó	r   rœ   c                   óÚ   — e Zd ZdZer(ej                  fd„Zej                  Z	ej                  Zn'ej                  fd„Zej                  Z	ej                  Ze	fd„Zefd„Zd„ Zd
d„Zd	„ Zy)Ú
Connectionzo
    Connection class based on an arbitrary file descriptor (Unix only), or
    a socket handle (Windows).
    c                 ó(   —  || j                   «       y r   r[   ©rE   rL   s     r   rL   zConnection._closes  ó   € Ù�4—<‘<Õ r   c                 ó(   —  || j                   «       y r   r[   rÏ   s     r   rL   zConnection._closex  rÐ   r   c                 ób   — t        |«      }	  || j                  |«      }||z  }|dk(  ry ||d  }Œ$©Nr   )r|   rB   )rE   rj   r¸   Ú	remainingrn   s        r   Ú_sendzConnection._send}  sA   € Ü˜“Hˆ	ØÙ�d—l‘l CÓ(ˆAØ˜‰NˆIØ˜AŠ~ØØ�a�b�'ˆCð r   c                 óê   — t        j                  «       }| j                  }|}|dkD  rK |||«      }t        |«      }|dk(  r||k(  rt        ‚t        d«      ‚|j                  |«       ||z  }|dkD  rŒK|S )Nr   zgot end of file during message)r´   rµ   rB   r|   r½   rQ   r¸   )rE   rl   Úreadrj   rF   rÔ   Úchunkrn   s           r   Ú_recvzConnection._recv†  s|   € Ü�j‰j‹lˆØ—‘ˆØˆ	Ø˜!ŠmÙ˜ Ó+ˆEÜ�E“
ˆAØ�AŠvØ Ò$Ü"�Nä!Ð"BÓCÐCØ�I‰I�eÔØ˜‰NˆIð ˜!‹mð ˆ
r   c                 óˆ  — t        |«      }|dkD  r`t        j                  dd«      }t        j                  d|«      }| j                  |«       | j                  |«       | j                  |«       y t        j                  d|«      }|dkD  r#| j                  |«       | j                  |«       y | j                  ||z   «       y )Niÿÿÿú!iéÿÿÿÿú!Qi @  )r|   ÚstructÚpackrÕ   )rE   rj   rn   Ú
pre_headerÚheaders        r   ri   zConnection._send_bytes–  s™   € Ü�‹HˆØˆzŠ>ÜŸ™ T¨2Ó.ˆJÜ—[‘[  qÓ)ˆFØ�J‰J�zÔ"Ø�J‰J�vÔØ�J‰J�s�Oô —[‘[  qÓ)ˆFØ�5Šyð —
‘
˜6Ô"Ø—
‘
˜3•ð —
‘
˜6 C™<Õ(r   Nc                 ó  — | j                  d«      }t        j                  d|j                  «       «      \  }|dk(  r7| j                  d«      }t        j                  d|j                  «       «      \  }|�||kD  ry | j                  |«      S )Né   rÛ   rÜ   é   rÝ   )rÙ   rÞ   Úunpackrx   )rE   r¿   rj   rl   s       r   rw   zConnection._recv_bytes­  sq   € Ø�j‰j˜‹mˆÜ—‘˜d C§L¡L£NÓ3‰ˆØ�2Š:Ø—*‘*˜Q“-ˆCÜ—M‘M $¨¯©«Ó7‰EˆDØÐ 4¨'¢>ØØ�z‰z˜$ÓÐr   c                 ó2   — t        | g|«      }t        |«      S r   )r   rÆ   )rE   r   Úrs      r   rˆ   zConnection._poll·  s   € Ü�$�˜Ó!ˆÜ�A‹wˆr   r   )r—   r˜   r™   rÊ   r¥   Ú_multiprocessingÚclosesocketrL   ru   Ú_writer†   Ú_readr(   rX   r¸   r×   rÕ   rÙ   ri   rw   rˆ   rŒ   r   r   rÍ   rÍ   l  so   „ ññ
 Ø 0× <Ñ <ó 	!à!×&Ñ&ˆØ ×%Ñ%‰à "§¡ó 	!à—‘ˆØ—‘ˆà%ó ð  %ó ò )ó. ór   rÍ   c                   óP   — e Zd ZdZd
d„Zd„ Zd„ Zed„ «       Zed„ «       Z	d„ Z
d	„ Zy)r   z•
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    Nc                 ó  — |xs |xr t        |«      xs t        }|xs t        |«      }t        |«       |dk(  rt	        ||«      | _        nt        |||«      | _        |�t        |t        «      st        d«      ‚|| _
        y )Nr   úauthkey should be a byte string)r=   Údefault_familyr/   r5   ÚPipeListenerÚ	_listenerÚSocketListenerÚ
isinstanceÚbytesÚ	TypeErrorÚ_authkey)rE   r<   r.   ÚbacklogÚauthkeys        r   rI   zListener.__init__Ç  sƒ   € Øò #˜GÒ=¬°WÓ(=ò #Ü"ð 	àÒ6Ô.¨vÓ6ˆä˜Ô Ø�YÒÜ)¨'°7Ó;ˆD�Nä+¨G°V¸WÓEˆDŒNàÐ¤z°'¼5Ô'AÜÐ=Ó>Ð>àˆ�r   c                 óØ   — | j                   €t        d«      ‚| j                   j                  «       }| j                  �,t	        || j                  «       t        || j                  «       |S )zz
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        zlistener is closed)rñ   rQ   Úacceptrö   Údeliver_challengeÚanswer_challenge)rE   Úcs     r   rú   zListener.accept×  sW   € ð �>‰>Ð!ÜÐ.Ó/Ð/à�N‰N×!Ñ!Ó#ˆØ�=‰=Ð$Ü˜a §¡Ô/Ü˜Q §¡Ô.Øˆr   c                 óP   — | j                   }|�d| _         |j                  «        yy)zA
        Close the bound socket or named pipe of `self`.
        N)rñ   rX   )rE   Úlisteners     r   rX   zListener.closeæ  s)   € ð —>‘>ˆØÐØ!ˆDŒNØ�N‰NÕð  r   c                 ó.   — | j                   j                  S r   )rñ   Ú_addressrM   s    r   r<   zListener.addressï  s   € à�~‰~×&Ñ&Ð&r   c                 ó.   — | j                   j                  S r   )rñ   Ú_last_acceptedrM   s    r   Úlast_acceptedzListener.last_acceptedó  s   € à�~‰~×,Ñ,Ð,r   c                 ó   — | S r   rŒ   rM   s    r   r�   zListener.__enter__÷  rŽ   r   c                 ó$   — | j                  «        y r   r�   r‘   s       r   r•   zListener.__exit__ú  r–   r   )NNr   N)r—   r˜   r™   rÊ   rI   rú   rX   rš   r<   r  r�   r•   rŒ   r   r   r   r   À  sH   „ ñó ò òð ñ'ó ð'ð ñ-ó ð-òór   r   c                 óà   — |xs t        | «      }t        |«       |dk(  rt        | «      }nt        | «      }|�t	        |t
        «      st        d«      ‚|�t        ||«       t        ||«       |S )z=
    Returns a connection to the address of a `Listener`
    r   rî   )	r=   r5   Ú
PipeClientÚSocketClientró   rô   rõ   rü   rû   )r<   r.   rø   rý   s       r   r   r   þ  sq   € ð Ò,”| GÓ,€FÜ�VÔØ�ÒÜ�wÓ‰ä˜Ó!ˆàÐ¤:¨g´uÔ#=ÜÐ9Ó:Ð:àÐÜ˜˜GÔ$Ü˜!˜WÔ%à€Hr   c                 óN  — | rot        j                  «       \  }}|j                  d«       |j                  d«       t        |j	                  «       «      }t        |j	                  «       «      }||fS t        j                  «       \  }}t        |d¬«      }t        |d¬«      }||fS )úL
        Returns pair of connection objects at either end of a pipe
        TF©rH   ©rG   )r4   Ú
socketpairÚsetblockingrÍ   Údetachr(   Úpipe)ÚduplexÚs1Ús2Úc1Úc2Úfd1Úfd2s          r   r   r     sŽ   € ñ Ü×&Ñ&Ó(‰FˆB�Ø�N‰N˜4Ô Ø�N‰N˜4Ô Ü˜BŸI™I›KÓ(ˆBÜ˜BŸI™I›KÓ(ˆBð �2ˆvˆô	 —w‘w“y‰HˆC�Ü˜C¨%Ô0ˆBÜ˜C¨%Ô0ˆBà�2ˆvˆr   c           
      óŽ  — t        d«      }| r>t        j                  }t        j                  t        j                  z  }t
        t
        }}n(t        j                  }t        j                  }dt
        }}t        j                  ||t        j                  z  t        j                  z  t        j                  t        j                  z  t        j                  z  d||t        j                  t        j                  «      }t        j                  ||dt        j                  t        j                   t        j                  t        j                  «      }t        j"                  |t        j                  dd«       t        j$                  |d¬«      }|j'                  d«      \  }	}
|
dk(  sJ ‚t)        || ¬«      }t)        || ¬«      }||fS )	r  r   r   r   NTr£   r  r  )r/   r¥   ÚPIPE_ACCESS_DUPLEXÚGENERIC_READÚGENERIC_WRITEÚBUFSIZEÚPIPE_ACCESS_INBOUNDÚCreateNamedPipeÚFILE_FLAG_OVERLAPPEDÚFILE_FLAG_FIRST_PIPE_INSTANCEÚPIPE_TYPE_MESSAGEÚPIPE_READMODE_MESSAGEÚ	PIPE_WAITÚNMPWAIT_WAIT_FOREVERÚNULLÚ
CreateFileÚOPEN_EXISTINGÚSetNamedPipeHandleStateÚConnectNamedPiperª   rœ   )r  r<   ÚopenmodeÚaccessÚobsizeÚibsizeÚh1Úh2r¤   Ú_r®   r  r  s                r   r   r   (  si  € ô $ IÓ.ˆÙÜ×1Ñ1ˆHÜ×)Ñ)¬G×,AÑ,AÑAˆFÜ$¤g�F‰Fä×2Ñ2ˆHÜ×*Ñ*ˆFØ¤�FˆFä×$Ñ$Ø�X¤× <Ñ <Ñ<Ü×1Ñ1ñ2ä×%Ñ%¬×(EÑ(EÑEÜ×Ññàˆv�vœw×;Ñ;ä�L‰Lóˆô ×ÑØ�V˜Q¤§¡¬g×.CÑ.CÜ×(Ñ(¬'¯,©,óˆô 	×'Ñ'Ø”×-Ñ-¨t°Tô	ô ×-Ñ-¨b¸TÔBˆ
Ø×/Ñ/°Ó5‰ˆˆ3Ø�aŠxˆˆxä˜B¨Ô0ˆÜ˜B¨Ô0ˆà�2ˆvˆr   c                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)rò   zO
    Representation of a socket which is bound to an address and listening
    c                 óØ  — t        j                   t        t         |«      «      | _        	 t        j                  dk(  r9| j                  j                  t         j                  t         j                  d«       | j                  j                  d«       | j                  j                  |«       | j                  j                  |«       | j                  j                  «       | _        || _        d | _        |dk(  rCt#        j$                  |«      s.t#        j&                  | t        j(                  |fd¬«      | _        y d | _        y # t        $ r | j                  j                  «        ‚ w xY w)NÚposixr   Tr   r   ©ÚargsÚexitpriority)r4   ÚgetattrÚ_socketr(   ÚnameÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRr  ÚbindÚlistenÚgetsocknamer  rQ   rX   Ú_familyr  r   r;   ÚFinalizeÚunlinkÚ_unlink)rE   r<   r.   r÷   s       r   rI   zSocketListener.__init__X  s  € Ü—}‘}¤W¬V°VÓ%<Ó=ˆŒð	ä�w‰w˜'Ò!Ø—‘×'Ñ'¬×(9Ñ(9Ü(.×(;Ñ(;¸Qô@à�L‰L×$Ñ$ TÔ*Ø�L‰L×Ñ˜gÔ&Ø�L‰L×Ñ Ô(Ø ŸL™L×4Ñ4Ó6ˆDŒMð ˆŒØ"ˆÔà�YÒ¤t×'HÑ'HÈÔ'QäŸ=™=Ø”b—i‘i w j¸qôˆD�Lð  ˆD�Løô ò 	Ø�L‰L×ÑÔ Øð	ús   ªB<E Å%E)c                 óš   — | j                   j                  «       \  }| _        |j                  d«       t	        |j                  «       «      S )NT)r9  rú   r  r  rÍ   r  ©rE   Úss     r   rú   zSocketListener.acceptq  s9   € Ø!%§¡×!4Ñ!4Ó!6Ñˆˆ4ÔØ	�‰�dÔÜ˜!Ÿ(™(›*Ó%Ð%r   c                 ó¸   — 	 | j                   j                  «        | j                  }|�d | _         |«        y y # | j                  }|�d | _         |«        w w xY wr   )r9  rX   rD  )rE   rC  s     r   rX   zSocketListener.closev  s[   € ð	Ø�L‰L×ÑÔ à—\‘\ˆFØÐ!Ø#�”Ù•ð "øð —\‘\ˆFØÐ!Ø#�”Ù•ð "ús	   ‚: ºAN)r   )r—   r˜   r™   rÊ   rI   rú   rX   rŒ   r   r   rò   rò   T  s   „ ñó ò2&ó
r   rò   c                 ó   — t        | «      }t        j                  t        t        |«      «      5 }|j                  d«       |j	                  | «       t        |j                  «       «      cddd«       S # 1 sw Y   yxY w)zO
    Return a connection object connected to the socket given by `address`
    TN)r=   r4   r8  r  ÚconnectrÍ   r  )r<   r.   rG  s      r   r	  r	  €  s^   € ô ˜'Ó"€FÜ	�‰œ¤¨Ó/Ó	1ð &°QØ	�‰�dÔØ	�	‰	�'ÔÜ˜!Ÿ(™(›*Ó%÷&÷ &ò &ús   ¯;A4Á4A=c                   ó6   — e Zd ZdZdd„Zdd„Zd„ Zed„ «       Zy)	rð   z0
        Representation of a named pipe
        Nc                 ó  — || _         | j                  d¬«      g| _        d | _        t	        j
                  d| j                   «       t	        j                  | t        j                  | j                  | j                   fd¬«      | _	        y )NT)Úfirstz listener created with address=%rr   r5  )
r  Ú_new_handleÚ_handle_queuer  r   Ú	sub_debugrB  rð   Ú_finalize_pipe_listenerrX   )rE   r<   r÷   s      r   rI   zPipeListener.__init__”  sl   € Ø#ˆDŒMØ"&×"2Ñ"2¸Ð"2Ó">Ð!?ˆDÔà"&ˆDÔÜ�N‰NÐ=¸t¿}¹}ÔMÜŸ™Ø”l×:Ñ:Ø×(Ñ(¨$¯-©-Ð8ÀqôˆD�Jr   c           
      ó~  — t         j                  t         j                  z  }|r|t         j                  z  }t        j                  | j
                  |t         j                  t         j                  z  t         j                  z  t         j                  t        t        t         j                  t         j                  «      S r   )r¥   r  r   r!  r  r  r"  r#  r$  ÚPIPE_UNLIMITED_INSTANCESr  r%  r&  )rE   rM  Úflagss      r   rN  zPipeListener._new_handleŸ  s…   € Ü×.Ñ.´×1MÑ1MÑMˆEÙØœ×>Ñ>Ñ>�Ü×*Ñ*Ø—‘˜uÜ×)Ñ)¬G×,IÑ,IÑIÜ×!Ñ!ñ"ä×0Ñ0´'¼7Ü×,Ñ,¬g¯l©lóð r   c                 óh  — | j                   j                  | j                  «       «       | j                   j                  d«      }	 t	        j
                  |d¬«      }	 t	        j                  |j                  gdt        «      }	 |j                  d«      \  }}|dk(  sJ ‚t        |«      S #  |j                  «        t	        j                  |«       ‚ xY w# |j                  d«      \  }}|dk(  sJ ‚w xY w# t        $ r2}|j                  t        j                  k7  r‚ Y d }~t        |«      S d }~ww xY w)Nr   Tr£   F)rO  ÚappendrN  Úpopr¥   r*  r¨   r©   r   rŸ   rË   rª   rQ   r»   ÚERROR_NO_DATArœ   )rE   rF   r¡   Úresr1  r®   rÃ   s          r   rú   zPipeListener.accept«  s  € Ø×Ñ×%Ñ% d×&6Ñ&6Ó&8Ô9Ø×'Ñ'×+Ñ+¨AÓ.ˆFð$Ü×-Ñ-¨fÀÔF�ð	$Ü!×8Ñ8ØŸ™˜
 E¬8ó5‘Cð  ×3Ñ3°DÓ9‘F�A�sØ !š8�O˜8Ü! &Ó)Ð)øðØ—I‘I”KÜ×'Ñ'¨Ô/Øûà×3Ñ3°DÓ9‘F�A�sØ !š8�O™8ûô ò Ø—:‘:¤×!6Ñ!6Ò6Øó 7ô " &Ó)Ð)ûð!ús0   ÁC6 Á&B+ Â+(CÃC ÃC3Ã6	D1Ã?D,Ä,D1c                 óh   — t        j                  d|«       | D ]  }t        j                  |«       Œ y )Nz closing listener with address=%r)r   rP  r¥   rË   )Úqueuer<   rF   s      r   rQ  z$PipeListener._finalize_pipe_listenerÂ  s.   € ä�N‰NÐ=¸wÔGØò ,�Ü×#Ñ# FÕ+ñ,r   r   )F)	r—   r˜   r™   rÊ   rI   rN  rú   ÚstaticmethodrQ  rŒ   r   r   rð   rð   �  s*   „ ñ	ó		ó
	ò	*ð. 
ñ	,ó 
ñ	,r   rð   c           	      ó.  — t        «       }	 	 t        j                  | d«       t        j                  | t        j                  t        j
                  z  dt        j                  t        j                  t        j                  t        j                  «      }	 t        j                  |t        j                  dd«       t!        |«      S # t        $ rB}|j                  t        j                  t        j                  fvst        |«      r‚ Y d}~nd}~ww xY w�Œ)zU
        Return a connection object connected to the pipe given by `address`
        éè  r   N)r   r¥   ÚWaitNamedPiper'  r  r  r&  r(  r   rQ   r»   ÚERROR_SEM_TIMEOUTÚERROR_PIPE_BUSYr   r)  r#  rœ   )r<   r   ÚhrÃ   s       r   r  r  È  sæ   € ô ‹OˆØðÜ×%Ñ% g¨tÔ4Ü×&Ñ&ØœW×1Ñ1´G×4IÑ4IÑIØ”w—|‘|¤W×%:Ñ%:Ü×0Ñ0´'·,±,ó�ð ô 	×'Ñ'ØŒw×,Ñ,¨d°Dô	ô ˜aÓ Ð øô ò Ø—:‘:¤g×&?Ñ&?Ü&-×&=Ñ&=ð&?ñ ?ÜBPÐQRÔBSØô CTûðúñ s   �BC Ã	DÃ8DÄDé(   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#>   ó   md5ó   sha256ó   sha384ó   sha3_256ó   sha3_384c              #   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )r|   )Ú.0r1  s     r   ú	<genexpr>rk  F  s   è ø€ Ò7 ”c˜!—fÑ7ùs   ‚é   é   ÚmessageÚreturnc                 óø   — t        | «      t        v rd| fS | j                  d«      rG| j                  ddt        dz   «      x}dkD  r(| d| }|t
        v r| |dz   d }|j                  d«      |fS t        d	| ›�«      ‚)
a  Returns a digest name and the payload for a response hash.

    If a legacy protocol is detected based on the message length
    or contents the digest name returned will be empty to indicate
    legacy mode where MD5 and no digest prefix should be sent.
    r$   ó   {ó   }r   é   r   NÚasciizRunsupported message length, missing digest prefix, or unsupported digest: message=)r|   Ú_LEGACY_LENGTHSr:   ÚfindÚ_MAX_DIGEST_LENÚ_ALLOWED_DIGESTSÚdecoder	   )rn  ÚcurlyÚdigestÚpayloads       r   Ú_get_digest_name_and_payloadr}  Q  sž   € ô ˆ7ƒ|”Ñ&ð
 �7ˆ{ÐØ×Ñ˜4Ô Ø—,‘,˜t Q¬¸Ñ(9Ó:Ð	:ˆ¸aÒ?Ø˜˜5Ð!ˆØÔ%Ñ%Ø˜e A™g˜hÐ'ˆGØ—=‘= Ó)¨7Ð2Ð2Ü
ð/Ø&- Zð1ó2ð 2r   c                 óþ   — ddl }t        |«      d   }|s"	 |j                  | |d«      j                  «       S |j                  | ||«      j                  «       }d|j                  d«      |fz  S # t        $ r d}Y ŒDw xY w)a‡  Create a MAC based on authkey and message

    The MAC algorithm defaults to HMAC-MD5, unless MD5 is not available or
    the message has a '{digest_name}' prefix. For legacy HMAC-MD5, the response
    is the raw MAC, otherwise the response is prefixed with '{digest_name}',
    e.g. b'{sha256}abcdefg...'

    Note: The MAC protects the entire message including the digest_name prefix.
    r   NÚmd5Úsha256ó   {%s}%srt  )Úhmacr}  Únewr{  r,   Úencode)rø   rn  r‚  Údigest_nameÚresponses        r   Ú_create_responser‡  k  sŠ   € ó Ü.¨wÓ7¸Ñ:€Káð	#Ø—8‘8˜G W¨eÓ4×;Ñ;Ó=Ð=ð �x‰x˜ ¨+Ó6×=Ñ=Ó?€HØ˜×*Ñ*¨7Ó3°XÐ>Ñ>Ð>øô ò 	#ð #ŠKð		#ús   – A. Á.A<Á;A<c           
      ód  — ddl }t        |«      \  }}|xs d}	 |j                  | ||«      j                  «       }t        |«      t        |«      k7  r&t        d|›dt        |«      › dt        |«      › �«      ‚|j                  ||«      st        d	«      ‚y# t        $ r t        d|›d�«      ‚w xY w)
a`  Verify MAC challenge

    If our message did not include a digest_name prefix, the client is allowed
    to select a stronger digest_name from _ALLOWED_DIGESTS.

    In case our message is prefixed, a client cannot downgrade to a weaker
    algorithm, because the MAC is calculated over the entire message
    including the '{digest_name}' prefix.
    r   Nr  zresponse_digest=z unsupportedz	expected z of length z got zdigest received was wrong)r‚  r}  rƒ  r{  r,   r	   r|   Úcompare_digest)rø   rn  r†  r‚  Úresponse_digestÚresponse_macÚexpecteds          r   Ú_verify_challenger�  ‡  sÕ   € ó Ü$@ÀÓ$JÑ!€O�\Ø%Ò.¨€OðEØ—8‘8˜G W¨oÓ>×EÑEÓGˆô ˆ8ƒ}œ˜LÓ)Ò)Ü!Ø˜OÐ.¨k¼#¸h»-¸ð IÜ˜<Ó(Ð)ð+ó,ð 	,ð ×Ñ˜x¨Ô6Ü!Ð"=Ó>Ð>ð 7øô ò EÜ!Ð%5 _Ð$6°lÐ"CÓDÐDðEús   š!B ÂB/rø   c                 óÎ  — t        |t        «      s#t        dj                  t	        |«      «      «      ‚t
        t        kD  sJ d«       ‚t        j                  t
        «      }d|j                  d«      |fz  }| j                  t        |z   «       | j                  d«      }	 t        |||«       | j                  t        «       y # t        $ r | j                  t         «       ‚ w xY w)Nú Authkey must be bytes, not {0!s}zprotocol constraintr�  rt  é   )ró   rô   r,   Úformatr7   ÚMESSAGE_LENGTHÚ_MD5ONLY_MESSAGE_LENGTHr(   Úurandomr„  ro   Ú
_CHALLENGErz   r�  Ú_WELCOMEr	   Ú_FAILURE)Ú
connectionrø   r…  rn  r†  s        r   rû   rû      sÒ   € Ü�gœuÔ%ÜØ.×5Ñ5´d¸7³mÓDóFð 	FäÔ3Ò3ÐJÐ5JÓJÐ3Ü�j‰jœÓ(€GØ˜;×-Ñ-¨gÓ6¸Ð@Ñ@€Gð ×Ñœ* wÑ.Ô/Ø×$Ñ$ SÓ)€Hð(Ü˜' 7¨HÔ5ð
 	×ÑœhÕ'øô	 ò Ø×ÑœhÔ'Øðús   Â!C Ã C$c                 ó´  — t        |t        «      s#t        dj                  t	        |«      «      «      ‚| j                  d«      }|j                  t        «      st        d|›�«      ‚|t        t        «      d  }t        |«      t        k  rt        d«      ‚t        ||«      }| j                  |«       | j                  d«      }|t        k7  rt        d«      ‚y )Nr�  r�  z,Protocol error, expected challenge: message=z)challenge too short: {len(message)} byteszdigest sent was rejected)ró   rô   r,   r‘  r7   rz   r:   r•  r	   r|   r“  r‡  ro   r–  )r˜  rø   rn  r{  r†  s        r   rü   rü   µ  sÑ   € Ü�gœuÔ%ÜØ.×5Ñ5´d¸7³mÓDóFð 	Fà×#Ñ# CÓ(€GØ×ÑœjÔ)Ü!Ø?°w°jÐAóCð 	Cà”cœ*“oÐ&Ð'€GÜ
ˆ7ƒ|Ô-Ò-Ü!Ð"MÓNÐNÜ˜g wÓ/€FØ×Ñ˜&Ô!Ø×$Ñ$ SÓ)€HØ”8ÒÜ!Ð"<Ó=Ð=ð r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚConnectionWrapperc                 ón   — || _         || _        || _        dD ]  }t        ||«      }t	        | ||«       Œ y )N)ra   rX   rŠ   rz   ro   )Ú_connÚ_dumpsÚ_loadsr8  Úsetattr)rE   Úconnrr   r„   Úattrrt   s         r   rI   zConnectionWrapper.__init__Ë  s>   € ØˆŒ
ØˆŒØˆŒØKò 	%ˆDÜ˜$ Ó%ˆCÜ�D˜$ Õ$ñ	%r   c                 ó\   — | j                  |«      }| j                  j                  |«       y r   )rž  r�  ro   )rE   rt   rG  s      r   ru   zConnectionWrapper.sendÒ  s"   € Ø�K‰K˜ÓˆØ�
‰
×Ñ˜aÕ r   c                 óX   — | j                   j                  «       }| j                  |«      S r   )r�  rz   rŸ  rF  s     r   r†   zConnectionWrapper.recvÕ  s"   € Ø�J‰J×!Ñ!Ó#ˆØ�{‰{˜1‹~Ðr   N)r—   r˜   r™   rI   ru   r†   rŒ   r   r   r›  r›  Ê  s   „ ò%ò!ór   r›  c                 óT   — t         j                  | fd d d d«      j                  d«      S )Nr   úutf-8)Ú	xmlrpclibrr   r„  )rt   s    r   Ú
_xml_dumpsr¨  Ù  s&   € Ü�?‰?˜C˜6 4¨¨t°QÓ7×>Ñ>¸wÓGÐGr   c                 óX   — t         j                  | j                  d«      «      \  \  }}|S )Nr¦  )r§  r„   ry  )rG  rt   Úmethods      r   Ú
_xml_loadsr«  Ü  s$   € Ü—_‘_ Q§X¡X¨gÓ%6Ó7�N�F€SˆFØ€Jr   c                   ó   — e Zd Zd„ Zy)ÚXmlListenerc                 ób   — dd l ma t        j	                  | «      }t        |t        t        «      S rÓ   )Úxmlrpc.clientÚclientr§  r   rú   r›  r¨  r«  rs   s     r   rú   zXmlListener.acceptá  s"   € å)Ü�o‰o˜dÓ#ˆÜ  ¤j´*Ó=Ð=r   N)r—   r˜   r™   rú   rŒ   r   r   r­  r­  à  s   „ ó>r   r­  c                  óJ   — dd l ma t        t	        | i |¤Žt
        t        «      S rÓ   )r¯  r°  r§  r›  r   r¨  r«  )r6  Úkwdss     r   Ú	XmlClientr³  ç  s   € å%ÜœV TÐ2¨TÑ2´JÄ
ÓKÐKr   c                 ó†  — t        | «      }g }|r±t        j                  |d|«      }|t        k(  r	 |S t        |cxk  rt        t        |«      z   k  rn n
|t        z  }nAt        |cxk  rt        t        |«      z   k  rn t        d«      ‚|t        z  }nt        d«      ‚|j                  ||   «       ||dz   d  }d}|rŒ±|S )NFzShould not get herer   r   )	Úlistr¥   r¨   r   r   r|   r   r¾   rV  )Úhandlesr   ÚLÚreadyrY  s        r   Ú_exhaustive_waitr¹  ò  sË   € ô �‹MˆØˆÙÜ×0Ñ0°°E¸7ÓCˆCØ”lÒ"Øð ˆô  #Ô>¬¼¸A»Ñ(>Õ>Ø”}Ñ$‘Ü! SÔDÔ+;¼cÀ!»fÑ+DÔDô #Ð#8Ó9Ð9ð Ô'Ñ'‘ä"Ð#8Ó9Ð9Ø�L‰L˜˜3™Ô Ø�#�a‘%�&�	ˆAØˆGò ð ˆr   c                 óV  ‡— |€t         }n|dk  rd}nt        |dz  dz   «      }t        | «      } i Šg }t        «       }t        «       }	 | D ]¼  }	 t	        |d«      }	 t        j                   |«       dd«      \  }}|t
        j                  k(  r!|j                  |«       |‰|j                  <   Œd|rDt        j                  «       dd dk\  r*	 |j                  d	«      \  }
}|st!        |d
«      rd|_        |j%                  |«       d}Œ¾ t+        ‰j-                  «       |«      }|D ]  }|j/                  «        Œ |D ]e  }	 |j                  d«      \  }
}|t
        j0                  k7  sŒ,‰|j                     }|j%                  |«       |dk(  sŒRt!        |d
«      sŒ_d|_        Œg 	 |j3                  ˆfd„|D «       «       | D �cg c]	  }||v sŒ|‘Œ c}S # t        $ r"}	d|	j                  }}|t        vr‚ Y d}	~	�Œ€d}	~	ww xY w# t        $ r}	|	j                  }Y d}	~	�Œ>d}	~	ww xY w# t&        $ r |‰|j)                  «       <   Y �Œúw xY w# t        $ r }	|	j                  }|t        vr‚ Y d}	~	�Œd}	~	ww xY w# |D ]  }|j/                  «        Œ |D ]‘  }	 |j                  d«      \  }
}n+# t        $ r}	|	j                  }|t        vr‚ Y d}	~	nd}	~	ww xY w|t
        j0                  k7  sŒX‰|j                     }|j%                  |«       |dk(  sŒ~t!        |d
«      sŒ‹d|_        Œ“ w xY wc c}w )ú—
        Wait till an object in object_list is ready/readable.

        Returns list of those objects in object_list which are ready/readable.
        Nr   r^  g      à?ra   Trs  )é   rs  Fr³   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   rŒ   )rj  rb  Úwaithandle_to_objs     €r   rk  zwait.<locals>.<genexpr>S  s   øè ø€ ÒI°aÐ.¨qÕ1ÑIùs   ƒ)r   Úintrµ  Úsetr8  r¥   r·   rQ   r»   Ú_ready_errorsr§   rV  r©   r1   Úgetwindowsversionrª   r3   r³   ÚaddÚAttributeErrorrA   r¹  ÚkeysrŸ   r«   Úupdate)Úobject_listr   Úov_listÚready_objectsÚready_handlesÚora   r¡   r®   rÃ   r1  r¾  s              @r   r   r     sB  ø€ ð ˆ?Ü‰GØ�qŠ[Ø‰Gä˜' D™.¨3Ñ.Ó/ˆGä˜;Ó'ˆØÐØˆÜ›ˆÜ›ˆð6	8Ø ò $�ð$Ü$ Q¨Ó1�Fð
"Ü")×"2Ñ"2±6³8¸QÀÓ"E™˜˜Cð
 œg×6Ñ6Ò6ØŸ™ rÔ*Ø67Ð)¨"¯(©(Ò3ñ
 ¤#×"7Ñ"7Ó"9¸"¸1Ð"=ÀÒ"Gð1Ø)+×)?Ñ)?ÀÓ)F¡  3ñ $'¬7°1Ð6JÔ+KØ7; Ô 4Ø%×)Ñ)¨!Ô,Ø"#™ð=$ô@ -Ð->×-CÑ-CÓ-EÀwÓOˆMð ò �Ø—	‘	•ðð ò 8�ðØ×3Ñ3°DÓ9‘F�A�sð
 œ'×9Ñ9Ó9Ø)¨"¯(©(Ñ3�AØ!×%Ñ% aÔ(Ø˜a“xô # 1Ð&:Õ;Ø37˜AÕ0ñ8ð  	×ÑÓI¸=ÔIÔIØ&Ö=�a¨!¨}Ò*<’Ò=Ð=øô_ #ò "Ø"&¨¯
©
˜C˜Ø¤mÑ3Ø!õ 4ûð"ûô  $+ò 1Ø&'§j¡j¦ûð1ûô- &ò 9Ø78Ð% a§k¡k£mÔ4ð9ûôN ò ØŸ*™*�CØ¤-Ñ/Øõ 0ûðûð ò �Ø—	‘	•ðð ò 8�ðØ×3Ñ3°DÓ9‘F�A‘søÜò ØŸ*™*�CØ¤-Ñ/Øô 0ûðúð œ'×9Ñ9Ó9Ø)¨"¯(©(Ñ3�AØ!×%Ñ% aÔ(Ø˜a“xô # 1Ð&:Õ;Ø37˜AÕ0ñ8üò" >sà   ÁI4 ÁH%ÁGÁ:AI4 ÃHÃAI4 Å IÇ	L&ÇL&Ç	G?ÇG:Ç4I4 Ç:G?Ç?I4 È	H"ÈHÈI4 ÈH"È"I4 È%IÉI4 ÉIÉI4 É	I1ÉI,É,I1É4L#ÊJ'Ê&L#Ê'	K	Ê0K
	ËL#Ë
K	ËL#Ë&%L#ÌL#Ì
L#ÚPollSelectorc                 óˆ  — t        «       5 }| D ]"  }|j                  |t        j                  «       Œ$ |�t	        j
                  «       |z   }	 |j                  |«      }|r(|D ��cg c]  \  }}|j                  ‘Œ c}}cddd«       S |�'t	        j
                  «       z
  }|dk  r|cddd«       S Œec c}}w # 1 sw Y   yxY w)r»  Nr   )Ú_WaitSelectorÚregisterÚ	selectorsÚ
EVENT_READr   r   ÚselectÚfileobj)rÇ  r   Úselectorrt   Údeadliner¸  ÚkeyÚeventss           r   r   r   b  sÅ   € ô ‹_ð 	) Ø"ò =�Ø×!Ñ! #¤y×';Ñ';Õ<ð=ð Ð"ÜŸ>™>Ó+¨gÑ5�àØ Ÿ™¨Ó0�ÙØ=B×C©M¨S°&˜CŸK›KÓC÷	)ñ 	)ð Ð*Ø"*¬T¯^©^Ó-=Ñ"=˜Ø" Qš;Ø#(÷	)ñ 	)ð ùó D÷	)ð 	)ús$   ‹AB8Á%B2Á;B8ÂB8Â1B8Â8Cc                 ó   — | j                  «       }t        j                  |t        j                  t        j                  «      5 }ddlm} |j                  |«      }t        || j                  | j                  ffcd d d «       S # 1 sw Y   y xY w)Nr   )Úresource_sharer)ra   r4   Úfromfdr   ÚSOCK_STREAMr$   rÙ  Ú	DupSocketÚrebuild_connectionrG   rH   )r¡  rF   rG  rÙ  Údss        r   Úreduce_connectionrß  ~  sl   € Ø—‘“ˆÜ�]‰]˜6¤6§>¡>´6×3EÑ3EÓFð 	JÈ!Ý)Ø ×*Ñ*¨1Ó-ˆBÜ%¨¨D¯M©M¸4¿=¹=Ð'IÐI÷	J÷ 	Jò 	Jús   Á6BÂBc                 óX   — | j                  «       }t        |j                  «       ||«      S r   ©r  rÍ   )rÞ  rG   rH   Úsocks       r   rÝ  rÝ  „  s"   € Ø�y‰y‹{ˆÜ˜$Ÿ+™+›-¨°8Ó<Ð<r   c                 ó  — | j                   rt        j                  nd| j                  rt        j                  ndz  }t        j                  | j                  «       |«      }t        || j                   | j                  ffS rÓ   )	rG   r¥   ÚFILE_GENERIC_READrH   ÚFILE_GENERIC_WRITEr   Ú	DupHandlera   Úrebuild_pipe_connection)r¡  r,  Údhs      r   Úreduce_pipe_connectionré  ‰  s^   € Ø04·²”7×,Ò,À1Ø15·²”7×-Ò-ÀAñGˆä× Ñ  §¡£°Ó7ˆÜ&¨¨T¯]©]¸D¿M¹MÐ(JÐJÐJr   c                 ó<   — | j                  «       }t        |||«      S r   )r  rœ   )rè  rG   rH   rF   s       r   rç  rç  Ž  s   € Ø—‘“ˆÜ˜f h°Ó9Ð9r   c                 ó†   — t        j                  | j                  «       «      }t        || j                  | j
                  ffS r   )r   ÚDupFdra   rÝ  rG   rH   )r¡  Údfs     r   rß  rß  ”  s0   € Ü�_‰_˜TŸ[™[›]Ó+ˆÜ! B¨¯©°t·}±}Ð#EÐEÐEr   c                 ó<   — | j                  «       }t        |||«      S r   rá  )rí  rG   rH   Úfds       r   rÝ  rÝ  —  s   € Ø�Y‰Y‹[ˆÜ˜"˜h¨Ó1Ð1r   )NN)T)r€  r   )VÚ__all__r¬   r´   r(   r1   r4   rÞ   r   r%   Ú	itertoolsrè   r$   r   r	   r
   Úcontextr   ÚForkingPicklerrq   r¥   r   r   r   r   ÚImportErrorr2   r  ÚCONNECTION_TIMEOUTÚcountr+   rï   Úfamiliesr3   r   r   r/   r5   r=   r?   rœ   rÍ   Úobjectr   r   r   rò   r	  rð   r  r’  r•  r–  r—  Ú	frozensetrx  Úmaxrw  r“  Ú_MD5_DIGEST_LENru  rô   r9   r}  r‡  r�  rû   rü   r›  r¨  r«  r­  r³  r¹  r¼   ÚERROR_NETNAME_DELETEDrÁ  r   rÐ  rÌ  rÎ  ÚSelectSelectorrß  rÝ  rÏ  ré  rç  rŒ   r   r   ú<module>rþ     sü  ðò 3€ã Û 	Û 	Û 
Û Û Û Û Û ã å ç 1Ý Ø×*Ñ*€ðÛßOÓOð €àÐ à�	—‘Ó!€à€Øˆ;€á
ˆ6�9ÔØ€NØ��Ñ€Hà‡<�<�7ÒØ€NØ��Ñ€Hð -ó &ò ò0ò
FòF÷&Tñ Tñn ô]˜ô ]ô@M�ô Môh;ˆvô ;ó|ð* ‡<�<�7Òôó&&ôX)�Vô )òX&ð ‡<�<�7Òô6,�vô 6,òp!ð> €à€
Ø€Ø€ñr Ú@óBÐ áÑ7Ð&6Ô7Ó7€ð Ð Ø€Ø*¨OÐ<€ð2¨%ð 2°S¸%°Ló 2ò4?ò8?ñ2(¨5ó (ð*>¨%ó >ô*˜ô òHòô>�(ô >òLð ‡<�<�7Òòð( ×.Ñ.°×0MÑ0MÐN€MôL>ó` ñ
 ˆy˜.Ô)Ø!×.Ñ.‰à!×0Ñ0ˆó)ð6 ‡<�<�7ÒòJò=ð €I×Ñ�zÐ#4Ô5òKò
:ð €I×Ñ�~Ð'=Õ>òFò2ð €I×Ñ�zÐ#4Õ5øðs# ò Ø
‡|�|�wÒØØƒGðús   ÁH? È?IÉI