a ´iLšã@s dZddlZddlZddlZddlZddlZddlZddlZz ddlZWne y^dZYn0ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd lmZd d„ZGdd„de jƒZGdd„dejejƒZGdd„deƒZGdd„deƒZdS))ÚBaseSelectorEventLoopéNé)Ú base_events)Ú constants)Úevents)Úfutures)Ú protocols)Ússlproto)Ú transports)Útrsock)ÚloggercCs6z| |¡}Wnty"YdS0t|j|@ƒSdS©NF)Úget_keyÚKeyErrorÚboolr)ÚselectorÚfdÚeventÚkey©rú//usr/lib64/python3.9/asyncio/selector_events.pyÚ_test_selector_event s  rcsŽeZdZdR‡fdd„ ZdSdddœdd„ZdTddddejdœd d „ZdUd d „Z‡fd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdddejfdd„Zdddejfdd„Zddejfdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„ZdVd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Z!d@dA„Z"dBdC„Z#dWdDdE„Z$dFdG„Z%dHdI„Z&dJdK„Z'dLdM„Z(dNdO„Z)dPdQ„Z*‡Z+S)XrNcsFtƒ ¡|durt ¡}t d|jj¡||_|  ¡t   ¡|_ dS)NzUsing selector: %s) ÚsuperÚ__init__Ú selectorsÚDefaultSelectorr ÚdebugÚ __class__Ú__name__Ú _selectorÚ_make_self_pipeÚweakrefÚWeakValueDictionaryÚ _transports)Úselfr©rrrr1s zBaseSelectorEventLoop.__init__©ÚextraÚservercCst||||||ƒS©N)Ú_SelectorSocketTransport)r$ÚsockÚprotocolÚwaiterr'r(rrrÚ_make_socket_transport;s ÿz,BaseSelectorEventLoop._make_socket_transportF)Ú server_sideÚserver_hostnamer'r(Ússl_handshake_timeoutc Cs0tj||||||| d} t||| ||d| jS)N)r1r&)r Z SSLProtocolr*Z_app_transport) r$Zrawsockr,Ú sslcontextr-r/r0r'r(r1Z ssl_protocolrrrÚ_make_ssl_transport@sýÿz)BaseSelectorEventLoop._make_ssl_transportcCst||||||ƒSr))Ú_SelectorDatagramTransport)r$r+r,Úaddressr-r'rrrÚ_make_datagram_transportMsÿz.BaseSelectorEventLoop._make_datagram_transportcsL| ¡rtdƒ‚| ¡rdS| ¡tƒ ¡|jdurH|j ¡d|_dS)Nz!Cannot close a running event loop)Z is_runningÚ RuntimeErrorÚ is_closedÚ_close_self_piperÚcloser©r$r%rrr:Rs   zBaseSelectorEventLoop.closecCsB| |j ¡¡|j ¡d|_|j ¡d|_|jd8_dS)Nr)Ú_remove_readerÚ_ssockÚfilenor:Ú_csockÚ _internal_fdsr;rrrr9]s   z&BaseSelectorEventLoop._close_self_pipecCsNt ¡\|_|_|j d¡|j d¡|jd7_| |j ¡|j¡dS)NFr) ÚsocketÚ socketpairr=r?Ú setblockingr@Ú _add_readerr>Ú_read_from_selfr;rrrr es   z%BaseSelectorEventLoop._make_self_pipecCsdSr)r©r$ÚdatarrrÚ_process_self_datamsz(BaseSelectorEventLoop._process_self_datacCsTz"|j d¡}|sWqP| |¡Wqty8YqYqtyLYqPYq0qdS)Ni)r=ÚrecvrHÚInterruptedErrorÚBlockingIOErrorrFrrrrEps   z%BaseSelectorEventLoop._read_from_selfcCsL|j}|durdSz| d¡Wn&tyF|jrBtjdddYn0dS)Nóz3Fail to write a null byte into the self-pipe socketT©Úexc_info)r?ÚsendÚOSErrorÚ_debugr r)r$ÚcsockrrrÚ_write_to_self|s þz$BaseSelectorEventLoop._write_to_selfédc Cs"| | ¡|j||||||¡dSr))rDr>Ú_accept_connection)r$Úprotocol_factoryr+r2r(Úbacklogr1rrrÚ_start_servingŽs þz$BaseSelectorEventLoop._start_servingc Cst|ƒD]ú}z0| ¡\}} |jr0t d|| |¡| d¡WnžtttfyXYdSt yÚ} zl| j t j t j t j t jfvrÄ| d| t |¡dœ¡| | ¡¡| tj|j||||||¡n‚WYd} ~ qd} ~ 00d| i} | ||| |||¡} | | ¡qdS)Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)ÚmessageÚ exceptionrAÚpeername)ÚrangeÚacceptrQr rrCrKrJÚConnectionAbortedErrorrPÚerrnoZEMFILEZENFILEZENOBUFSZENOMEMÚcall_exception_handlerr ÚTransportSocketr<r>Z call_laterrZACCEPT_RETRY_DELAYrXÚ_accept_connection2Z create_task) r$rVr+r2r(rWr1Ú_ÚconnÚaddrÚexcr'r]rrrrU•s@  ÿ ÿýý þz(BaseSelectorEventLoop._accept_connectionc Ãsôd}d}zr|ƒ}| ¡} |r8|j|||| d|||d}n|j||| ||d}z| IdHWntyv| ¡‚Yn0Wntttfy’‚Yn^tyî} zF|jrÚd| dœ} |durÀ|| d<|durÐ|| d<| | ¡WYd} ~ n d} ~ 00dS)NT)r-r/r'r(r1)r-r'r(z3Error on transport creation for incoming connection)rYrZr,Ú transport) Ú create_futurer3r.Ú BaseExceptionr:Ú SystemExitÚKeyboardInterruptrQr`) r$rVrdr'r2r(r1r,rgr-rfÚcontextrrrrbÁs@ýþ  ýz)BaseSelectorEventLoop._accept_connection2c CsŠ|}t|tƒsHzt| ¡ƒ}Wn(tttfyFtd|›ƒd‚Yn0z|j|}WntyhYn0| ¡s†t d|›d|›ƒ‚dS)NzInvalid file object: zFile descriptor z is used by transport ) Ú isinstanceÚintr>ÚAttributeErrorÚ TypeErrorÚ ValueErrorr#rÚ is_closingr7)r$rr>rgrrrÚ_ensure_fd_no_transportês   ÿÿz-BaseSelectorEventLoop._ensure_fd_no_transportc Gs’| ¡t |||d¡}z|j |¡}Wn(tyP|j |tj|df¡Yn>0|j|j }\}}|j  ||tjB||f¡|durŽ|  ¡|Sr)) Ú _check_closedrÚHandlerrrÚregisterrÚ EVENT_READrGÚmodifyÚcancel© r$rÚcallbackÚargsÚhandlerÚmaskÚreaderÚwriterrrrrDüs  ÿ ÿz!BaseSelectorEventLoop._add_readercCs’| ¡r dSz|j |¡}Wnty0YdS0|j|j}\}}|tjM}|sb|j |¡n|j  ||d|f¡|durŠ|  ¡dSdSdS©NFT) r8rrrrrGrrwÚ unregisterrxry©r$rrr~rr€rrrr< s  z$BaseSelectorEventLoop._remove_readerc Gs’| ¡t |||d¡}z|j |¡}Wn(tyP|j |tjd|f¡Yn>0|j|j }\}}|j  ||tjB||f¡|durŽ|  ¡|Sr)) rtrrurrrrvrÚ EVENT_WRITErGrxryrzrrrÚ _add_writer!s  ÿ ÿz!BaseSelectorEventLoop._add_writercCs’| ¡r dSz|j |¡}Wnty0YdS0|j|j}\}}|tjM}|sb|j |¡n|j  |||df¡|durŠ|  ¡dSdSdSr) r8rrrrrGrr„r‚rxryrƒrrrÚ_remove_writer1s  z$BaseSelectorEventLoop._remove_writercGs"| |¡|j||g|¢RŽdSr))rsrD©r$rr{r|rrrÚ add_readerHs z BaseSelectorEventLoop.add_readercCs| |¡| |¡Sr))rsr<©r$rrrrÚ remove_readerMs z#BaseSelectorEventLoop.remove_readercGs"| |¡|j||g|¢RŽdSr))rsr…r‡rrrÚ add_writerRs z BaseSelectorEventLoop.add_writercCs| |¡| |¡Sr))rsr†r‰rrrÚ remove_writerWs z#BaseSelectorEventLoop.remove_writerc Ãs˜t |¡|jr$| ¡dkr$tdƒ‚z | |¡WSttfyFYn0| ¡}|  ¡}|  |¡|  ||j |||¡}|  tj|j||d¡|IdHS©Nrúthe socket must be non-blocking©r})rÚ_check_ssl_socketrQÚ gettimeoutrqrIrKrJrhr>rsrDÚ _sock_recvÚadd_done_callbackÚ functoolsÚpartialÚ_sock_read_done)r$r+ÚnÚfutrr}rrrÚ sock_recv\s   ÿzBaseSelectorEventLoop.sock_recvcCs|dus| ¡s| |¡dSr))Ú cancelledrŠ©r$rr˜r}rrrr–rsz%BaseSelectorEventLoop._sock_read_donec Cs„| ¡r dSz| |¡}WnZttfy2YdSttfyH‚Yn8tyt}z| |¡WYd}~nd}~00| |¡dSr)) ÚdonerIrKrJrjrkriÚ set_exceptionÚ set_result)r$r˜r+r—rGrfrrrr’vs z BaseSelectorEventLoop._sock_recvc Ãs˜t |¡|jr$| ¡dkr$tdƒ‚z | |¡WSttfyFYn0| ¡}|  ¡}|  |¡|  ||j |||¡}|  tj|j||d¡|IdHSr)rrrQr‘rqÚ recv_intorKrJrhr>rsrDÚ_sock_recv_intor“r”r•r–)r$r+Úbufr˜rr}rrrÚsock_recv_into†s   ÿz$BaseSelectorEventLoop.sock_recv_intoc Cs„| ¡r dSz| |¡}WnZttfy2YdSttfyH‚Yn8tyt}z| |¡WYd}~nd}~00| |¡dSr)) rœrŸrKrJrjrkrirrž)r$r˜r+r¡Únbytesrfrrrr ›s z%BaseSelectorEventLoop._sock_recv_intoc Ãs¶t |¡|jr$| ¡dkr$tdƒ‚z| |¡}WnttfyLd}Yn0|t|ƒkr^dS|  ¡}|  ¡}|  |¡|  ||j ||t|ƒ|g¡}| tj|j||d¡|IdHSr)rrrQr‘rqrOrKrJÚlenrhr>rsr…Ú _sock_sendallÚ memoryviewr“r”r•Ú_sock_write_done)r$r+rGr—r˜rr}rrrÚ sock_sendall¬s&     ÿÿz"BaseSelectorEventLoop.sock_sendallc Cs´| ¡r dS|d}z| ||d…¡}Wn\ttfyBYdSttfyX‚Yn0ty†}z| |¡WYd}~dSd}~00||7}|t|ƒkr¨|  d¡n||d<dS)Nr) rœrOrKrJrjrkrirr¤rž)r$r˜r+ÚviewÚposÚstartr—rfrrrr¥Ës    z#BaseSelectorEventLoop._sock_sendallcÃs”t |¡|jr$| ¡dkr$tdƒ‚|jtjksBtjrt|jtj krt|j ||j|j |j |dIdH}|d\}}}}}|  ¡}| |||¡|IdHS)NrrŽ)ÚfamilyÚtypeÚprotoÚloop)rrrQr‘rqr¬rAÚAF_INETZ _HAS_IPv6ÚAF_INET6Z_ensure_resolvedr­r®rhÚ _sock_connect)r$r+r5Zresolvedrcr˜rrrÚ sock_connectás   ÿ ÿþ z"BaseSelectorEventLoop.sock_connectc Cs´| ¡}z| |¡WnŽttfyb| |¡| ||j|||¡}| tj |j ||d¡YnNt t fyx‚Yn8t y¤}z| |¡WYd}~nd}~00| d¡dS)Nr)r>ÚconnectrKrJrsr…Ú_sock_connect_cbr“r”r•r§rjrkrirrž)r$r˜r+r5rr}rfrrrr²ös   ÿÿ z#BaseSelectorEventLoop._sock_connectcCs|dus| ¡s| |¡dSr))ršrŒr›rrrr§ sz&BaseSelectorEventLoop._sock_write_donec Cs | ¡r dSz,| tjtj¡}|dkr6t|d|›ƒ‚WnXttfyNYnNtt fyd‚Yn8t y}z|  |¡WYd}~nd}~00|  d¡dS)NrzConnect call failed ) rœÚ getsockoptrAÚ SOL_SOCKETÚSO_ERRORrPrKrJrjrkrirrž)r$r˜r+r5Úerrrfrrrrµs z&BaseSelectorEventLoop._sock_connect_cbcÃsBt |¡|jr$| ¡dkr$tdƒ‚| ¡}| ||¡|IdHS)NrrŽ)rrrQr‘rqrhÚ _sock_accept)r$r+r˜rrrÚ sock_accept"s   z!BaseSelectorEventLoop.sock_acceptc CsÂ| ¡}z| ¡\}}| d¡WnŒttfyl| |¡| ||j||¡}| t j |j ||d¡YnRt t fy‚‚Yn<ty®}z| |¡WYd}~nd}~00| ||f¡dS)NFr)r>r]rCrKrJrsrDrºr“r”r•r–rjrkrirrž)r$r˜r+rrdr5r}rfrrrrº1s  ÿ z"BaseSelectorEventLoop._sock_acceptc Ãsœ|j|j=| ¡}| ¡| ¡IdHzL|j|j|||ddIdHW| ¡|rZ| ¡||j|j<S||j|j<n"| ¡|rŠ| ¡||j|j<0dS)NF)Úfallback) r#Ú_sock_fdÚ is_readingÚ pause_readingÚ_make_empty_waiterZ sock_sendfileÚ_sockÚ_reset_empty_waiterÚresume_reading)r$ZtranspÚfileÚoffsetÚcountrÃrrrÚ_sendfile_nativeBs* ÿ  úýz&BaseSelectorEventLoop._sendfile_nativecCs€|D]v\}}|j|j}\}}|tj@rL|durL|jrB| |¡n | |¡|tj@r|dur|jrp| |¡q| |¡qdSr)) ÚfileobjrGrrwZ _cancelledr<Z _add_callbackr„r†)r$Z event_listrr~rÈrr€rrrÚ_process_eventsPs    z%BaseSelectorEventLoop._process_eventscCs| | ¡¡| ¡dSr))r<r>r:)r$r+rrrÚ _stop_serving^sz#BaseSelectorEventLoop._stop_serving)N)N)N)NNN)N)N),rÚ __module__Ú __qualname__rr.rZSSL_HANDSHAKE_TIMEOUTr3r6r:r9r rHrErSrXrUrbrsrDr<r…r†rˆrŠr‹rŒr™r–r’r¢r r¨r¥r³r²r§rµr»rºrÇrÉrÊÚ __classcell__rrr%rr+sh ÿ ÿü ÿ   þ ý .ý )  rcs’eZdZdZeZdZd‡fdd„ Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z ejfdd„Zddd„Zdd„Zdd„Zdd„Zdd„Z‡ZS) Ú_SelectorTransportiNcsêtƒ ||¡t |¡|jd<z| ¡|jd<WntyLd|jd<Yn0d|jvrŠz| ¡|jd<Wntj yˆd|jd<Yn0||_ |  ¡|_ d|_ | |¡||_| ¡|_d|_d|_|jdurÚ|j ¡||j|j <dS)NrAZsocknamer[Fr)rrr raÚ_extraÚ getsocknamerPÚ getpeernamerAÚerrorrÁr>r½Ú_protocol_connectedÚ set_protocolÚ_serverÚ_buffer_factoryÚ_bufferÚ _conn_lostÚ_closingZ_attachr#)r$r¯r+r,r'r(r%rrros,       z_SelectorTransport.__init__cCsÖ|jjg}|jdur | d¡n|jr0| d¡| d|j›¡|jdurÆ|j ¡sÆt|jj |jt j ƒ}|rz| d¡n | d¡t|jj |jt j ƒ}|r¢d}nd}|  ¡}| d|›d |›d ¡d  d  |¡¡S) NÚclosedÚclosingzfd=z read=pollingz read=idleÚpollingZidlezwrite=z<{}>ú )rrrÁÚappendrÙr½Ú_loopr8rrrrwr„Úget_write_buffer_sizeÚformatÚjoin)r$ÚinforÜÚstateÚbufsizerrrÚ__repr__‰s.    ÿ  þz_SelectorTransport.__repr__cCs| d¡dSr))Ú _force_closer;rrrÚabort¥sz_SelectorTransport.abortcCs||_d|_dS©NT)Ú _protocolrÓ©r$r,rrrrÔ¨sz_SelectorTransport.set_protocolcCs|jSr))rër;rrrÚ get_protocol¬sz_SelectorTransport.get_protocolcCs|jSr))rÙr;rrrrr¯sz_SelectorTransport.is_closingcCsT|jr dSd|_|j |j¡|jsP|jd7_|j |j¡|j |jd¡dS©NTr) rÙràr<r½r×rØr†Ú call_soonÚ_call_connection_lostr;rrrr:²sz_SelectorTransport.closecCs,|jdur(|d|›t|d|j ¡dS)Nzunclosed transport )Úsource)rÁÚResourceWarningr:)r$Ú_warnrrrÚ__del__¼s z_SelectorTransport.__del__úFatal error on transportcCsNt|tƒr(|j ¡r@tjd||ddn|j ||||jdœ¡| |¡dS)Nz%r: %sTrM)rYrZrgr,) rmrPràÚ get_debugr rr`rërè)r$rfrYrrrÚ _fatal_errorÁs  üz_SelectorTransport._fatal_errorcCsd|jr dS|jr(|j ¡|j |j¡|jsBd|_|j |j¡|jd7_|j |j |¡dSrî) rØr×Úclearràr†r½rÙr<rïrð©r$rfrrrrèÏs z_SelectorTransport._force_closecCsŽzN|jr|j |¡W|j ¡d|_d|_d|_|j}|durŠ| ¡d|_n:|j ¡d|_d|_d|_|j}|durˆ| ¡d|_0dSr))rÓrëZconnection_lostrÁr:ràrÕZ_detach)r$rfr(rrrrðÛs& ù z(_SelectorTransport._call_connection_lostcCs t|jƒSr))r¤r×r;rrrráész(_SelectorTransport.get_write_buffer_sizecGs$|jr dS|jj||g|¢RŽdSr))rÙràrDr‡rrrrDìsz_SelectorTransport._add_reader)NN)rõ)rrËrÌÚmax_sizeÚ bytearrayrÖrÁrrçrérÔrírrr:ÚwarningsÚwarnrôr÷rèrðrárDrÍrrr%rrÎcs    rÎcsªeZdZdZejjZd#‡fdd„ Z‡fdd„Z dd„Z d d „Z d d „Z d d„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z‡fdd„Zdd „Zd!d"„Z‡ZS)$r*TNcs~d|_tƒ |||||¡d|_d|_d|_t |j¡|j   |j j |¡|j   |j |j|j¡|durz|j   tj|d¡dSr )Ú_read_ready_cbrrÚ_eofÚ_pausedÚ _empty_waiterrZ _set_nodelayrÁràrïrëÚconnection_maderDr½Ú _read_readyrÚ_set_result_unless_cancelled)r$r¯r+r,r-r'r(r%rrrøs  ÿ ÿz!_SelectorSocketTransport.__init__cs.t|tjƒr|j|_n|j|_tƒ |¡dSr))rmrZBufferedProtocolÚ_read_ready__get_bufferrþÚ_read_ready__data_receivedrrÔrìr%rrrÔs  z%_SelectorSocketTransport.set_protocolcCs|j o|j Sr))rrÙr;rrrr¾sz#_SelectorSocketTransport.is_readingcCs>|js |jrdSd|_|j |j¡|j ¡r:t d|¡dS)NTz%r pauses reading)rÙrràr<r½rör rr;rrrr¿s   z&_SelectorSocketTransport.pause_readingcCs@|js |jsdSd|_| |j|j¡|j ¡rÿ      z_SelectorSocketTransport.writec Cs|jr dSz|j |j¡}Wnˆttfy2YnàttfyH‚YnÊty¤}zF|j   |j ¡|j  ¡|  |d¡|jdur|j |¡WYd}~nvd}~00|r¶|jd|…=| ¡|js|j   |j ¡|jdurê|j d¡|jrü| d¡n|jr|j tj¡dS)Nr )rØrÁrOr×rKrJrjrkriràr†r½rør÷rrÚ_maybe_resume_protocolržrÙrðrÿÚshutdownrAÚSHUT_WR)r$r—rfrrrr§s2   "    z%_SelectorSocketTransport._write_readycCs.|js |jrdSd|_|js*|j tj¡dSrê)rÙrÿr×rÁrrArr;rrrÚ write_eofÅs  z"_SelectorSocketTransport.write_eofcCsdSrêrr;rrrÚ can_write_eofÌsz&_SelectorSocketTransport.can_write_eofcs*tƒ |¡|jdur&|j tdƒ¡dS)NzConnection is closed by peer)rrðrrÚConnectionErrorrùr%rrrðÏs   ÿz._SelectorSocketTransport._call_connection_lostcCs6|jdurtdƒ‚|j ¡|_|js0|j d¡|jS)NzEmpty waiter is already set)rr7ràrhr×ržr;rrrrÀÕs    z+_SelectorSocketTransport._make_empty_waitercCs d|_dSr))rr;rrrrÂÝsz,_SelectorSocketTransport._reset_empty_waiter)NNN)rrËrÌZ_start_tls_compatiblerZ _SendfileModeZ TRY_NATIVEZ_sendfile_compatiblerrÔr¾r¿rÃrrrr rrrrrðrÀrÂrÍrrr%rr*ós(ÿ %' r*csFeZdZejZd ‡fdd„ Zdd„Zdd„Zd dd „Z d d „Z ‡Z S)r4Ncs^tƒ ||||¡||_|j |jj|¡|j |j|j|j ¡|durZ|j t j |d¡dSr)) rrÚ_addressràrïrërrDr½rrr)r$r¯r+r,r5r-r'r%rrrås ÿ ÿz#_SelectorDatagramTransport.__init__cCstdd„|jDƒƒS)Ncss|]\}}t|ƒVqdSr))r¤)Ú.0rGrcrrrÚ óózC_SelectorDatagramTransport.get_write_buffer_size..)Úsumr×r;rrrráòsz0_SelectorDatagramTransport.get_write_buffer_sizec Cs¼|jr dSz|j |j¡\}}Wnˆttfy6Yn‚tyd}z|j |¡WYd}~n\d}~0t t fyz‚Yn>t y¨}z|  |d¡WYd}~nd}~00|j  ||¡dS)Nz&Fatal read error on datagram transport)rØrÁÚrecvfromrúrKrJrPrëÚerror_receivedrjrkrir÷Zdatagram_received©r$rGrerfrrrrõs "z&_SelectorDatagramTransport._read_readyc Cs„t|tttfƒs$tdt|ƒj›ƒ‚|s,dS|jrV|d|jfvrPtd|j›ƒ‚|j}|j rŠ|jrŠ|j t j krxt   d¡|j d7_ dS|jsdz,|jdr¬|j |¡n|j ||¡WdSttfyæ|j |j|j¡Yn~ty}z|j |¡WYd}~dSd}~0ttfy0‚Yn4tyb}z| |d¡WYd}~dSd}~00|j  t|ƒ|f¡| !¡dS)Nr z!Invalid address: must be None or r rr[ú'Fatal write error on datagram transport)"rmr rûr¦rpr­rrrqrØrrr rr×rÏrÁrOÚsendtorKrJràr…r½Ú _sendto_readyrPrër rjrkrir÷rßrr!rrrr#sJÿ ÿ     ÿz!_SelectorDatagramTransport.sendtoc Cs|jrâ|j ¡\}}z*|jdr.|j |¡n|j ||¡Wqttfyh|j ||f¡YqâYqt y˜}z|j   |¡WYd}~dSd}~0t t fy®‚YqtyÞ}z| |d¡WYd}~dSd}~00q| ¡|js|j |j¡|jr| d¡dS)Nr[r")r×ÚpopleftrÏrÁrOr#rKrJÚ appendleftrPrër rjrkrir÷rràr†r½rÙrðr!rrrr$0s0  ÿz(_SelectorDatagramTransport._sendto_ready)NNN)N) rrËrÌÚ collectionsÚdequerÖrrárr#r$rÍrrr%rr4ásÿ  +r4)Ú__all__r'r_r”rrArür!ZsslÚ ImportErrorÚrrrrrr r r Úlogr rZ BaseEventLooprZ_FlowControlMixinZ TransportrÎr*r4rrrrÚsB             <ÿo