ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3

  \l                 @   s  d dl Z d dlZd dlZd dlZd dlZd dlZddlmZ ddlmZ ddlm	Z	 ddlm
Z
 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 ddlmZ ddddgZd ZdZdZdZdZdZG dd de	jZG dd de	jZG dd deZG dd deZG dd deZ G d d! d!ej!Z"G d"d de
j#Z$G d#d dZ%G d$d% d%ej&Z'e"Z(G d&d' d'ej)Z*e*Z+dS )(    N   )events)base_subprocess)futures)proactor_events)selector_events)tasks)windows_utils)_overlapped)	coroutine)loggerSelectorEventLoopProactorEventLoopIocpProactorDefaultEventLoopPolicyl    i  i  gMbP?g?c                   sZ   e Zd Zdd fdd
Z fddZdd Z fd	d
Z fddZ fddZ  Z	S )_OverlappedFutureN)loopc               s&   t  j|d | jr| jd= || _d S )N)r   r   )super__init___source_traceback_ov)selfovr   )	__class__ ./usr/lib64/python3.6/asyncio/windows_events.pyr   -   s    z_OverlappedFuture.__init__c                s@   t  j }| jd k	r<| jjr dnd}|jdd|| jjf  |S )NpendingZ	completedr   zoverlapped=<%s, %#x>)r   
_repr_infor   r   insertaddress)r   infostate)r   r   r   r   3   s
    

z_OverlappedFuture._repr_infoc             C   sr   | j d krd S y| j j  W nJ tk
rf } z.d|| d}| jrJ| j|d< | jj| W Y d d }~X nX d | _ d S )Nz&Cancelling an overlapped future failed)message	exceptionfuturesource_traceback)r   cancelOSErrorr   _loopcall_exception_handler)r   exccontextr   r   r   _cancel_overlapped:   s    

z$_OverlappedFuture._cancel_overlappedc                s   | j   t j S )N)r-   r   r'   )r   )r   r   r   r'   J   s    z_OverlappedFuture.cancelc                s   t  j| | j  d S )N)r   set_exceptionr-   )r   r$   )r   r   r   r.   N   s    z_OverlappedFuture.set_exceptionc                s   t  j| d | _d S )N)r   
set_resultr   )r   result)r   r   r   r/   R   s    z_OverlappedFuture.set_result)
__name__
__module____qualname__r   r   r-   r'   r.   r/   __classcell__r   r   )r   r   r   '   s   r   c                   sj   e Zd Zdd fdd
Zdd Z fddZd	d
 Zdd Z fddZ fddZ	 fddZ
  ZS )_BaseWaitHandleFutureN)r   c               s8   t  j|d | jr| jd= || _|| _|| _d| _d S )N)r   r   Tr   )r   r   r   r   _handle_wait_handle_registered)r   r   handlewait_handler   )r   r   r   r   Z   s    z_BaseWaitHandleFuture.__init__c             C   s   t j| jdt jkS )Nr   )_winapiZWaitForSingleObjectr6   ZWAIT_OBJECT_0)r   r   r   r   _pollh   s    z_BaseWaitHandleFuture._pollc                s\   t  j }|jd| j  | jd k	r>| j r0dnd}|j| | jd k	rX|jd| j  |S )Nz
handle=%#xZsignaledZwaitingzwait_handle=%#x)r   r   appendr6   r<   r7   )r   r!   r"   )r   r   r   r   m   s    



z _BaseWaitHandleFuture._repr_infoc             C   s
   d | _ d S )N)r   )r   futr   r   r   _unregister_wait_cbw   s    z)_BaseWaitHandleFuture._unregister_wait_cbc             C   s   | j s
d S d| _ | j}d | _ytj| W nZ tk
r } z>|jtjkrtd|| d}| jrd| j|d< | jj	| d S W Y d d }~X nX | j
d  d S )NFz$Failed to unregister the wait handle)r#   r$   r%   r&   )r8   r7   r
   ZUnregisterWaitr(   winerrorERROR_IO_PENDINGr   r)   r*   r?   )r   r:   r+   r,   r   r   r   _unregister_wait|   s"    
z&_BaseWaitHandleFuture._unregister_waitc                s   | j   t j S )N)rB   r   r'   )r   )r   r   r   r'      s    z_BaseWaitHandleFuture.cancelc                s   | j   t j| d S )N)rB   r   r.   )r   r$   )r   r   r   r.      s    z#_BaseWaitHandleFuture.set_exceptionc                s   | j   t j| d S )N)rB   r   r/   )r   r0   )r   r   r   r/      s    z _BaseWaitHandleFuture.set_result)r1   r2   r3   r   r<   r   r?   rB   r'   r.   r/   r4   r   r   )r   r   r5   W   s   
r5   c                   sB   e Zd Zdd fdd
Zdd Z fddZ fd	d
Z  ZS )_WaitCancelFutureN)r   c               s   t  j||||d d | _d S )N)r   )r   r   _done_callback)r   r   eventr:   r   )r   r   r   r      s    z_WaitCancelFuture.__init__c             C   s   t dd S )Nz'_WaitCancelFuture must not be cancelled)RuntimeError)r   r   r   r   r'      s    z_WaitCancelFuture.cancelc                s$   t  j| | jd k	r | j|  d S )N)r   r/   rD   )r   r0   )r   r   r   r/      s    
z_WaitCancelFuture.set_resultc                s$   t  j| | jd k	r | j|  d S )N)r   r.   rD   )r   r$   )r   r   r   r.      s    
z_WaitCancelFuture.set_exception)r1   r2   r3   r   r'   r/   r.   r4   r   r   )r   r   rC      s   rC   c                   s6   e Zd Zdd fdd
Z fddZdd Z  ZS )	_WaitHandleFutureN)r   c               s<   t  j||||d || _d| _tjd ddd | _d | _d S )N)r   TF)r   r   	_proactorZ_unregister_proactorr
   ZCreateEvent_event
_event_fut)r   r   r9   r:   proactorr   )r   r   r   r      s
    z_WaitHandleFuture.__init__c                sF   | j d k	r"tj| j  d | _ d | _| jj| j d | _t j| d S )N)	rI   r;   CloseHandlerJ   rH   _unregisterr   r   r?   )r   r>   )r   r   r   r?      s    
	z%_WaitHandleFuture._unregister_wait_cbc             C   s   | j s
d S d| _ | j}d | _ytj|| j W nZ tk
r } z>|jtjkrxd|| d}| jrh| j|d< | j	j
| d S W Y d d }~X nX | jj| j| j| _d S )NFz$Failed to unregister the wait handle)r#   r$   r%   r&   )r8   r7   r
   ZUnregisterWaitExrI   r(   r@   rA   r   r)   r*   rH   _wait_cancelr?   rJ   )r   r:   r+   r,   r   r   r   rB      s$    

z"_WaitHandleFuture._unregister_wait)r1   r2   r3   r   r?   rB   r4   r   r   )r   r   rG      s   rG   c               @   s8   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZeZdS )
PipeServerc             C   s,   || _ tj | _d | _d | _| jd| _d S )NT)_addressweakrefWeakSet_free_instances_pipe_accept_pipe_future_server_pipe_handle)r   r    r   r   r   r      s
    
zPipeServer.__init__c             C   s   | j | jd }| _ |S )NF)rT   rV   )r   tmpr   r   r   _get_unconnected_pipe   s    z PipeServer._get_unconnected_pipec          	   C   sr   | j  rd S tjtjB }|r&|tjO }tj| j|tjtjB tj	B tj
tjtjtjtj}tj|}| jj| |S )N)closedr;   ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperP   ZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ	PIPE_WAITZPIPE_UNLIMITED_INSTANCESr	   ZBUFSIZEZNMPWAIT_WAIT_FOREVERNULL
PipeHandlerS   add)r   firstflagshpiper   r   r   rV     s    


zPipeServer._server_pipe_handlec             C   s
   | j d kS )N)rP   )r   r   r   r   rY     s    zPipeServer.closedc             C   sV   | j d k	r| j j  d | _ | jd k	rRx| jD ]}|j  q,W d | _d | _| jj  d S )N)rU   r'   rP   rS   closerT   clear)r   r`   r   r   r   ra     s    


zPipeServer.closeN)	r1   r2   r3   r   rX   rV   rY   ra   __del__r   r   r   r   rO      s   
rO   c               @   s   e Zd Zdd ZdS )_WindowsSelectorEventLoopc             C   s   t j S )N)r	   
socketpair)r   r   r   r   _socketpair+  s    z%_WindowsSelectorEventLoop._socketpairN)r1   r2   r3   rf   r   r   r   r   rd   (  s   rd   c                   sL   e Zd Zd fdd	Zdd Zedd Zedd	 Zedd
dZ  Z	S )r   Nc                s   |d krt  }t j| d S )N)r   r   r   )r   rK   )r   r   r   r   2  s    zProactorEventLoop.__init__c             C   s   t j S )N)r	   re   )r   r   r   r   rf   7  s    zProactorEventLoop._socketpairc             c   s8   | j j|}|E d H }| }| j||d|id}||fS )Naddr)extra)rH   connect_pipe_make_duplex_pipe_transport)r   protocol_factoryr    fr`   protocoltransr   r   r   create_pipe_connection:  s    
z(ProactorEventLoop.create_pipe_connectionc                s.   t  d fdd	j gS )Nc                s  d }yj| rL| j  }jj| j r2|j  d S  }j||d id j }|d kr`d S jj|} W n t	k
r } zH|r|j
 d	krjd||d |j  njrtjd|dd W Y d d }~X n2 tjk
r   |r|j  Y nX | _| j d S )
Nrg   )rh   r   zPipe accept failed)r#   r$   r`   zAccept pipe failed on pipe %rT)exc_infor   )r0   rS   discardrY   ra   rj   rX   rH   accept_piper(   filenor*   Z_debugr   Zwarningr   CancelledErrorrU   add_done_callback)rl   r`   rm   r+   )r    loop_accept_piperk   r   serverr   r   rv   G  s<    

z>ProactorEventLoop.start_serving_pipe.<locals>.loop_accept_pipe)N)rO   Z	call_soon)r   rk   r    r   )r    rv   rk   r   rw   r   start_serving_pipeC  s    (
z$ProactorEventLoop.start_serving_pipec	             k   s   | j  }
t| |||||||f|
|d|	}y|
E d H  W n& tk
r` } z
|}W Y d d }~X nX d }|d k	r|j  |j E d H  ||S )N)waiterrh   )create_future_WindowsSubprocessTransport	Exceptionra   Z_wait)r   rm   argsshellstdinstdoutstderrbufsizerh   kwargsry   Ztranspr+   errr   r   r   _make_subprocess_transportr  s    

z,ProactorEventLoop._make_subprocess_transport)N)N)
r1   r2   r3   r   rf   r   ro   rx   r   r4   r   r   )r   r   r   /  s   	/c               @   s   e Zd Zd0ddZdd Zdd Zd1d	d
Zdd Zd2ddZd3ddZ	dd Z
dd Zdd Zedd Zd4ddZdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd5d(d)Zd*d+ Zd,d- Zd.d/ ZdS )6r       c             C   sD   d | _ g | _tjtjtd|| _i | _tj	 | _
g | _tj	 | _d S )Nr   )r)   _resultsr
   CreateIoCompletionPortINVALID_HANDLE_VALUErZ   _iocp_cacherQ   rR   r8   _unregistered_stopped_serving)r   Zconcurrencyr   r   r   r     s    
zIocpProactor.__init__c             C   s   d| j jt| jt| jf S )Nz<%s overlapped#=%s result#=%s>)r   r1   lenr   r   )r   r   r   r   __repr__  s    zIocpProactor.__repr__c             C   s
   || _ d S )N)r)   )r   r   r   r   r   set_loop  s    zIocpProactor.set_loopNc             C   s    | j s| j| | j }g | _ |S )N)r   r<   )r   timeoutrW   r   r   r   select  s
    
zIocpProactor.selectc             C   s   | j j }|j| |S )N)r)   rz   r/   )r   valuer>   r   r   r   _result  s    

zIocpProactor._resultr   c             C   sz   | j | tjt}y4t|tjr6|j|j || n|j|j | W n t	k
rb   | j
dS X dd }| j|||S )N    c             S   sJ   y|j  S  tk
rD } z |jtjkr2t|j n W Y d d }~X nX d S )N)	getresultr(   r@   r
   ERROR_NETNAME_DELETEDConnectionResetErrorr}   )rn   keyr   r+   r   r   r   finish_recv  s    z&IocpProactor.recv.<locals>.finish_recv)_register_with_iocpr
   
OverlappedrZ   
isinstancesocketZWSARecvrs   ZReadFileBrokenPipeErrorr   	_register)r   connnbytesr^   r   r   r   r   r   recv  s    

	zIocpProactor.recvc             C   sZ   | j | tjt}t|tjr4|j|j || n|j|j | dd }| j	|||S )Nc             S   sJ   y|j  S  tk
rD } z |jtjkr2t|j n W Y d d }~X nX d S )N)r   r(   r@   r
   r   r   r}   )rn   r   r   r+   r   r   r   finish_send  s    z&IocpProactor.send.<locals>.finish_send)
r   r
   r   rZ   r   r   ZWSASendrs   Z	WriteFiler   )r   r   bufr^   r   r   r   r   r   send  s    

	zIocpProactor.sendc                sz   | j  | jj tjt}|jj  j   fdd}tdd }| j	||}|| }t
j|| jd |S )Nc                sD   |j   tjdj } jtjtj|  j	j
    j fS )Nz@P)r   structZpackrs   
setsockoptr   
SOL_SOCKETr
   ZSO_UPDATE_ACCEPT_CONTEXT
settimeoutZ
gettimeoutZgetpeername)rn   r   r   r   )r   listenerr   r   finish_accept  s    
z*IocpProactor.accept.<locals>.finish_acceptc             s   s4   y| E d H  W n  t jk
r.   |j   Y nX d S )N)r   rt   ra   )r%   r   r   r   r   accept_coro  s
    z(IocpProactor.accept.<locals>.accept_coro)r   )r   _get_accept_socketfamilyr
   r   rZ   ZAcceptExrs   r   r   r   Zensure_futurer)   )r   r   r   r   r   r%   coror   )r   r   r   accept  s    

		
zIocpProactor.acceptc                s   | j   ytj j  j W nB tk
rb } z&|jtjkr@  j	 d dkrR W Y d d }~X nX tj
t}|j j |  fdd}| j| |S )Nr   r   c                s   |j    jtjtjd  S )Nr   )r   r   r   r   r
   ZSO_UPDATE_CONNECT_CONTEXT)rn   r   r   )r   r   r   finish_connect  s    
z,IocpProactor.connect.<locals>.finish_connect)r   r
   Z	BindLocalrs   r   r(   r@   errnoZ	WSAEINVALZgetsocknamer   rZ   Z	ConnectExr   )r   r   r    er   r   r   )r   r   connect  s    

zIocpProactor.connectc                sJ   | j   tjt}|j j }|r0| j S  fdd}| j| |S )Nc                s   |j    S )N)r   )rn   r   r   )r`   r   r   finish_accept_pipe  s    z4IocpProactor.accept_pipe.<locals>.finish_accept_pipe)r   r
   r   rZ   ZConnectNamedPipers   r   r   )r   r`   r   Z	connectedr   r   )r`   r   rr   
  s    


zIocpProactor.accept_pipec             c   sz   t }xjytj|}P W n0 tk
rF } z|jtjkr6 W Y d d }~X nX t|d t}tj	|| j
dE d H  qW tj|S )N   )r   )CONNECT_PIPE_INIT_DELAYr
   ZConnectPiper(   r@   ZERROR_PIPE_BUSYminCONNECT_PIPE_MAX_DELAYr   Zsleepr)   r	   r[   )r   r    Zdelayr9   r+   r   r   r   ri     s    
zIocpProactor.connect_pipec             C   s   | j ||dS )NF)_wait_for_handle)r   r9   r   r   r   r   wait_for_handle/  s    zIocpProactor.wait_for_handlec             C   s   | j |d d}||_|S )NT)r   rD   )r   rE   Zdone_callbackr>   r   r   r   rN   7  s    zIocpProactor._wait_cancelc                s   |d krt j}ntj|d }tjt}tj|| j|j	|}|rTt
|||| jd nt|||| | jd  jrv jd=  fdd} |d|f| j|j	<  S )Ng     @@)r   r   c                s    j  S )N)r<   )rn   r   r   )rl   r   r   finish_wait_for_handleR  s    z=IocpProactor._wait_for_handle.<locals>.finish_wait_for_handler   r   )r;   INFINITEmathceilr
   r   rZ   ZRegisterWaitWithQueuer   r    rC   r)   rG   r   r   )r   r9   r   Z
_is_cancelmsr   r:   r   r   )rl   r   r   >  s    


	zIocpProactor._wait_for_handlec             C   s0   || j kr,| j j| tj|j | jdd d S )Nr   )r8   r\   r
   r   rs   r   )r   objr   r   r   r   ^  s    
z IocpProactor._register_with_iocpc             C   s   t || jd}|jr|jd= |jsjy|d d |}W n, tk
r^ } z|j| W Y d d }~X nX |j| ||||f| j|j< |S )N)r   r   r   )	r   r)   r   r   r(   r.   r/   r   r    )r   r   r   callbackrl   r   r   r   r   r   r   h  s    

zIocpProactor._registerc             C   s   | j j| d S )N)r   r=   )r   r   r   r   r   rM     s    zIocpProactor._unregisterc             C   s   t j |}|jd |S )Nr   )r   r   )r   r   sr   r   r   r     s    

zIocpProactor._get_accept_socketc             C   s  |d krt }n0|dk r tdntj|d }|t kr>tdxtj| j|}|d krZP d}|\}}}}y| jj|\}}	}
}W nV t	k
r   | j
j r| j
jdd||||f d |dtjfkrtj| wBY nX |
| jkr|j  qB|j sBy||||	}W n: tk
r@ } z|j| | jj| W Y d d }~X qBX |j| | jj| qBW x | jD ]}	| jj|	jd  qdW | jj  d S )Nr   znegative timeoutg     @@ztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r#   status)r   
ValueErrorr   r   r
   ZGetQueuedCompletionStatusr   r   popKeyErrorr)   Z	get_debugr*   r   r;   rL   r   r'   doner(   r.   r   r=   r/   r   r    rb   )r   r   r   r   r   Ztransferredr   r    rl   r   r   r   r   r   r   r   r   r<     sJ    






zIocpProactor._pollc             C   s   | j j| d S )N)r   r\   )r   r   r   r   r   _stop_serving  s    zIocpProactor._stop_servingc             C   s   xt | jj D ]\}\}}}}|j r*qt|tr6qy|j  W q tk
r } z8| jd k	rd||d}|j	rz|j	|d< | jj
| W Y d d }~X qX qW x| jr| jdstjd qW g | _| jd k	rtj| j d | _d S )NzCancelling a future failed)r#   r$   r%   r&   r   z"taking long time to close proactor)listr   itemsZ	cancelledr   rC   r'   r(   r)   r   r*   r<   r   debugr   r   r;   rL   )r   r    r>   r   r   r   r+   r,   r   r   r   ra     s,     


"

zIocpProactor.closec             C   s   | j   d S )N)ra   )r   r   r   r   rc     s    zIocpProactor.__del__)r   )N)r   )r   )N)N)r1   r2   r3   r   r   r   r   r   r   r   r   r   rr   r   ri   r   rN   r   r   r   rM   r   r<   r   ra   rc   r   r   r   r   r     s,   





 
	
7 c               @   s   e Zd Zdd ZdS )r{   c       
         sP   t j|f|||||d| _ fdd} jjjt jj}	|	j| d S )N)r~   r   r   r   r   c                s    j j } j| d S )N)_procZpollZ_process_exited)rl   
returncode)r   r   r   r     s    
z4_WindowsSubprocessTransport._start.<locals>.callback)	r	   Popenr   r)   rH   r   intr6   ru   )
r   r}   r~   r   r   r   r   r   r   rl   r   )r   r   _start  s    z"_WindowsSubprocessTransport._startN)r1   r2   r3   r   r   r   r   r   r{     s   r{   c               @   s   e Zd ZeZdS )_WindowsDefaultEventLoopPolicyN)r1   r2   r3   r   Z_loop_factoryr   r   r   r   r     s   r   ),r;   r   r   r   r   rQ    r   r   r   r   r   r   r	   r
   Z
coroutinesr   logr   __all__rZ   r   ZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDr   r   ZFuturer   r5   rC   rG   objectrO   ZBaseSelectorEventLooprd   ZBaseProactorEventLoopr   r   ZBaseSubprocessTransportr{   r   ZBaseDefaultEventLoopPolicyr   r   r   r   r   r   <module>   sJ   0J4;]  k