Wccs(dZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z dd l mZdd l mZdd l mZdd l mZdd lmZdZGddej*ej,ZGddeej0ZGddeej4ZGddeZGddeej:ZGddeeej>Z Gddeeej>Z!Gdde jDZ#dS)zEvent loop using a proactor and related classes. A proactor is a "notify-on-completion" multiplexer. Currently a proactor is only implemented on Windows with IOCP. )BaseProactorEventLoopN) base_events) constants)futures) exceptions) protocols)sslproto) transports)trsock)loggercstj||jd< |j|jd<d|jvr! |j|jd<dSdS#tj $r8|j jrtjd|dY|wxYw#tj $rd|jd<YdSwxYw)NsocketZsocknamezgetsockname() failed on %rTZexc_infopeername) r TransportSocket_extraZ getsocknamer Zerror_loop get_debugr warningZ getpeername) transportsock 0/usr/lib64/python3.12/asyncio/proactor_events.py_set_socket_extrars!'!7!7!=IXC'+'7'7'9 $ )))) 0+/+;+;+=I  Z ( ( (*) <<CCC ?? $ $ & & NN,dT C C CC|| 0 0 0+/I  Z ( ( ( ( 0s$A5C5A CC#C+*C+cseZdZdZ dfd ZdZdZdZdZdZ d Z e jfd Z dd Zd ZdZdZxZS)_ProactorBasePipeTransportz*Base class for pipe and socket transports.Ncs(tj|||j|||_|j |||_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ |j |j j|jj!|j"j$||/|jj!t&j(|ddSdS)NrF)super__init__ _set_extra_sock set_protocol_server_buffer _read_fut _write_fut_pending_write _conn_lost_closing_called_connection_lost _eof_writtenZ_attachr call_soon _protocolZconnection_maderZ_set_result_unless_cancelledselflooprprotocolwaiterextraserver __class__ rrz#_ProactorBasePipeTransport.__init__2s %%   (##   ',$! << # LL " " T^^;;TBB   JJ !E!E!' / / / /  cs|jjg}|j|jdn|jr|jd|j.|jd|jj |j |jd|j |j|jd|j|jr*|jdt|j|jr|jddjd j|S) NZclosedZclosingzfd=zread=zwrite=zwrite_bufsize=z EOF writtenz<{}>z ) r1__name__rappendr%filenor!r"r lenr'ZformatZjoin)r+Zinforr__repr__z#_ProactorBasePipeTransport.__repr__Is''( ::  KK ! ! ! ]]] KK " " :: ! KK3djj//133 4 4 >> % KK222 3 3 ?? & KK444 5 5 <<< KK<T\\):<< = =     KK & &}}SXXd^,,r3cs$||jd<dS)NZpipe)rr+rrrrz%_ProactorBasePipeTransport._set_extra[s" Fr3cs||_dSNr))r+r-rrrz'_ProactorBasePipeTransport.set_protocol^s !r3c|jSr:r;r+ r get_protocolz'_ProactorBasePipeTransport.get_protocolas ~~r3cr<r:)r%r=r>r is_closingz%_ProactorBasePipeTransport.is_closingds }}r3cs8|jrdSd|_|xjdz c_|js3|j'|jj |j d|j$|jjd|_dSdS)NTr) r%r$r r"rr(_call_connection_lostr!cancelr=r>rclosez _ProactorBasePipeTransport.closegs === F  1||| 7 JJ !;!;T B B >> % NN ! ! # #!DNNN & %r3cs|j1|d|t||jjdSdS)Nzunclosed transport )Zsource)rZResourceWarningrC)r+Z_warnrr__del__z"_ProactorBasePipeTransport.__del__rsJ :: ! E000/$ O O O JJ       " !r3Fatal error on pipe transportcsD t|tr7|jjrGt j d||dn+|jj ||||jd|j|dS#|j|wxYw)Nz%r: %sTr )message exceptionrr-) isinstanceOSErrorrrr debugcall_exception_handlerr) _force_close)r+excrF r _fatal_errorz'_ProactorBasePipeTransport._fatal_errorws ##w''::''))LL44HHHH 11&!$!% $ 33   c " " " "D  c " " " " " "s A5B BcsX|jV|jjs;||jjdn|jj||jr|j rdSd|_|xj dz c_|jr"|jjd|_|jr"|jjd|_ d|_ d|_ |jj|j|dS)NTrr) _empty_waiterdone set_resultZ set_exceptionr%r&r$r"rBr!r#r rr(rA)r+rMrrrLz'_ProactorBasePipeTransport._force_closes    )$2D2D2I2I2K2K{""--d333""0055 ===T999 F  1 ??? OO " " $ $"DO >>> NN ! ! # #!DN  T77====r3cs |jj|t|jdrJ|jj dkr+|jj t j|jjd|_|j}||jd|_ d|_ dS#t|jdrJ|jj dkr+|jj t j|jjd|_|j}||jd|_ d|_ wxYw)NshutdownT) r)Zconnection_lostZhasattrrr6rSr Z SHUT_RDWRrCrZ_detachr&)r+rMr0rNrrAz0_ProactorBasePipeTransport._call_connection_lostsC 0 NN * *3 / / tzz:..4::3D3D3F"3L3L ##F$4$455 JJ    DJ\\F!  # +/D ( ( (tzz:..4::3D3D3F"3L3L ##F$4$455 JJ    DJ\\F!  # +/D ( / / / /s CB3Fcsj|j}|j|t|jz }|Sr:)r#r r7)r+Zsizerrget_write_buffer_sizez0_ProactorBasePipeTransport.get_write_buffer_sizes/"" << # C % %D r3NNN)rE)r4 __module__ __qualname____doc__rr8rrr?r@rCwarningsZwarnrDrOrLrArU __classcell__r1@rrr.s4448$(//////.---$###""" " " "%MM # # # #>>>(000$r3rcsNeZdZdZ d fd ZdZdZdZdZd Z d d Z xZ S) _ProactorReadPipeTransportzTransport for read pipes.Ncsd|_d|_tj||||||t ||_|j j|jd|_dS)NrTTF) _pending_data_length_pausedrr bytearray_datarr( _loop_reading) r+r,rr-r.r/r0Z buffer_sizer1s rrz#_ProactorReadPipeTransport.__init__sa$&!  tXvufEE{+  T//00 r3cs6|j o |j Sr:)rar%r=r>r is_readingz%_ProactorReadPipeTransport.is_readings<<5 $55r3cs|js |jrdSd|_|jjrt j d|dSdS)NTz%r pauses reading)r%rarrr rJr=r>r pause_readingz(_ProactorReadPipeTransport.pause_readingsT ===DLLL F  ::   ! ! LL,d 3 3 3 3 " !r3cs|js |jsdSd|_|j'|jj |j d|j }d|_|dkr5|jj |j|jd|||jjrtjd|dSdS)NFrTz%r resumes reading) r%rar!rr(rdr`_data_receivedrcrr rJ)r+lengthrrresume_readingz)_ProactorReadPipeTransport.resume_readings === F >> ! JJ !3!3T : :**$&! B;; JJ !4!4djj&6I6 R R ::   ! ! LL-t 4 4 4 4 " !r3csF|jjrtjd| |jj }|s|jdSdS#t tf$rt$r}|j|dYd}~dSd}~wwxYw)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rrr rJr)Z eof_received SystemExitKeyboardInterrupt BaseExceptionrOrC)r+Z keep_openrMrNr _eof_receivedz(_ProactorReadPipeTransport._eof_receiveds ::   ! ! LL*D 1 1 335Iy JJLLLLy-.          H J J FFFFF sA''B BB cs|jr ||_dS|dkr|jdSt|jt j r% t j|j|dS|jj|dS#ttf$rt$r}|j|dYd}~dSd}~wwxYw)Nrz3Fatal error: protocol.buffer_updated() call failed.) rar`rmrHr)rZBufferedProtocolZ_feed_data_to_buffered_protorjrkrlrOZ data_received)r+datarhrM rrgz)_ProactorReadPipeTransport._data_receiveds <<<)/D % F Q;;    F dnni&@&@ A A 66t~~tLLLL NN ( ( . . . . 12       !!##122  s"BC4C  Ccs`d}d} |nd|_|jrE|j}|dkr |dkr|j||dSdS|jd|}n|j |j r |dkr|j||dSdS|js@|jjj|j|j|_|js'|jj|j |dkr|j||dSdS#t$r^}|j s|j|dn4|jj!rt#j$ddYd}~d}~wt&$r}|j)|Yd}~d}~wt*$r}|j|dYd}~d}~wt,j.$r|j sYwxYw#|dkr|j||wxYw)NrTrz"Fatal read error on pipe transportz*Read error on pipe transport while closingTr )r!rQresultrgrcrBr%rar _proactor recv_intoradd_done_callbackrdZConnectionAbortedErrorrOrr rJConnectionResetErrorrLrIrCancelledError)r+futrhrnrM rrdz(_ProactorReadPipeTransport._loop_readings- 2"&88:: ZZ\F{{D{{##D&1111{A ::gv.DDJJLL}}}2{{##D&1111{)<<H HG(#H($H HHHH-)NNNr_r:) r4rWrXrYrrerfrirmrgrdr[r\r]rr^r^s##486;666444&555$ ///20202020202020202r3r^csReZdZdZdZfdZdZd dZdZdZ d Z d Z d Z xZ S) _ProactorBaseWritePipeTransportzTransport for write pipes.TcsNtj|i|d|_dSr:)rrrPr+ZargsZkwr1 rrz(_ProactorBaseWritePipeTransport.__init__Ks.$%"%%%!r3cst|tttfs%t dt |j |jr td|j td|sdS|jrM|jtjkrtjd|xjdz c_ dS|j |j!t|dS|j"s%t||_|j%dS|j"j'||j%dS)Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r)rn)rHbytesrb memoryview TypeErrortyper4r' RuntimeErrorrPr$r!LOG_THRESHOLD_FOR_CONNLOST_WRITESr rr" _loop_writingr _maybe_pause_protocolZextend)r+rnrrwritez%_ProactorBaseWritePipeTransport.writeOsA$ : >??-Dz**--. .    ;< <    )IJ Jt F ???)"M"MMM@AA OOOq OO F ?? "   E$K  0 0 0 0$T?DL  & & ( ( ( ( LL   % %  & & ( ( ( (r3Ncs: ||j|jrdSd|_d|_|r|j||j}d|_|s||jr'|j j |jd|jr+|jjtj|jn|j jj|j||_|jj!sJt#||_|jj%|j&|j)n&|jj%|j&|j*,|j|j*j-ddSdSdS#t.$r}|j1|Yd}~dSd}~wt2$r}|j5|dYd}~dSd}~wwxYw)Nrz#Fatal write error on pipe transport)r"r%r#rpr rr(rAr'rrSr SHUT_WR_maybe_resume_protocolrqsendrQr7rsrrrPrRrtrLrIrO)r+frnrMrorrz-_ProactorBaseWritePipeTransport._loop_writingus & J}!8T]]]"DO"#D q |||# 4===JJ(()C)CTJJ$$$JJ''77 ++---"&**"6"6";";DJJ"M++--*-d)D'OO55d6H6HII..000OO55d6H6HII!!-$//2I""--d33333J2I--# # # #   c " " " " " " " " J J J   c#H I I I I I I I I Js)G F)G HG// H<HHcdSNTr=r>r can_write_eofz-_ProactorBaseWritePipeTransport.can_write_eoftr3cs(|jdSr:)rCr=r>r write_eofz)_ProactorBaseWritePipeTransport.write_eofs r3c*|jddSr:rLr=r>rabortz%_ProactorBaseWritePipeTransport.abort $r3cs|j td|jj|_|j|jj d|jS)NzEmpty waiter is already set)rPrrZ create_futurer"rRr=r>r_make_empty_waiterz2_ProactorBaseWritePipeTransport._make_empty_waiters\    )<= =!ZZ557 ?? "    ) )$ / /!!!r3csd|_dSr:)rPr=r>r_reset_empty_waiterz3_ProactorBaseWritePipeTransport._reset_empty_waiters!r3NN)r4rWrXrYZ_start_tls_compatiblerrrrrrrrr[r\r]rrxrxEs$$ """""$)$)$)L'J'J'J'JR   """"""""""r3rxcs$eZdZfdZdZxZS)_ProactorWritePipeTransportcstj|i||jjj |j d|_|j j|jdS)Ni) rrrrqrecvrr!rs _pipe_closedryrzrrz$_ProactorWritePipeTransport.__init__sc$%"%%%--224::rB (():):;;;;r3cs|jrdS|jrdSd|_|j|j t dS|j dSr:)Z cancelledr%r!r"rLZBrokenPipeErrorrC)r+rvrrrz(_ProactorWritePipeTransport._pipe_closedsZ ==?? F === F ?? &   o/ 0 0 0 0 JJLLLLr3)r4rWrXrrr[r\r]rrrsG<<<<<       r3rcsReZdZdZ d fd ZdZdZdZd dZd dZ d d Z xZ S) _ProactorDatagramTransportiNcs||_d|_d|_tj |||||t j |_|jj|jdS)Nr)r.r/) _addressrP _buffer_sizerr collectionsZdequer rr(rd)r+r,rr-addressr.r/r1r2rrz#_ProactorDatagramTransport.__init__sm ! tXfEJJ#((*  T//0000r3c"t||dSr:rr9rrrz%_ProactorDatagramTransport._set_extra$%%%%r3cr<r:)rr=r>rrUz0_ProactorDatagramTransport.get_write_buffer_sizes   r3crr:rr=r>rrz _ProactorDatagramTransport.abortrr3cst|tttfst dt ||sdS|j *|d|j fvrtd|j |jrY|j rM|jtjkrtjd|xjdz c_dS|jjt||f|xjt!|z c_|j"|j%|j'dS)Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r)rHr{rbr|r}r~rZ ValueErrorr$rrr rr r5rr7r"rr)r+rnaddrrNrsendtoz!_ProactorDatagramTransport.sendtos.$ : >??J J( (t F == $dDMM5J)J)JCDMMCCE E ???t}}})"M"MMMBCC OOOq OO F U4[$/00 SY& ?? "     ""$$$$r3cs |jrdSd|_|r|j|jr|jrA|jr5|j r'|j j|jddS|jj\}}|xjt|zc_ |j7|j jj|j||_n8|j jj|j|||_|jj!|j"|j%dS#t&$r'}|j(j+|Yd}~dSd}~wt,$r}|j/|dYd}~dSd}~wwxYw)N)rz'Fatal write error on datagram transport)r$r"rpr rr%rr(rAZpopleftrr7rqrrrrsrrrIr)error_receivedZ ExceptionrO)r+rvrnrrMrwrrz(_ProactorDatagramTransport._loop_writings *#DOs <<!>tzz?C}}"N~~)001C1CDDDt00t<<<<t / / / NN ) )# . . . . . . .((   ===!= t00t<< = = = =sM F3(F3,F3B F33H3 H=GH$HHHH!H)rVr:) r4rWrXrrrrUrrrrdr[r\r]rrrsH59$( 1 1 1 1 1 1&&&!!!   %%%%: * * * *D)=)=)=)=)=)=)=)=r3rcseZdZdZdZdZdS)_ProactorDuplexPipeTransportzTransport for duplex pipes.cr)NFrr=r>rrz*_ProactorDuplexPipeTransport.can_write_eofRsur3cstr:)ZNotImplementedErrorr=r>rrz&_ProactorDuplexPipeTransport.write_eofUs!!r3N)r4rWrXrYrrrr3rrrMs:&%"""""r3rcsfeZdZdZej j Z dfd ZdZ dZ dZ xZ S)_ProactorSocketTransportz Transport for connected sockets.Ncsxtj||||||tj|dSr:)rrrZ _set_nodelayr*r2rrz!_ProactorSocketTransport.__init__`s7 tXvufEE  &&&&r3crr:rr9rrrz#_ProactorSocketTransport._set_extraerr3crrrr=r>rrz&_ProactorSocketTransport.can_write_eofhrr3cs|js |jrdSd|_|j-|jj t j dSdSr)r%r'r"rrSr rr=r>rrz"_ProactorSocketTransport.write_eofksT ===D--- F  ?? " JJ   / / / / # "r3rV) r4rWrXrYrZ _SendfileModeZ TRY_NATIVEZ_sendfile_compatiblerrrrr[r\r]rrrYs+*$22==48$('''''' &&&0000000r3rcseZdZfdZ d dZ d!ddddddddZ d dZ d"dZ d"d Z d"d Z fd Z d Z d Z dZ d#dZdZdZdZdZdZdZdZdZd!dZdZ d$dZdZdZdZxZS)%rcstjtjd|jj ||_||_d|_i|_ |j||jtjtjur2tj |j"j%dSdS)NzUsing proactor: %s)rrr rJr1r4rq _selector_self_reading_future_accept_futuresZset_loop_make_self_pipe threadingcurrent_thread main_threadsignal set_wakeup_fd_csockr6)r+Zproactorr1s rrzBaseProactorEventLoop.__init__us  )8+=+=+F+FGG!!$(!!$   # # %)>)>)@ @ @  !3!3!5 6 6 6 6 A @r3Nc&t||||||Sr:)r)r+rr-r.r/r0rr_make_socket_transportz,BaseProactorEventLoop._make_socket_transports'dHf(-v7 7r3F) server_sideserver_hostnamer/r0ssl_handshake_timeoutssl_shutdown_timeoutc s|tj||||||| | } t||| ||| jS)N)rrr/r0)rZ SSLProtocolrZ_app_transport) r+Zrawsockr- sslcontextr.rrr/r0rrZ ssl_protocols r_make_ssl_transportz)BaseProactorEventLoop._make_ssl_transportsX  ++h F_&;%9 ;; !w ',V = = =***r3crr:)r)r+rr-rr.r/rr_make_datagram_transportz.BaseProactorEventLoop._make_datagram_transports)$h*0%9 9r3c$t|||||Sr:)rr+rr-r.r/rwr_make_duplex_pipe_transportz1BaseProactorEventLoop._make_duplex_pipe_transports+D,0(FEK Kr3crr:)r^rrwr_make_read_pipe_transportz/BaseProactorEventLoop._make_read_pipe_transports)$hNNr3crr:)rrrwr_make_write_pipe_transportz0BaseProactorEventLoop._make_write_pipe_transports+4+/65J Jr3cs|jr td|jrdStjtj urt jd|j|j|jjd|_ d|_ tjdS)Nz!Cannot close a running event looprT)Z is_runningr is_closedrrrrr_stop_accept_futures_close_self_piperqrCrr)r+r1s rrCzBaseProactorEventLoop.closes ??  BC C >>   F  # # %)>)>)@ @ @   $ $ !!##    r3cPK|jj||d{S7r:)rqr)r+rZnrNr sock_recvzBaseProactorEventLoop.sock_recvs3^^((q111111111&crr:)rqrr)r+rbufrNrsock_recv_intoz$BaseProactorEventLoop.sock_recv_intos3^^--dC888888888rcrr:)rqr)r+rZbufsizerNr sock_recvfromz#BaseProactorEventLoop.sock_recvfroms3^^,,T7;;;;;;;;;rrcspK|s t|}|jj|||d{S7r:)r7rqZ recvfrom_into)r+rrZnbytesrorsock_recvfrom_intoz(BaseProactorEventLoop.sock_recvfrom_intosCvXF^^11$VDDDDDDDDDs6crr:)rqr)r+rrnrNr sock_sendallz"BaseProactorEventLoop.sock_sendalls3^^((t444444444rcsTK|jj||d|d{S7)Nr)rqr)r+rrnrror sock_sendtoz!BaseProactorEventLoop.sock_sendtos7^^**4q'BBBBBBBBBs(crr:)rqZconnect)r+rrrNr sock_connectz"BaseProactorEventLoop.sock_connects3^^++D':::::::::rcsNK|jj|d{S7r:)rqacceptr9rr sock_acceptz!BaseProactorEventLoop.sock_accepts1^^**4000000000s%csK |j} t j|j}|r|n|}|sdSt|d}|rt||z|n|} t||}d} t| |z |}|dkr| | dkr|j|SS|jj||||d{||z }| |z } b#ttjf$r}t j dd}~wwxYw#t$rt j dwxYw7m#| dkr|j|wxYw)Nznot a regular filerl)r6ZAttributeErrorioZUnsupportedOperationrZSendfileNotAvailableErrorosZfstatZst_sizerIZminZseekrqZsendfile) r+rfileoffsetcountr6ZerrZfsizeZ blocksizeZend_posZ total_sents r_sock_sendfile_nativez+BaseProactorEventLoop._sock_sendfile_natives M[[]F MHHV$,,E#UEE y1 ;/ 05#fune,,5VU#  "& 0)< >>% A~~ &!!! nn--dD&)LLLLLLL)#i'  7 78 M M M667KL L M M M M667KL L MMA~~ &!! " " " "sFC!D5D9(!D9 D7 D9D3D  D"D47D99EcsnK|j}|j|jd{ |j|j|||dd{ |j |r|j SS7Q7+#|j |r|j wxYw)NF)Zfallback)rerfrZ sock_sendfilerrri)r+Ztransprrrrirr_sendfile_nativez&BaseProactorEventLoop._sendfile_natives**,''))))))) (++FLL$5:,<<<<<<< <  & & ( (~%%''' *<  & & ( (~%%'' ( ( ( (s"B #B B !B B&B4cs|j"|jjd|_|jjd|_|jjd|_|xj dzc_dS)Nr)rrB_ssockrCr _internal_fdsr=r>rrz&BaseProactorEventLoop._close_self_pipes|  $ $ 0  % % , , . .(,D %     ar3cstj\|_|_|jj d|jj d|xj dz c_dS)NFr)r Z socketpairrrZ setblockingrr=r>rrz%BaseProactorEventLoop._make_self_pipe s`#)#4#4#6  T[ && && ar3cs ||j|j|urdS|jj|jd}||_|j |j dS#tj$rYdSttf$rt$r!}|jd||dYd}~dSd}~wwxYw)Niz.Error on reading from the event loop self pipe)rFrGr,) rprrqrrrs_loop_self_readingrrurjrkrlrK)r+rrMrNrrz(BaseProactorEventLoop._loop_self_readings 9} ((11##DKK6A)*D %   7 7 8 8 8 8((    FF-.         ' 'K ))         s"!A1'A11CC"B>>Ccs|j}|dS |jddS#t$r,|jrt j ddYdSYdSwxYw)Nsz3Fail to write a null byte into the self-pipe socketTr )rrrI_debugr rJ)r+Zcsockrr_write_to_selfz$BaseProactorEventLoop._write_to_self/s   = F , JJu     , , ,{{{ 0&*,,,,,,{{ ,s&/AAdc sTdfd jdS)Nc sD |y|j\}}jrtjd||} j || dd|i nj ||d|ij rdSjj }|j j<|jdS#t$r} jdkr=jd|tj d j!n2jr tjd d Yd}~dSYd}~dSYd}~dSd}~wt"j$$r j!YdSwxYw) Nz#%r got a new connection from %r: %rTr)rr/r0rrrrTzAccept failed on a socket)rFrGr zAccept failed on socket %rr )rprr rJrrrrqrrr6rsrIrKr rrCrru) rZconnrr-rMr,protocol_factoryr+r0rrrrs rr,z2BaseProactorEventLoop._start_serving..loopFs # *=!"JD${{{ %J%+T499//1H!-00 (JD#-t"4V2G1E 1GGG 33 (#-t"4V4EE>>##FNN))$/78$$T[[]3##D)))) 6 6 6;;=B&&//#>%("("8"8">11 JJLLL[[[LL!=!%666666666![[[[[!LLLLL,,     s%B CC F)A8E33(FFr:)r() r+rrrr0Zbacklogrrr,s ````` ``@r_start_servingz$BaseProactorEventLoop._start_servingAsc $ *$ *$ *$ *$ *$ *$ *$ *$ *$ *$ *$ *$ *L tr3csdSr:r)r+Z event_listrr_process_eventsz%BaseProactorEventLoop._process_eventsns r3cs|jjD]}|j|jjdSr:)rZvaluesrBZclear)r+futurerrrz*BaseProactorEventLoop._stop_accept_futuresrsH**113  F MMOOO ""$$$$r3cs|jj|jd}|r|j|jj ||j dSr:)rZpopr6rBrq _stop_servingrC)r+rrrNrrz#BaseProactorEventLoop._stop_servingwsT%%))$++-> 6 MMOO $$T** r3rVr:r)r)NNrNN)r4rWrXrrrrrrrrCrrrrrrrrrrrrrrrrrrr[r\r]rrrssS 7 7 7 7 7=A267777 9= + $t"&!% + + + + + CG9999 BF*.KKKK @D(,OOOOAE)-JJJJ (222999<<<EEEE 555CCC;;;111""": ( ( (      99998,,,&>A-1,0++++Z   %%% r3r)$rYZ__all__rrr rZrrrZrrrrrrr r Zlogr rZ_FlowControlMixinZ BaseTransportrZ ReadTransportr^ZWriteTransportrxrZDatagramTransportrZ TransportrrZ BaseEventLooprrr3rrs #  000$BBBBB!=!=!+!9!9BBJO2O2O2O2O2!;!+!9!9O2O2dk"k"k"k"k"&@&0&?&?k"k"\"A,A=A=A=A=A=!;!+!=!=A=A=H " " " " "#=#B#-#7#7 " "000009>)33004IIIIIK55IIIIr3