<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]x                 @   sI  d  d d d g 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 d d	 l
 m Z m Z d d
 l m Z y2 d d l Z d d l m Z m Z m Z m Z Wn* e k
 r"e j d k r  d Z Yn Xd Z d Z e j   Z d Z d g Z e e d  rld Z e d g 7Z e j d k rd Z e d g 7Z e d d  Z d d   Z d d   Z  d d   Z! d d   Z" Gd d   d  Z# e rGd d   d e#  Z$ Gd  d!   d! e#  Z% Gd" d   d e&  Z' d d d# d   Z( e j d k r[d$ d% d  Z) n d$ d& d  Z) Gd' d(   d( e&  Z* d) d*   Z+ e j d k rGd+ d,   d, e&  Z, d- d.   Z- d/ Z. d0 Z/ d1 Z0 d2 Z1 d3 d4   Z2 d5 d6   Z3 Gd7 d8   d8 e&  Z4 d9 d:   Z5 d; d<   Z6 Gd= d>   d> e'  Z7 d? d@   Z8 e j d k r|dA dB   Z9 e j: e j; h Z< d dC d  Z= n? d d l> Z> e e> dD  re> j? Z@ n	 e> jA Z@ d dE d  Z= e j d k rdF dG   ZB dH dI   ZC e jD e% eB  dJ dK   ZE dL dM   ZF e jD e$ eE  n( dN dG   ZB dO dI   ZC e jD e% eB  d S)PClientListenerPipewait    N   )	reduction)util)AuthenticationErrorBufferTooShort)ForkingPickler)WAIT_OBJECT_0WAIT_ABANDONED_0WAIT_TIMEOUTINFINITEwin32i    g      4@AF_INETAF_UNIXAF_PIPEc             C   s   t  j    |  S)N)time)timeout r   //opt/alt/python35/lib64/python3.5/connection.py_init_timeout;   s    r   c             C   s   t  j    |  k S)N)r   )tr   r   r   _check_timeout>   s    r   c             C   s   |  d k r d S|  d k r8 t  j d d d t j    S|  d k rp t  j d d	 t j   t t  f d d
  St d   d  S)Nr   	localhostr   r   prefixz	listener-dirr   z\\.\pipe\pyc-%d-%d- zunrecognized family)r   r   )	tempfilemktempr   get_temp_dirosgetpidnext_mmap_counter
ValueError)familyr   r   r   arbitrary_addressE   s     r(   c             C   si   t  j d k r+ |  d k r+ t d |    t  j d k re |  d k re t t |   se t d |    d  S)Nr   r   zFamily %s is not recognized.r   )sysplatformr&   hasattrsocket)r'   r   r   r   _validate_familyS   s
    r-   c             C   se   t  |   t k r d St  |   t k r; |  j d  r; d St  |   t k rQ d St d |    d  S)Nr   z\\r   r   zaddress type of %r unrecognized)typetuplestr
startswithr&   )addressr   r   r   address_type_   s    !r3   c               @   s!  e  Z d  Z d Z d d d d  Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 e
 d d    Z e
 d d    Z e
 d d    Z d d   Z d d   Z d d d d  Z d d   Z d d d  Z d d  d!  Z d" d#   Z d$ d% d&  Z d' d(   Z d) d*   Z d S)+_ConnectionBaseNTc             C   s]   | j    } | d k  r$ t d   | r> | r> t d   | |  _ | |  _ | |  _ d  S)Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)	__index__r&   _handle	_readable	_writable)selfhandlereadablewritabler   r   r   __init__u   s    			z_ConnectionBase.__init__c             C   s   |  j  d  k	 r |  j   d  S)N)r6   _close)r9   r   r   r   __del__   s    z_ConnectionBase.__del__c             C   s   |  j  d  k r t d   d  S)Nzhandle is closed)r6   OSError)r9   r   r   r   _check_closed   s    z_ConnectionBase._check_closedc             C   s   |  j  s t d   d  S)Nzconnection is write-only)r7   r@   )r9   r   r   r   _check_readable   s    	z_ConnectionBase._check_readablec             C   s   |  j  s t d   d  S)Nzconnection is read-only)r8   r@   )r9   r   r   r   _check_writable   s    	z_ConnectionBase._check_writablec             C   s/   |  j  r d |  _ n
 |  j   t d   d  S)NFzbad message length)r8   r7   closer@   )r9   r   r   r   _bad_message_length   s    	
z#_ConnectionBase._bad_message_lengthc             C   s   |  j  d  k S)N)r6   )r9   r   r   r   closed   s    z_ConnectionBase.closedc             C   s   |  j  S)N)r7   )r9   r   r   r   r;      s    z_ConnectionBase.readablec             C   s   |  j  S)N)r8   )r9   r   r   r   r<      s    z_ConnectionBase.writablec             C   s   |  j    |  j S)N)rA   r6   )r9   r   r   r   fileno   s    
z_ConnectionBase.filenoc             C   s.   |  j  d  k	 r* z |  j   Wd  d  |  _  Xd  S)N)r6   r>   )r9   r   r   r   rD      s    z_ConnectionBase.closer   c             C   s   |  j    |  j   t |  } | j d k rA t t |   } t |  } | d k  re t d   | | k  r} t d   | d  k r | | } n7 | d k  r t d   n | | | k r t d   |  j | | | |   d  S)Nr   r   zoffset is negativezbuffer length < offsetzsize is negativezbuffer length < offset + size)rA   rC   
memoryviewitemsizebyteslenr&   _send_bytes)r9   bufoffsetsizemnr   r   r   
send_bytes   s"    

z_ConnectionBase.send_bytesc             C   s.   |  j    |  j   |  j t j |   d  S)N)rA   rC   rL   r   dumps)r9   objr   r   r   send   s    

z_ConnectionBase.sendc             C   sg   |  j    |  j   | d  k	 r8 | d k  r8 t d   |  j |  } | d  k r] |  j   | j   S)Nr   znegative maxlength)rA   rB   r&   _recv_bytesrE   getvalue)r9   	maxlengthrM   r   r   r   
recv_bytes   s    


z_ConnectionBase.recv_bytesc             C   s   |  j    |  j   t |   } | j } | t |  } | d k  rW t d   n | | k ro t d   |  j   } | j   } | | | k  r t | j	     | j
 d  | j | | | | | |   | SWd  QRXd  S)Nr   znegative offsetzoffset too large)rA   rB   rH   rI   rK   r&   rV   tellr
   rW   seekreadinto)r9   rM   rN   rP   rI   bytesizeresultrO   r   r   r   recv_bytes_into   s"    

	z_ConnectionBase.recv_bytes_intoc             C   s3   |  j    |  j   |  j   } t j | j    S)N)rA   rB   rV   r   loads	getbuffer)r9   rM   r   r   r   recv   s    

z_ConnectionBase.recvg        c             C   s!   |  j    |  j   |  j |  S)N)rA   rB   _poll)r9   r   r   r   r   poll   s    

z_ConnectionBase.pollc             C   s   |  S)Nr   )r9   r   r   r   	__enter__  s    z_ConnectionBase.__enter__c             C   s   |  j    d  S)N)rD   )r9   exc_type	exc_valueexc_tbr   r   r   __exit__  s    z_ConnectionBase.__exit__)__name__
__module____qualname__r6   r=   r?   rA   rB   rC   rE   propertyrF   r;   r<   rG   rD   rR   rU   rY   r_   rb   rd   re   ri   r   r   r   r   r4   r   s(   r4   c               @   s[   e  Z d  Z d Z e j d d  Z d d   Z d d d  Z d	 d
   Z	 d d   Z
 d S)PipeConnectionFc             C   s   | |  j   d  S)N)r6   )r9   Z_CloseHandler   r   r   r>     s    zPipeConnection._closec             C   s   t  j |  j | d d \ } } zJ y. | t  j k rQ t  j | j g d t  } Wn | j     Yn XWd  | j d  \ } } Xd  S)N
overlappedTF)	_winapiZ	WriteFiler6   ERROR_IO_PENDINGWaitForMultipleObjectseventr   cancelGetOverlappedResult)r9   rM   overrwaitresZnwrittenr   r   r   rL     s    !
zPipeConnection._send_bytesNc       	      C   si  |  j  r d |  _  t j   S| d  k r. d n t | d  } y t j |  j | d d \ } } zJ y. | t j k r t j | j	 g d t
  } Wn | j     Yn XWd  | j d  \ } } | d k r t j   } | j | j    | S| t j k r|  j | |  SXWnC t k
 rX} z# | j t j k rCt  n   WYd  d  } ~ Xn Xt d   d  S)NF   ro   Tr   z.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminrp   ReadFiler6   rq   rr   rs   r   rt   ru   writera   ZERROR_MORE_DATA_get_more_datar@   winerrorERROR_BROKEN_PIPEEOFErrorRuntimeError)	r9   maxsizeZbsizerv   rw   rx   Znreadfer   r   r   rV   &  s6    		
!
	zPipeConnection._recv_bytesc             C   s?   |  j  s% t j |  j  d d k r) d St t |  g |   S)Nr   T)rz   rp   PeekNamedPiper6   boolr   )r9   r   r   r   r   rc   F  s    	zPipeConnection._pollc             C   s   | j    } t j   } | j |  t j |  j  d } | d  k	 rg t |  | | k rg |  j   t j	 |  j | d d \ } } | j
 d  \ } } | j | j     | S)Nr   ro   T)ra   r{   r|   r   rp   r   r6   rK   rE   r~   ru   )r9   rv   r   rM   r   leftrw   Zrbytesr   r   r   r   L  s    "
!zPipeConnection._get_more_data)rj   rk   rl   rz   rp   CloseHandler>   rL   rV   rc   r   r   r   r   r   rn     s    rn   c               @   s   e  Z d  Z e r9 e j d d  Z e j Z e j	 Z
 n$ e j d d  Z e j Z e j Z
 e d d  Z e
 d d  Z d d	   Z d
 d d  Z d d   Z d
 S)
Connectionc             C   s   | |  j   d  S)N)r6   )r9   r>   r   r   r   r>   c  s    zConnection._closec             C   s   | |  j   d  S)N)r6   )r9   r>   r   r   r   r>   h  s    c             C   sP   t  |  } x= | |  j |  } | | 8} | d k r8 P| | d   } q Wd  S)Nr   )rK   r6   )r9   rM   r   	remainingrQ   r   r   r   _sendm  s    
zConnection._sendc             C   s   t  j   } |  j } | } xo | d k r | | |  } t |  } | d k rr | | k rf t  n t d   | j |  | | 8} q W| S)Nr   zgot end of file during message)r{   r|   r6   rK   r   r@   r   )r9   rO   readrM   r:   r   chunkrQ   r   r   r   _recvv  s    		zConnection._recvc             C   s\   t  |  } t j d |  } | d k rG |  j |  |  j |  n |  j | |  d  S)Nz!ii @  )rK   structpackr   )r9   rM   rQ   headerr   r   r   rL     s    zConnection._send_bytesNc             C   sS   |  j  d  } t j d | j    \ } | d  k	 rF | | k rF d  S|  j  |  S)N   z!i)r   r   unpackrW   )r9   r   rM   rO   r   r   r   rV     s
    zConnection._recv_bytesc             C   s   t  |  g |  } t |  S)N)r   r   )r9   r   rr   r   r   rc     s    zConnection._poll)rj   rk   rl   rp   _multiprocessingZclosesocketr>   rU   _writerb   _readr"   rD   r   r   r   r   rL   rV   rc   r   r   r   r   r   \  s   				r   c               @   s|   e  Z d  Z d d d d d d  Z d d   Z d d   Z e d	 d
    Z e d d
    Z d d   Z	 d d   Z
 d S)r   Nr   c             C   s   | p | r t  |  p t } | p- t |  } t |  | d k r[ t | |  |  _ n t | | |  |  _ | d  k	 r t | t  r t	 d   | |  _
 d  S)Nr   zauthkey should be a byte string)r3   default_familyr(   r-   PipeListener	_listenerSocketListener
isinstancerJ   	TypeError_authkey)r9   r2   r'   backlogauthkeyr   r   r   r=     s    
zListener.__init__c             C   sW   |  j  d  k r t d   |  j  j   } |  j rS t | |  j  t | |  j  | S)Nzlistener is closed)r   r@   acceptr   deliver_challengeanswer_challenge)r9   cr   r   r   r     s    	zListener.acceptc             C   s,   |  j  } | d  k	 r( d  |  _  | j   d  S)N)r   rD   )r9   listenerr   r   r   rD     s    		zListener.closec             C   s
   |  j  j S)N)r   _address)r9   r   r   r   <lambda>  s    zListener.<lambda>c             C   s
   |  j  j S)N)r   _last_accepted)r9   r   r   r   r     s    c             C   s   |  S)Nr   )r9   r   r   r   re     s    zListener.__enter__c             C   s   |  j    d  S)N)rD   )r9   rf   rg   rh   r   r   r   ri     s    zListener.__exit__)rj   rk   rl   r=   r   rD   rm   r2   last_acceptedre   ri   r   r   r   r   r     s   	c             C   s   | p t  |   } t |  | d k r7 t |   } n t |   } | d  k	 rk t | t  rk t d   | d  k	 r t | |  t | |  | S)Nr   zauthkey should be a byte string)	r3   r-   
PipeClientSocketClientr   rJ   r   r   r   )r2   r'   r   r   r   r   r   r     s    
Tc             C   s   |  rY t  j   \ } } | j d  | j d  t | j    } t | j    } n6 t j   \ } } t | d d } t | d d } | | f S)NTr<   Fr;   )r,   
socketpairsetblockingr   detachr"   pipe)duplexs1s2c1c2fd1fd2r   r   r   r     s    c          	   C   sA  t  d  } |  r; t j } t j t j B} t t } } n t j } t j } d t } } t j | | t j Bt j	 Bt j
 t j Bt j Bd | | t j t j  } t j | | d t j t j t j t j  } t j | t j d  d   t j | d d } | j d  \ }	 }
 t | d |  } t | d |  } | | f S)Nr   r   r   ro   Tr<   r;   )r(   rp   PIPE_ACCESS_DUPLEXGENERIC_READGENERIC_WRITEBUFSIZEZ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ConnectNamedPiperu   rn   )r   r2   ZopenmodeaccessZobsizeZibsizeZh1Zh2ro   _rw   r   r   r   r   r   r     s2    			c               @   s7   e  Z d  Z d d d  Z d d   Z d d   Z d S)	r   r   c             C   s  t  j  t t  |   |  _ yq t j d k rI |  j j t  j t  j d  |  j j d  |  j j	 |  |  j j
 |  |  j j   |  _ Wn" t k
 r |  j j     Yn X| |  _ d  |  _ | d k r t j |  t j d | f d d |  _ n	 d  |  _ d  S)Nposixr   Tr   argsexitpriorityr   )r,   getattr_socketr"   name
setsockopt
SOL_SOCKETSO_REUSEADDRr   bindlistengetsocknamer   r@   rD   _familyr   r   Finalizeunlink_unlink)r9   r2   r'   r   r   r   r   r=   8  s$    		$zSocketListener.__init__c             C   s5   |  j  j   \ } |  _ | j d  t | j    S)NT)r   r   r   r   r   r   )r9   sr   r   r   r   P  s    zSocketListener.acceptc             C   s>   z |  j  j   Wd  |  j } | d  k	 r9 d  |  _ |   Xd  S)N)r   rD   r   )r9   r   r   r   r   rD   U  s    		zSocketListener.closeN)rj   rk   rl   r=   r   rD   r   r   r   r   r   4  s   r   c          	   C   s\   t  |   } t j t t |   1 } | j d  | j |   t | j    SWd  QRXd  S)NT)r3   r,   r   r   connectr   r   )r2   r'   r   r   r   r   r   _  s
    r   c               @   sL   e  Z d  Z d d d  Z d d d  Z d d   Z e d	 d
    Z d S)r   Nc             C   sq   | |  _  |  j d d  g |  _ d  |  _ t j d |  j   t j |  t j d |  j |  j  f d d |  _	 d  S)NfirstTz listener created with address=%rr   r   r   )
r   _new_handle_handle_queuer   r   	sub_debugr   r   _finalize_pipe_listenerrD   )r9   r2   r   r   r   r   r=   s  s    		zPipeListener.__init__Fc          	   C   sb   t  j t  j B} | r# | t  j O} t  j |  j | t  j t  j Bt  j Bt  j	 t
 t
 t  j t  j  S)N)rp   r   r   r   r   r   r   r   r   ZPIPE_UNLIMITED_INSTANCESr   r   r   )r9   r   flagsr   r   r   r   ~  s    	zPipeListener._new_handlec             C   s   |  j  j |  j    |  j  j d  } y t j | d d } Wn: t k
 r} } z | j t j k rk   WYd  d  } ~ Xnb XzH y t j	 | j
 g d t  } Wn" | j   t j |    Yn XWd  | j d  \ } } Xt |  S)Nr   ro   TF)r   appendr   poprp   r   r@   r   ZERROR_NO_DATArr   rs   r   rt   r   ru   rn   )r9   r:   rv   r   resr   rw   r   r   r   r     s"    
zPipeListener.acceptc             C   s2   t  j d |  x |  D] } t j |  q Wd  S)Nz closing listener with address=%r)r   r   rp   r   )queuer2   r:   r   r   r   r     s    z$PipeListener._finalize_pipe_listener)rj   rk   rl   r=   r   r   staticmethodr   r   r   r   r   r   o  s   r   c             C   s   t    } x yK t j |  d  t j |  t j t j Bd t j t j t j t j  } WnO t	 k
 r } z/ | j
 t j t j f k s t |  r   WYd  d  } ~ Xq XPq W  t j | t j d  d   t |  S)Ni  r   )r   rp   ZWaitNamedPiper   r   r   r   r   r   r@   r   ZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYr   r   r   rn   )r2   r   hr   r   r   r   r     s"    	r      s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c             C   s   d d  l  } t j t  } |  j t |  | j | | d  j   } |  j d  } | | k rr |  j t	  n |  j t
  t d   d  S)Nr   md5   zdigest received was wrong)hmacr"   urandomMESSAGE_LENGTHrR   	CHALLENGEnewdigestrY   WELCOMEFAILUREr	   )
connectionr   r   messager   responser   r   r   r     s    r   c             C   s   d d  l  } |  j d  } | t t  d   } | j | | d  j   } |  j |  |  j d  } | t k r t d   d  S)Nr   r   r   zdigest sent was rejected)	r   rY   rK   r   r   r   rR   r   r	   )r   r   r   r   r   r   r   r   r   r     s    r   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)ConnectionWrapperc             C   sO   | |  _  | |  _ | |  _ x- d D]% } t | |  } t |  | |  q" Wd  S)NrG   rD   rd   rY   rR   )rG   rD   rd   rY   rR   )_conn_dumps_loadsr   setattr)r9   connrS   r`   attrrT   r   r   r   r=     s    			zConnectionWrapper.__init__c             C   s#   |  j  |  } |  j j |  d  S)N)r   r   rR   )r9   rT   r   r   r   r   rU     s    zConnectionWrapper.sendc             C   s   |  j  j   } |  j |  S)N)r   rY   r   )r9   r   r   r   r   rb     s    zConnectionWrapper.recvN)rj   rk   rl   r=   rU   rb   r   r   r   r   r     s   r   c             C   s%   t  j |  f d  d  d  d  j d  S)Nr   zutf-8)	xmlrpclibrS   encode)rT   r   r   r   
_xml_dumps  s    r  c             C   s%   t  j |  j d   \ \ } } | S)Nzutf-8)r   r`   decode)r   rT   methodr   r   r   
_xml_loads  s    !r  c               @   s   e  Z d  Z d d   Z d S)XmlListenerc             C   s.   d d  l  j a t j |   } t | t t  S)Nr   )xmlrpc.clientclientr   r   r   r   r  r  )r9   rT   r   r   r   r      s    zXmlListener.acceptN)rj   rk   rl   r   r   r   r   r   r    s   r  c              O   s(   d d  l  j a t t |  |   t t  S)Nr   )r  r  r   r   r   r  r  )r   kwdsr   r   r   	XmlClient  s    r	  c             C   s   t  |   } g  } x | r t j | d |  } | t k r@ Pnr t | k oa t t |  k  n rs | t 8} n? t | k o t t |  k  n r | t 8} n t d   | j | |  | | d d   } d } q W| S)NFzShould not get herer   r   )	listrp   rr   r   r   rK   r   r   r   )Zhandlesr   Lreadyr   r   r   r   _exhaustive_wait  s    	&&
r  c       
   .      s
  | d  k r t  } n) | d k  r* d } n t | d d  } t |   }  i   g  } t     t   } zxy|  D]q} y t | d  } Wn" t k
 r |  | j   <Yqr Xy" t j |   d d  \ } } WnD t	 k
 r} z$ d  | j
 } } | t k r  WYd  d  } ~ Xn X| t j k rE| j |  |  | j <qr | rt j   d  d  d k ry | j d  \ }	 } Wn. t	 k
 r} z | j
 } WYd  d  } ~ Xn X| rt | d	  rd | _   j |  d } qr Wt  j   |  } Wd  x | D] } | j   qWx | D] } y | j d  \ }	 } Wn= t	 k
 r} z | j
 } | t k rn  WYd  d  } ~ Xn X| t j k r" | j }   j |  | d k r"t | d	  r"d | _ q"WX  j  f d
 d   | D    f d d   |  D S)Nr   i  g      ?rG   T      Frz   c             3   s   |  ] }   | Vq d  S)Nr   ).0r   )waithandle_to_objr   r   	<genexpr>r  s    zwait.<locals>.<genexpr>c                s"   g  |  ] } |   k r |  q Sr   r   )r  o)ready_objectsr   r   
<listcomp>s  s   	 zwait.<locals>.<listcomp>)r  r  )r   intr
  setr   AttributeErrorr5   rp   r~   r@   r   _ready_errorsrq   r   rs   r)   Zgetwindowsversionru   r+   rz   addr  keysrt   ZERROR_OPERATION_ABORTEDupdate)
object_listr   Zov_listZready_handlesr  rG   rv   rw   r   r   r   )r  r  r   r   '  sh    				""	
	 PollSelectorc             C   s   t     } x! |  D] } | j | t j  q W| d  k	 rL t j   | } xV | j |  } | ru d d   | D S| d  k	 rO | t j   } | d k  rO | SqO WWd  QRXd  S)Nc             S   s   g  |  ] \ } } | j   q Sr   )fileobj)r  keyeventsr   r   r   r    s   	 zwait.<locals>.<listcomp>r   )_WaitSelectorregister	selectors
EVENT_READr   select)r  r   selectorrT   deadliner  r   r   r   r     s    c             C   sm   |  j    } t j | t j t j  ? } d d l m } | j |  } t | |  j	 |  j
 f f SWd  QRXd  S)Nr   )resource_sharer)rG   r,   fromfdr   SOCK_STREAMr   r)  Z	DupSocketrebuild_connectionr;   r<   )r   r:   r   r)  dsr   r   r   reduce_connection  s
    r.  c             C   s"   |  j    } t | j    | |  S)N)r   r   )r-  r;   r<   sockr   r   r   r,    s    r,  c             C   s_   |  j  r t j n d |  j r' t j n d B} t j |  j   |  } t | |  j  |  j f f S)Nr   )	r;   rp   ZFILE_GENERIC_READr<   ZFILE_GENERIC_WRITEr   Z	DupHandlerG   rebuild_pipe_connection)r   r   dhr   r   r   reduce_pipe_connection  s    r2  c             C   s   |  j    } t | | |  S)N)r   rn   )r1  r;   r<   r:   r   r   r   r0    s    r0  c             C   s.   t  j |  j    } t | |  j |  j f f S)N)r   DupFdrG   r,  r;   r<   )r   dfr   r   r   r.    s    c             C   s   |  j    } t | | |  S)N)r   r   )r4  r;   r<   fdr   r   r   r,    s    )G__all__r{   r"   r)   r,   r   r   r   	itertoolsr   r   r   r   r	   r
   r   rp   r   r   r   r   ImportErrorr*   r   CONNECTION_TIMEOUTcountr%   r   familiesr+   r   r   r(   r-   r3   r4   rn   r   objectr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r   ZERROR_NETNAME_DELETEDr  r   r$  r  r"  SelectSelectorr.  r,  r#  r2  r0  r   r   r   r   <module>
   s   &	PJ8,+8	P	