Ë ‚Ö¦i„Ïãó¸—dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddlmZdZe j6dk(red«‚d„Zd„ZGd„dej>«Z Gd„dejB«Z"Gd„dejFejH«Z%Gd„dejL«Z'Gd„d«Z(Gd„de(«Z)Gd „d!e(«Z*Gd"„d#e*«Z+Gd$„d%e*«Z,Gd&„d'e(«Z-Gd(„d)e(«Z.d*„Z/Gd+„d,ej`«Z1e Z2e1Z3y)-z2Selector event loop for Unix with signal handling.éNé)Ú base_events)Úbase_subprocess)Ú constants)Ú coroutines)Úevents)Ú exceptions)Úfutures)Úselector_events)Útasks)Ú transports)Úlogger)ÚSelectorEventLoopÚAbstractChildWatcherÚSafeChildWatcherÚFastChildWatcherÚPidfdChildWatcherÚMultiLoopChildWatcherÚThreadedChildWatcherÚDefaultEventLoopPolicyÚwin32z+Signals are not really supported on Windowscó—y)zDummy signal handler.N©)ÚsignumÚframes ú,/usr/lib64/python3.12/asyncio/unix_events.pyÚ_sighandler_noopr*s€àócóP— tj|«S#t$r|cYSwxYw©N)ÚosÚwaitstatus_to_exitcodeÚ ValueError)Ústatuss rr"r"/s.€ðÜ×(Ñ(¨Ó0Ð0øÜ òðŠ ð ús ‚— %¤%c󾇗eZdZdZdˆfd„ Zˆfd„Zd„Zd„Zd„Zd„Z d „Z dd „Z dd „Z dd „Z d „Z dddddddœd„Z ddddddddœd„Zd„Zd„Zd„Zd„ZˆxZS)Ú_UnixSelectorEventLoopzdUnix event loop. Adds signal handling and UNIX Domain Socket support to SelectorEventLoop. Ncó2•—t‰|�|«i|_yr )ÚsuperÚ__init__Ú_signal_handlers)ÚselfÚselectorÚ __class__s €rr)z_UnixSelectorEventLoop.__init__?sø€Ü ‰Ñ˜Ô"Ø "ˆÕrcó0•—t‰|�«tj«s,t |j «D]}|j |«Œy|j r;tjd|›d�t|¬«|j j«yy)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal©Úsource) r(ÚcloseÚsysÚ is_finalizingÚlistr*Úremove_signal_handlerÚwarningsÚwarnÚResourceWarningÚclear)r+Úsigr-s €rr1z_UnixSelectorEventLoop.closeCs†ø€Ü ‰‰ ŒÜ× Ñ Ô"ܘD×1Ñ1Ö2�Ø×*Ñ*¨3Õ/ñ3ð×$Ò$Ü— ‘ Ð 1°$°ð:HðIô.Ø%)õ +ð ×%Ñ%×+Ñ+Õ-ð %rcó:—|D]}|sŒ|j|«Œyr )Ú_handle_signal)r+Údatars rÚ_process_self_dataz)_UnixSelectorEventLoop._process_self_dataQs €ÛˆFÙàØ × Ñ  Õ 'ñ rcóR—tj|«stj|«r td«‚|j |«|j « t j|jj««tj|||d«}||j |< t j |t"«t j$|d«y#ttf$r}tt|««‚d}~wwxYw#t$r”}|j |=|j sI t jd«n2#ttf$r }t'j(d|«Yd}~nd}~wwxYw|j*t*j,k(rtd|›d�«‚‚d}~wwxYw)zÃAdd a handler for a signal. UNIX only. Raise ValueError if the signal number is invalid or uncatchable. Raise RuntimeError if there is a problem setting up the handler. z3coroutines cannot be used with add_signal_handler()NFéÿÿÿÿúset_wakeup_fd(-1) failed: %súsig ú cannot be caught)rÚ iscoroutineÚiscoroutinefunctionÚ TypeErrorÚ _check_signalÚ _check_closedÚsignalÚ set_wakeup_fdÚ_csockÚfilenor#ÚOSErrorÚ RuntimeErrorÚstrrÚHandler*rÚ siginterruptrÚinfoÚerrnoÚEINVAL)r+r:ÚcallbackÚargsÚexcÚhandleÚnexcs rÚadd_signal_handlerz)_UnixSelectorEventLoop.add_signal_handlerXsq€ô × "Ñ " 8Ô ,Ü×.Ñ.¨xÔ8Üð8ó9ð 9à ×ј3ÔØ ×ÑÔð )ô × Ñ  §¡×!3Ñ!3Ó!5Ô 6ô—‘˜x¨¨t°TÓ:ˆØ%+ˆ×јcÑ"ð ô �M‰M˜#Ô/Ô 0ô × Ñ   UÕ +øôœGÐ$ò )Üœs 3›xÓ(Ð (ûð )ûôò Ø×%Ñ% cÐ*Ø×(Ò(ðFÜ×(Ñ(¨Õ,øÜ"¤GÐ,òFÜ—K‘KÐ >À×EÑEûðFúð�y‰yœEŸL™LÒ(Ü" T¨#¨Ð.?Ð#@ÓAÐAàûð úsZÁ-CÂ-0D ÃDÃ-DÄDÄ F&ÄF!Ä,EÅF!ÅE1ÅE,Å'F!Å,E1Å10F!Æ!F&cóž—|jj|«}|€y|jr|j|«y|j |«y)z2Internal helper that is the actual signal handler.N)r*ÚgetÚ _cancelledr5Ú_add_callback_signalsafe)r+r:rXs rr<z%_UnixSelectorEventLoop._handle_signal…sE€à×&Ñ&×*Ñ*¨3Ó/ˆØ ˆ>Ø Ø × Ò Ø × &Ñ & sÕ +à × )Ñ )¨&Õ 1rcó—|j|« |j|=|tjk(rtj }ntj } tj||«|js tjd«yy#t$rYywxYw#t$r2}|jtjk(rtd|›d�«‚‚d}~wwxYw#ttf$r }tjd|«Yd}~yd}~wwxYw)zwRemove a handler for a signal. UNIX only. Return True if a signal handler was removed, False if not. FrBrCNr@rAT)rGr*ÚKeyErrorrIÚSIGINTÚdefault_int_handlerÚSIG_DFLrMrSrTrNrJr#rrR)r+r:ÚhandlerrWs rr5z,_UnixSelectorEventLoop.remove_signal_handler�sø€ð ×ј3Ôð Ø×%Ñ% cÐ*ð ”&—-‘-Ò Ü×0Ñ0‰Gä—n‘nˆGð Ü �M‰M˜#˜wÔ 'ð×$Ò$ð AÜ×$Ñ$ RÔ(ñøô-ò Ùð ûôò Ø�y‰yœEŸL™LÒ(Ü" T¨#¨Ð.?Ð#@ÓAÐAàûð  ûô¤Ð(ò AÜ— ‘ Ð:¸C×@Ð@àûð AúsA“ BÁBÁ8C BÂB CÂ'-CÃCÃD Ã+DÄD cóˆ—t|t«std|›�«‚|tj«vrt d|›�«‚y)zÁInternal helper to validate a signal. Raise ValueError if the signal number is invalid or uncatchable. Raise RuntimeError if there is a problem setting up the handler. zsig must be an int, not zinvalid signal number N)Ú isinstanceÚintrFrIÚ valid_signalsr#)r+r:s rrGz$_UnixSelectorEventLoop._check_signal¯sJ€ô ˜#œsÔ#ÜÐ6°s°gÐ>Ó?Ð ?à ”f×*Ñ*Ó,Ñ ,ÜÐ5°c°UÐ;Ó<Ð <ð -rcó —t|||||«Sr )Ú_UnixReadPipeTransport©r+ÚpipeÚprotocolÚwaiterÚextras rÚ_make_read_pipe_transportz0_UnixSelectorEventLoop._make_read_pipe_transport»s€ä% d¨D°(¸FÀEÓJÐJrcó —t|||||«Sr )Ú_UnixWritePipeTransportrks rÚ_make_write_pipe_transportz1_UnixSelectorEventLoop._make_write_pipe_transport¿s€ä& t¨T°8¸VÀUÓKÐKrc ‹ólK—tj«5tjdt«t j «} ddd« 5| j «s td«‚|j«} t||||||||f| |dœ| ¤Ž} | j| j«|j| « | ƒd{–—† ddd«| S#1swYŒŽxYw7Œ#ttf$r‚t$r+| j!«| j#«ƒd{–—†7‚wxYw#1swY SxYw­w)NÚignorezRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)rnro)r6Úcatch_warningsÚ simplefilterÚDeprecationWarningrÚget_child_watcherÚ is_activerNÚ create_futureÚ_UnixSubprocessTransportÚadd_child_handlerÚget_pidÚ_child_watcher_callbackÚ SystemExitÚKeyboardInterruptÚ BaseExceptionr1Ú_wait) r+rmrVÚshellÚstdinÚstdoutÚstderrÚbufsizeroÚkwargsÚwatcherrnÚtransps rÚ_make_subprocess_transportz1_UnixSelectorEventLoop._make_subprocess_transportÃs/èø€ô× $Ñ $Õ &Ü × !Ñ ! (Ô,>Ô ?Ü×.Ñ.Ó0ˆG÷'òØ×$Ñ$Ô&ô #ð$GóHðHà×'Ñ'Ó)ˆFÜ-¨d°H¸dÀEØ,1°6¸6À7ð6à39Àñ6ð/5ñ6ˆFð × %Ñ % f§n¡nÓ&6Ø$(×$@Ñ$@À&ô Jð Ø— ‘ ÷!ð0ˆ ÷9'Ð &úð(ùÜÔ 1Ð2ò ØÜ ò Ø— ‘ ”Ø—l‘l“n×$Ñ$Øð ú÷'ð0ˆ üse‚D4—/CÁ D4ÁA-D'Â>C!ÃCÃC!à D4ÃCÃD4ÃC!Ã!;D$ÄDÄD$Ä$D'Ä'D1Ä,D4có<—|j|j|«yr )Úcall_soon_threadsafeÚ_process_exited)r+ÚpidÚ returncoder‹s rrz._UnixSelectorEventLoop._child_watcher_callbackäs€Ø ×!Ñ! &×"8Ñ"8¸*ÕEr)ÚsslÚsockÚserver_hostnameÚssl_handshake_timeoutÚssl_shutdown_timeoutcƒóÊK—|r |€2td«‚|� td«‚|� td«‚|� td«‚|�‚|� td«‚tj|«}tjtjtj d«} |j d«|j||«ƒd{–—†nf|€ td«‚|jtjk7s|jtj k7rtd |›�«‚|j d«|j||||||¬ «ƒd{–—†\}} || fS7Œ‘#|j«‚xYw7Œ#­w) Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with sslú1ssl_handshake_timeout is only meaningful with sslú0ssl_shutdown_timeout is only meaningful with sslú3path and sock can not be specified at the same timerFzno path and sock were specifiedú.A UNIX Domain Stream Socket was expected, got )r•r–) r#r!ÚfspathÚsocketÚAF_UNIXÚ SOCK_STREAMÚ setblockingÚ sock_connectr1ÚfamilyÚtypeÚ_create_connection_transport) r+Úprotocol_factoryÚpathr’r“r”r•r–Ú transportrms rÚcreate_unix_connectionz-_UnixSelectorEventLoop.create_unix_connectionçs‘èø€ñ ØÐ&Ü ØEóGðGðÐ*Ü Ð!NÓOÐOØ$Ð0Ü ØGóIðIà#Ð/Ü ØFóHðHð Ð ØÐÜ ØIóKðKô—9‘9˜T“?ˆDÜ—=‘=¤§¡´×1CÑ1CÀQÓGˆDð Ø× Ñ  Ô'Ø×'Ñ'¨¨dÓ3×3Ñ3ð ˆ|Ü Ð!BÓCÐCØ— ‘ œvŸ~™~Ò-Ø—I‘I¤×!3Ñ!3Ò3Ü ØDÀTÀHÐMóOðOà × Ñ ˜UÔ #à$(×$EÑ$EØ Ð" C¨Ø"7Ø!5ð%Fó%7÷7ш �8ð˜(Ð"Ð"ð%4ùð Ø— ‘ ” Øúð7ús=‚BE#Â&E Â7E Â8E  E#Å E Å EÅE#édT)r“Úbacklogr’r•r–Ú start_servingc ƒó¦K—t|t«r td«‚|� |s td«‚|� |s td«‚|�¶|� td«‚t j |«}t j t jt j«}|ddvrH tjt j|«j«rt j|« |j#|«nU|€ td «‚|j*t jk7s|j,t jk7rtd |›�«‚|j/d «t1j2||g|||||«} |r-| j5«t7j8d«ƒd{–—†| S#t$rYŒÑt$r!} tj d|| «Yd} ~ Œõd} ~ wwxYw#t$rT} |j%«| j&t&j(k(r!d|›d �} tt&j(| «d‚‚d} ~ w|j%«‚xYw7Œ®­w) Nz*ssl argument must be an SSLContext or Noner˜r™ršr)rÚz2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedr›F)rfÚboolrFr#r!rœr�ržrŸÚstatÚS_ISSOCKÚst_modeÚremoveÚFileNotFoundErrorrMrÚerrorÚbindr1rSÚ EADDRINUSEr¢r£r rÚServerÚ_start_servingr Úsleep) r+r¥r¦r“rªr’r•r–r«ÚerrrWÚmsgÚservers rÚcreate_unix_serverz)_UnixSelectorEventLoop.create_unix_servers7èø€ô �cœ4Ô ÜÐHÓIÐ Ià Ð ,±SÜØCóEð Eð Ð +±CÜØBóDð Dð Ð ØÐÜ ØIóKðKô—9‘9˜T“?ˆDÜ—=‘=¤§¡´×1CÑ1CÓDˆDð�A‰w˜kÑ)ð6Ü—}‘}¤R§W¡W¨T£]×%:Ñ%:Ô;ÜŸ ™  $œð Ø— ‘ ˜$•ðˆ|Ü ØCóEðEð— ‘ œvŸ~™~Ò-Ø—I‘I¤×!3Ñ!3Ò3Ü ØDÀTÀHÐMóOðOð ×јÔÜ×#Ñ# D¨4¨&Ð2BØ$'¨Ð2GØ$8ó:ˆñ Ø × !Ñ !Ô #ô—+‘+˜a“.× Ð àˆ øôS)òÙÜò6ä—L‘Lð"*Ø+/°÷6ñ6ûð6ûôò Ø— ‘ ” Ø—9‘9¤× 0Ñ 0Ò0ð% T HÐ,>Ð?�CÜ!¤%×"2Ñ"2°CÓ8¸dÐBàûð Ø— ‘ ” Øúð& !úsi‚BIÂAF'Ã"GÃ3B-IÆ IÆ!IÆ' GÆ0IÆ2GÆ:GÇIÇGÇIÇ I Ç'AH6È6I É Ic ƒóüK— tj |j «} tj|«j}|r|n|}|sy|j«} |j| d|||||d«| ƒd{–—†S#t$rtjd«‚wxYw#tt jf$r}tjd«‚d}~wwxYw#t$rtjd«‚wxYw7Œ~­w)Nzos.sendfile() is not availableznot a regular filer) r!ÚsendfileÚAttributeErrorr ÚSendfileNotAvailableErrorrLÚioÚUnsupportedOperationÚfstatÚst_sizerMr{Ú_sock_sendfile_native_impl) r+r“ÚfileÚoffsetÚcountrLrºÚfsizeÚ blocksizeÚfuts rÚ_sock_sendfile_nativez,_UnixSelectorEventLoop._sock_sendfile_nativebsèø€ð 2Ü �KŠKð MØ—[‘[“]ˆFð MÜ—H‘H˜VÓ$×,Ñ,ˆEñ#‘E¨ˆ ÙØà× Ñ Ó"ˆØ ×'Ñ'¨¨T°4¸Ø(.°°yÀ!ô Eà�yÐøô%ò 2Ü×6Ñ6Ø0ó2ð 2ð 2ûô ¤× 7Ñ 7Ð8ò MÜ×6Ñ6Ð7KÓLÐ Lûð Mûôò MÜ×6Ñ6Ð7KÓLÐ Lð MúðúsV‚C<„B•B"¦CÁ6C<Á;C:Á<C<ÂBÂC<Â"CÂ;CÃCÃC<ÃC7Ã7C<c ó¸—|j«} |�|j|«|j«r|j|||«y|r/||z }|dkr%|j|||«|j |«y t j | |||«} | dk(r%|j|||«|j |«y|| z }|| z }|€|j||«|j| |j|| ||||||« y#ttf$r;|€|j||«|j| |j|| ||||||« Yyt$rÅ} |�Q| jtjk(r4t| «t ur#t!dtj«} | | _| } |dk(r:t%j&d«} |j|||«|j)| «n)|j|||«|j)| «Yd} ~ yYd} ~ yd} ~ wt*t,f$r‚t.$r.} |j|||«|j)| «Yd} ~ yd} ~ wwxYw)Nrzsocket is not connectedzos.sendfile call failed)rLÚ remove_writerÚ cancelledÚ_sock_sendfile_update_fileposÚ set_resultr!r¿Ú_sock_add_cancellation_callbackÚ add_writerrÆÚBlockingIOErrorÚInterruptedErrorrMrSÚENOTCONNr£ÚConnectionErrorÚ __cause__r rÁÚ set_exceptionr€r�r‚)r+rÌÚ registered_fdr“rLrÈrÉrËÚ total_sentÚfdÚsentrWÚnew_excrºs rrÆz1_UnixSelectorEventLoop._sock_sendfile_native_implysT€à �[‰[‹]ˆØ Ð $ð × Ñ ˜}Ô -Ø �=‰=Œ?Ø × .Ñ .¨v°v¸zÔ JØ Ù Ø  Ñ*ˆIؘAŠ~Ø×2Ñ2°6¸6À:ÔNØ—‘˜zÔ*Øð1 FÜ—;‘;˜r 6¨6°9Ó=ˆDðJ�qŠyà×2Ñ2°6¸6À:ÔNØ—‘˜zÕ*à˜$‘�ؘdÑ"� Ø Ð(Ø×8Ñ8¸¸dÔCØ—‘  D×$CÑ$CÀSØ " D¨&Ø &¨¨y¸*õFøô[ Ô!1Ð2ò BØÐ$Ø×4Ñ4°S¸$Ô?Ø �O‰O˜B × ?Ñ ?ÀØ  fØ" E¨9°jö Bôò 'ØÐ)Ø—I‘I¤§¡Ò/ܘ“I¤_Ñ4ô *Ø-¬u¯~©~ó?�à$'�Ô!Ø�ؘQŠô !×:Ñ:Ø-ó/�à×2Ñ2°6¸6À:ÔNØ×!Ñ! #Õ&à×2Ñ2°6¸6À:ÔNØ×!Ñ! #×&Ñ&ô'ûôÔ-Ð.ò Ø Üò #Ø × .Ñ .¨v°v¸zÔ JØ × Ñ ˜c× "Ñ "ûð #ús,Á:C?Ã?AIÅIÅB6HÈIÈ+$IÉIcóZ—|dkDr&tj||tj«yy©Nr)r!ÚlseekÚSEEK_SET)r+rLrÈrÜs rrÑz4_UnixSelectorEventLoop._sock_sendfile_update_filepos¿s"€Ø ˜Š>Ü �H‰H�V˜V¤R§[¡[Õ 1ð rcó6‡‡—ˆˆfd„}|j|«y)Ncóv•—|j«r(‰j«}|dk7r‰j|«yyy)Nr@)rÐrLrÏ)rÌrÝr+r“s €€rÚcbzB_UnixSelectorEventLoop._sock_add_cancellation_callback..cbÄs6ø€Ø�}‰}ŒØ—[‘[“]�ؘ’8Ø×&Ñ& rÕ*ððr)Úadd_done_callback)r+rÌr“ræs` ` rrÓz6_UnixSelectorEventLoop._sock_add_cancellation_callbackÃsù€õ +ð ×јbÕ!rr ©NN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r)r1r>rZr<r5rGrprsrŒrr¨r½rÍrÆrÑrÓÚ __classcell__©r-s@rr&r&9sµø„ñõ #ô .ò(ò+òZ2òò@ =ð@DØ(,óKðAEØ)-óLð 04óòBFð*.ð0#à˜4Ø Ø"&Ø!%ô 0#ðf*.ðGà˜s¨Ø"&Ø!%Øô GòRò.DFòL2ö"rr&có’‡—eZdZdZdˆfd„ Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zej fd „Zdd„Zd„Zd„ZˆxZS)rjicó4•—t‰|�|«||jd<||_||_|j «|_||_d|_d|_ tj|j «j}tj|«sJtj|«s5tj |«s d|_d|_d|_t#d«‚tj$|j d«|jj'|jj(|«|jj'|j*|j |j,«|�,|jj't.j0|d«yy)NrlFz)Pipe transport is for pipes/sockets only.)r(r)Ú_extraÚ_loopÚ_piperLÚ_filenoÚ _protocolÚ_closingÚ_pausedr!rÄr±r¯ÚS_ISFIFOr°ÚS_ISCHRr#Ú set_blockingÚ call_soonÚconnection_madeÚ _add_readerÚ _read_readyr Ú_set_result_unless_cancelled)r+ÚlooprlrmrnroÚmoder-s €rr)z_UnixReadPipeTransport.__init__Ðs.ø€Ü ‰Ñ˜ÔØ"ˆ� ‰ �FÑØˆŒ ؈Œ Ø—{‘{“}ˆŒ Ø!ˆŒØˆŒ ؈Œ ä�x‰x˜Ÿ ™ Ó%×-Ñ-ˆÜ— ‘ ˜dÔ#Ü— ‘ ˜dÔ#Ü— ‘ ˜TÔ"؈DŒJ؈DŒLØ!ˆDŒNÜÐHÓIÐ Iä �‰˜Ÿ ™  eÔ,à � ‰ ×јTŸ^™^×;Ñ;¸TÔBà � ‰ ×јT×-Ñ-Ø!Ÿ\™\¨4×+;Ñ+;ô =à Ð à �J‰J× Ñ ¤×!EÑ!EØ!'¨õ /ð rcó^—|j«sy|jj||«yr )Ú is_readingròrý)r+rÝrUs rrýz"_UnixReadPipeTransport._add_readerîs#€Ø�‰Ô Ø Ø � ‰ ×јr 8Õ,rcó:—|j xr |j Sr )r÷rö©r+s rrz!_UnixReadPipeTransport.is_readingós€Ø—<‘<ÐÒ5¨¯ © Ð$5Ð5rcót—|jjg}|j€|jd«n|jr|jd«|jd|j ›�«t |jdd«}|j�W|�Utj||j tj«}|r|jd«nA|jd«n/|j�|jd«n|jd«djd j|««S) NÚclosedÚclosingúfd=Ú _selectorÚpollingÚidleÚopenú<{}>Ú )r-réróÚappendrörôÚgetattrròr Ú_test_selector_eventÚ selectorsÚ EVENT_READÚformatÚjoin)r+rRr,r s rÚ__repr__z_UnixReadPipeTransport.__repr__ösê€Ø—‘×'Ñ'Ð(ˆØ �:‰:Ð Ø �K‰K˜Õ !Ø �]Š]Ø �K‰K˜ Ô "Ø � ‰ �c˜$Ÿ,™,˜Ð(Ô)ܘ4Ÿ:™: {°DÓ9ˆØ �:‰:Ð ! hÐ&:Ü%×:Ñ:ؘ$Ÿ,™,¬ ×(<Ñ(<ó>ˆGáØ— ‘ ˜IÕ&à— ‘ ˜FÕ#Ø �Z‰ZÐ #Ø �K‰K˜Õ à �K‰K˜Ô !Ø�}‰}˜SŸX™X d›^Ó,Ð,rcóh— tj|j|j«}|r|jj |«y|j j«rtjd|«d|_ |j j|j«|j j|jj«|j j|jd«y#tt f$rYyt"$r}|j%|d«Yd}~yd}~wwxYw)Nú%r was closed by peerTz"Fatal read error on pipe transport)r!ÚreadrôÚmax_sizerõÚ data_receivedròÚ get_debugrrRröÚ_remove_readerrûÚ eof_receivedÚ_call_connection_lostrÕrÖrMÚ _fatal_error)r+r=rWs rrþz"_UnixReadPipeTransport._read_ready sâ€ð GÜ—7‘7˜4Ÿ<™<¨¯©Ó7ˆDñ Ø—‘×,Ñ,¨TÕ2à—:‘:×'Ñ'Ô)Ü—K‘KÐ 7¸Ô>Ø $�” Ø— ‘ ×)Ñ)¨$¯,©,Ô7Ø— ‘ ×$Ñ$ T§^¡^×%@Ñ%@ÔAØ— ‘ ×$Ñ$ T×%?Ñ%?ÀÕFøô Ô!1Ð2ò Ù Üò IØ × Ñ ˜cÐ#G× HÑ Hûð Iús‚*C<Ã<D1Ä D1ÄD,Ä,D1cóà—|j«syd|_|jj|j«|jj «rt jd|«yy)NTz%r pauses reading)rr÷ròrrôrrÚdebugrs rÚ pause_readingz$_UnixReadPipeTransport.pause_readingsP€Ø�‰Ô Ø ØˆŒ Ø � ‰ ×!Ñ! $§,¡,Ô/Ø �:‰:× Ñ Ô !Ü �L‰LÐ,¨dÕ 3ð "rcó—|js |jsyd|_|jj|j|j «|jj «rtjd|«yy)NFz%r resumes reading) rör÷ròrýrôrþrrr#rs rÚresume_readingz%_UnixReadPipeTransport.resume_reading%s[€Ø �=Š= § ¢ Ø ØˆŒ Ø � ‰ ×јtŸ|™|¨T×-=Ñ-=Ô>Ø �:‰:× Ñ Ô !Ü �L‰LÐ-¨tÕ 4ð "rcó—||_yr ©rõ©r+rms rÚ set_protocolz#_UnixReadPipeTransport.set_protocol-ó €Ø!ˆ�rcó—|jSr r(rs rÚ get_protocolz#_UnixReadPipeTransport.get_protocol0ó €Ø�~‰~Ðrcó—|jSr ©rörs rÚ is_closingz!_UnixReadPipeTransport.is_closing3ó €Ø�}‰}Ðrcó@—|js|jd«yyr )röÚ_closers rr1z_UnixReadPipeTransport.close6s€Ø�}Š}Ø �K‰K˜Õ ðrcóv—|j�-|d|›�t|¬«|jj«yy©Nzunclosed transport r/©rór8r1©r+Ú_warns rÚ__del__z_UnixReadPipeTransport.__del__:ó5€Ø �:‰:Ð !Ù Ð'¨ xÐ0´/È$Õ OØ �J‰J× Ñ Õ ð "rcó<—t|t«rQ|jtjk(r4|jj «rDt jd||d¬«n*|jj||||jdœ«|j|«y©Nz%r: %sT©Úexc_info)ÚmessageÚ exceptionr§rm) rfrMrSÚEIOròrrr#Úcall_exception_handlerrõr4©r+rWr@s rr!z#_UnixReadPipeTransport._fatal_error?sr€ä �sœGÔ $¨¯©´e·i±iÒ)?Ø�z‰z×#Ñ#Ô%Ü— ‘ ˜X t¨W¸tÖDà �J‰J× -Ñ -Ø"Ø Ø!Ø ŸN™Nñ /ô ð � ‰ �CÕrcó¨—d|_|jj|j«|jj |j |«y©NT)röròrrôrûr ©r+rWs rr4z_UnixReadPipeTransport._closeMs9€ØˆŒ Ø � ‰ ×!Ñ! $§,¡,Ô/Ø � ‰ ×јT×7Ñ7¸Õ=rcó— |jj|«|jj«d|_d|_d|_y#|jj«d|_d|_d|_wxYwr ©rõÚconnection_lostrór1ròrGs rr z,_UnixReadPipeTransport._call_connection_lostRóg€ð Ø �N‰N× *Ñ *¨3Ô /à �J‰J× Ñ Ô ØˆDŒJØ!ˆDŒN؈D�Jøð �J‰J× Ñ Ô ØˆDŒJØ!ˆDŒN؈D�Júó ‚A Á 1A>rè©zFatal error on pipe transport)rérêrërr)rýrrrþr$r&r*r-r1r1r6r7r:r!r4r rírîs@rrjrjÌs]ø„à€Hõ/ò<-ò 6ò-ò*Gò$4ò5ò"òòòð%ŸM™Móó ò>ö rrjc󜇗eZdZdˆfd„ Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zej fd „Zd„Zdd„Zdd„Zd„ZˆxZS)rrc󬕗t‰ |�||«||jd<||_|j «|_||_t«|_d|_ d|_ tj|j «j}tj|«}tj |«}tj"|«} |s$|s"| s d|_d|_d|_t%d«‚tj&|j d«|j(j+|j j,|«| s!|rdt.j0j3d«sE|j(j+|j(j4|j |j6«|�,|j(j+t8j:|d«yy)NrlrFz?Pipe transport is only for pipes, sockets and character devicesÚaix)r(r)rñrórLrôrõÚ bytearrayÚ_bufferÚ _conn_loströr!rÄr±r¯rùrør°r#rúròrûrür2ÚplatformÚ startswithrýrþr rÿ) r+rrlrmrnrorÚis_charÚis_fifoÚ is_socketr-s €rr)z _UnixWritePipeTransport.__init___siø€Ü ‰Ñ˜ Ô%Ø"ˆ� ‰ �FÑØˆŒ Ø—{‘{“}ˆŒ Ø!ˆŒÜ “{ˆŒ ؈ŒØˆŒ ä�x‰x˜Ÿ ™ Ó%×-Ñ-ˆÜ—,‘,˜tÓ$ˆÜ—-‘- Ó%ˆÜ—M‘M $Ó'ˆ Ù™7¡i؈DŒJ؈DŒLØ!ˆDŒNÜðDóEð Eô �‰˜Ÿ ™  eÔ,Ø � ‰ ×јTŸ^™^×;Ñ;¸TÔBñ ™¬¯©×)@Ñ)@ÀÔ)Gà �J‰J× Ñ  §¡×!7Ñ!7Ø!%§¡¨t×/?Ñ/?ô Að Ð à �J‰J× Ñ ¤×!EÑ!EØ!'¨õ /ð rcó¼—|jjg}|j€|jd«n|jr|jd«|jd|j ›�«t |jdd«}|j�{|�ytj||j tj«}|r|jd«n|jd«|j«}|jd|›�«n/|j�|jd«n|jd«d jd j|««S) Nrrr r r r zbufsize=r rr)r-rérórrörôrròr rrÚ EVENT_WRITEÚget_write_buffer_sizerr)r+rRr,r rˆs rrz _UnixWritePipeTransport.__repr__„s €Ø—‘×'Ñ'Ð(ˆØ �:‰:Ð Ø �K‰K˜Õ !Ø �]Š]Ø �K‰K˜ Ô "Ø � ‰ �c˜$Ÿ,™,˜Ð(Ô)ܘ4Ÿ:™: {°DÓ9ˆØ �:‰:Ð ! hÐ&:Ü%×:Ñ:ؘ$Ÿ,™,¬ ×(=Ñ(=ó?ˆGáØ— ‘ ˜IÕ&à— ‘ ˜FÔ#à×0Ñ0Ó2ˆGØ �K‰K˜( 7 )Ð,Õ -Ø �Z‰ZÐ #Ø �K‰K˜Õ à �K‰K˜Ô !Ø�}‰}˜SŸX™X d›^Ó,Ð,rcó,—t|j«Sr )ÚlenrRrs rr[z-_UnixWritePipeTransport.get_write_buffer_sizeœs€Ü�4—<‘<Ó Ð rcóЗ|jj«rtjd|«|jr|j t ««y|j «y)Nr)ròrrrRrRr4ÚBrokenPipeErrorrs rrþz#_UnixWritePipeTransport._read_readyŸs@€à �:‰:× Ñ Ô !Ü �K‰KÐ/°Ô 6Ø �<Š<Ø �K‰KœÓ)Õ *à �K‰K�Mrcó—t|t«r t|«}|sy|js |jrH|jt j k\rtjd«|xjdz c_y|jss tj|j|«}|t'|«k(ry|dkDrt|«|d}|j(j+|j|j,«|xj|z c_ |j/«y#ttf$rd}YŒ‹tt f$r‚t"$r1}|xjdz c_|j%|d«Yd}~yd}~wwxYw)Nz=pipe closed by peer or os.write(pipe, data) raised exception.rrú#Fatal write error on pipe transport)rfrQÚ memoryviewrSrörÚ!LOG_THRESHOLD_FOR_CONNLOST_WRITESrÚwarningrRr!ÚwriterôrÕrÖr€r�r‚r!r]ròÚ _add_writerÚ _write_readyÚ_maybe_pause_protocol)r+r=ÚnrWs rrez_UnixWritePipeTransport.write¨s7€ä �dœIÔ &ܘdÓ#ˆDÙØ à �?Š?˜dŸmšmØ�‰¤)×"MÑ"MÒMÜ—‘ð HôIà �OŠO˜qÑ �OØ à�|Š|ð Ü—H‘H˜TŸ\™\¨4Ó0�ð”C˜“IŠ~ØØ�Q’Ü! $Ó'¨¨Ð+�Ø �J‰J× "Ñ " 4§<¡<°×1BÑ1BÔ Cà � Š ˜Ñ� Ø ×"Ñ"Õ$øô$Ô%5Ð6ò Ø’ÜÔ 1Ð2ò ØÜ ò Ø—’ 1Ñ$•Ø×!Ñ! #Ð'LÔMÜûð ús D$Ä$E?Ä7E?Å'E:Å:E?có— tj|j|j«}|t |j«k(r’|jj «|j j|j«|j«|jr6|j j|j«|jd«y|dkDr|jd|…=yy#ttf$rYyttf$r‚t $rp}|jj «|xj"dz c_|j j|j«|j%|d«Yd}~yd}~wwxYw)Nrrra)r!rerôrRr]r9ròÚ_remove_writerÚ_maybe_resume_protocolrörr rÕrÖr€r�r‚rSr!)r+rirWs rrgz$_UnixWritePipeTransport._write_readyËs.€ð %Ü—‘˜Ÿ™ t§|¡|Ó4ˆAð”C˜Ÿ ™ Ó%Ò%Ø— ‘ ×"Ñ"Ô$Ø— ‘ ×)Ñ)¨$¯,©,Ô7Ø×+Ñ+Ô-Ø—=’=Ø—J‘J×-Ñ-¨d¯l©lÔ;Ø×.Ñ.¨tÔ4ØØ�Q’Ø—L‘L  ! Ñ$ðøô) Ô!1Ð2ò Ù ÜÔ-Ð.ò Ø Üò JØ �L‰L× Ñ Ô Ø �OŠO˜qÑ �Oð �J‰J× %Ñ % d§l¡lÔ 3Ø × Ñ ˜cÐ#H× IÑ Iûð  Jús‚*C,Ã,FÃ=FÄA&E?Å?Fcó—yrFrrs rÚ can_write_eofz%_UnixWritePipeTransport.can_write_eofçó€ØrcóÜ—|jryd|_|jsL|jj|j«|jj |j d«yyrF)rörRròrrôrûr rs rÚ write_eofz!_UnixWritePipeTransport.write_eofêsO€Ø �=Š=Ø àˆŒ Ø�|Š|Ø �J‰J× %Ñ % d§l¡lÔ 3Ø �J‰J× Ñ  ×!;Ñ!;¸TÕ Bðrcó—||_yr r(r)s rr*z$_UnixWritePipeTransport.set_protocolór+rcó—|jSr r(rs rr-z$_UnixWritePipeTransport.get_protocolör.rcó—|jSr r0rs rr1z"_UnixWritePipeTransport.is_closingùr2rcóX—|j�|js|j«yyyr )rórörqrs rr1z_UnixWritePipeTransport.closeüs$€Ø �:‰:Ð !¨$¯-ª-à �N‰NÕ ð+8Ð !rcóv—|j�-|d|›�t|¬«|jj«yyr6r7r8s rr:z_UnixWritePipeTransport.__del__r;rcó&—|jd«yr )r4rs rÚabortz_UnixWritePipeTransport.aborts€Ø � ‰ �DÕrcó—t|t«r4|jj«rDt j d||d¬«n*|jj ||||jdœ«|j|«yr=) rfrMròrrr#rCrõr4rDs rr!z$_UnixWritePipeTransport._fatal_error sc€ä �cœ7Ô #Ø�z‰z×#Ñ#Ô%Ü— ‘ ˜X t¨W¸tÖDà �J‰J× -Ñ -Ø"Ø Ø!Ø ŸN™Nñ /ô ð � ‰ �CÕrcó>—d|_|jr%|jj|j«|jj «|jj |j«|jj|j|«yrF) rörRròrkrôr9rrûr rGs rr4z_UnixWritePipeTransport._closesf€ØˆŒ Ø �<Š<Ø �J‰J× %Ñ % d§l¡lÔ 3Ø � ‰ ×ÑÔØ � ‰ ×!Ñ! $§,¡,Ô/Ø � ‰ ×јT×7Ñ7¸Õ=rcó— |jj|«|jj«d|_d|_d|_y#|jj«d|_d|_d|_wxYwr rIrGs rr z-_UnixWritePipeTransport._call_connection_lostrKrLrèrMr )rérêrër)rr[rþrergrnrqr*r-r1r1r6r7r:rxr!r4r rírîs@rrrrr\sdø„õ#/òJ-ò0!òò!%òF%ò8òCò"òòòð %ŸM™Móò ó ó>örrrcó—eZdZd„Zy)r|c óô—d}|tjk(r6tjj d«rt j «\}} tj|f||||d|dœ|¤Ž|_|�=|j«t|j«d|¬«|j_ d}|�!|j«|j«yy#|�!|j«|j«wwxYw)NrPF)r„r…r†r‡Úuniversal_newlinesrˆÚwb)Ú buffering) Ú subprocessÚPIPEr2rTrUr�Ú socketpairÚPopenÚ_procr1r Údetachr…) r+rVr„r…r†r‡rˆr‰Ústdin_ws rÚ_startz_UnixSubprocessTransport._start+sÝ€ØˆØ ”J—O‘OÒ #¬¯ © ×(?Ñ(?ÀÔ(Fô $×.Ñ.Ó0‰NˆE�7ð Ü#×)Ñ)ØðEØ!¨°vÀfØ#(°'ñEà=CñEˆDŒJðÐ"Ø— ‘ ” Ü#'¨¯©Ó(8¸$È'Ô#R�— ‘ Ô Ø�àÐ"Ø— ‘ ” Ø— ‘ •ð#øˆwÐ"Ø— ‘ ” Ø— ‘ •ð#ús Á A!CÃ%C7N)rérêrërˆrrrr|r|)s„ó rr|cóB—eZdZdZd d„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z y) raHAbstract base class for monitoring child processes. Objects derived from this class monitor a collection of subprocesses and report their termination or interruption by a signal. New callbacks are registered with .add_child_handler(). Starting a new process must be done within a 'with' block to allow the watcher to suspend its activity until the new process if fully registered (this is needed to prevent a race condition in some implementations). Example: with watcher: proc = subprocess.Popen("sleep 1") watcher.add_child_handler(proc.pid, callback) Notes: Implementations of this class must be thread-safe. Since child watcher objects may catch the SIGCHLD signal and call waitpid(-1), there should be only one active object per process. Ncó\—|jtk7rtjddd¬«yy)NrúP{name!r} is deprecated as of Python 3.12 and will be removed in Python {remove}.©éé©r²)rêrér6Ú _deprecated)Úclss rÚ__init_subclass__z&AbstractChildWatcher.__init_subclass__Xs,€Ø �>‰>œXÒ %Ü × Ñ Ð!7ð;à%,ö .ð &rcó—t«‚)aRegister a new child handler. Arrange for callback(pid, returncode, *args) to be called when process 'pid' terminates. Specifying another callback for the same process replaces the previous handler. Note: callback() must be thread-safe. ©ÚNotImplementedError©r+r�rUrVs rr}z&AbstractChildWatcher.add_child_handler_s €ô"Ó#Ð#rcó—t«‚)z Removes the handler for process 'pid'. The function returns True if the handler was successfully removed, False if there was nothing to remove.r”©r+r�s rÚremove_child_handlerz)AbstractChildWatcher.remove_child_handlerjs €ô "Ó#Ð#rcó—t«‚)zÔAttach the watcher to an event loop. If the watcher was previously attached to an event loop, then it is first detached before attaching to the new loop. Note: loop may be None. r”©r+rs rÚ attach_loopz AbstractChildWatcher.attach_looprs €ô"Ó#Ð#rcó—t«‚)zlClose the watcher. This must be called to make sure that any underlying resource is freed. r”rs rr1zAbstractChildWatcher.close|s €ô "Ó#Ð#rcó—t«‚)zºReturn ``True`` if the watcher is active and is used by the event loop. Return True if the watcher is installed and ready to handle process exit notifications. r”rs rrzzAbstractChildWatcher.is_activeƒs €ô"Ó#Ð#rcó—t«‚)zdEnter the watcher's context and allow starting new processes This function must return selfr”rs rÚ __enter__zAbstractChildWatcher.__enter__Œs €ô"Ó#Ð#rcó—t«‚)zExit the watcher's contextr”©r+ÚaÚbÚcs rÚ__exit__zAbstractChildWatcher.__exit__’s €ä!Ó#Ð#r)ÚreturnN) rérêrërìr’r}r™rœr1rzr r¦rrrrrAs/„ñó,.ò $ò$ò$ò$ò$ò$ó $rrcó@—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z y ) ra6Child watcher implementation using Linux's pid file descriptors. This child watcher polls process file descriptors (pidfds) to await child process termination. In some respects, PidfdChildWatcher is a "Goldilocks" child watcher implementation. It doesn't require signals or threads, doesn't interfere with any processes launched outside the event loop, and scales linearly with the number of subprocesses launched by the event loop. The main disadvantage is that pidfds are specific to Linux, and only work on recent (5.3+) kernels. có—|Sr rrs rr zPidfdChildWatcher.__enter__£ó€Øˆ rcó—yr r)r+Úexc_typeÚ exc_valueÚ exc_tracebacks rr¦zPidfdChildWatcher.__exit__¦ó€Ø rcó—yrFrrs rrzzPidfdChildWatcher.is_active©rorcó—yr rrs rr1zPidfdChildWatcher.close¬r¯rcó—yr rr›s rrœzPidfdChildWatcher.attach_loop¯r¯rcó–—tj«}tj|«}|j ||j ||||«yr )rÚget_running_loopr!Ú pidfd_openrýÚ_do_wait)r+r�rUrVrÚpidfds rr}z#PidfdChildWatcher.add_child_handler²s:€Ü×&Ñ&Ó(ˆÜ— ‘ ˜cÓ"ˆØ ×ј § ¡ ¨s°E¸8ÀTÕJrcó$—tj«}|j|« tj|d«\}}t |«}tj|«|||g|¢­Žy#t $rd}tjd|«YŒCwxYw)NréÿzJchild process pid %d exit status already read: will report returncode 255) rr´rr!Úwaitpidr"ÚChildProcessErrorrrdr1) r+r�r·rUrVrÚ_r$r‘s rr¶zPidfdChildWatcher._do_wait·s‰€Ü×&Ñ&Ó(ˆØ ×јEÔ"ð 8ÜŸ ™  3¨Ó*‰IˆAˆvô0°Ó7ˆJä �‰�ŒÙ��jÐ( 4Ô(øô!ò ðˆJÜ �N‰Nð.àö ð  ús§A+Á+!BÂBcó—yrFrr˜s rr™z&PidfdChildWatcher.remove_child_handlerÊó€ðrN) rérêrërìr r¦rzr1rœr}r¶r™rrrrr—s0„ñ òò òò ò òKò )ó&rrcó6—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z y) ÚBaseChildWatchercó —d|_i|_yr )ròÚ _callbacksrs rr)zBaseChildWatcher.__init__Ós€ØˆŒ ؈�rcó&—|jd«yr )rœrs rr1zBaseChildWatcher.close×s€Ø ×јÕrcóV—|jduxr|jj«Sr )ròÚ is_runningrs rrzzBaseChildWatcher.is_activeÚs#€Ø�z‰z Ð%ÒA¨$¯*©*×*?Ñ*?Ó*AÐArcó—t«‚r r”)r+Ú expected_pids rÚ _do_waitpidzBaseChildWatcher._do_waitpidÝó €Ü!Ó#Ð#rcó—t«‚r r”rs rÚ_do_waitpid_allz BaseChildWatcher._do_waitpid_allàrÉrcó^—|j�(|€&|jrtjdt«|j�)|jj t j«||_|�;|jt j|j«|j«yy)NzCA loop is being detached from a child watcher with pending handlers) ròrÂr6r7ÚRuntimeWarningr5rIÚSIGCHLDrZÚ _sig_chldrËr›s rrœzBaseChildWatcher.attach_loopãs†€ð �:‰:Ð ! d l°t·²Ü �M‰Mð=äô ð �:‰:Ð !Ø �J‰J× ,Ñ ,¬V¯^©^Ô <àˆŒ Ø Ð Ø × #Ñ #¤F§N¡N°D·N±NÔ Cð × Ñ Õ "ð rcó¬— |j«y#ttf$r‚t$r(}|jj d|dœ«Yd}~yd}~wwxYw)Nú$Unknown exception in SIGCHLD handler)r@rA)rËr€r�r‚ròrCrGs rrÏzBaseChildWatcher._sig_chld÷sX€ð Ø × Ñ Õ "øÜÔ-Ð.ò Ø Üò ð �J‰J× -Ñ -ØAØ ñ/÷ ñ ûð  ús‚“A«AÁAN) rérêrër)r1rzrÈrËrœrÏrrrrÀrÀÑs&„òòòBò$ò$ò#ó( rrÀcóP‡—eZdZdZˆfd„Zˆfd„Zd„Zd„Zd„Zd„Z d„Z d „Z ˆxZ S) rad'Safe' child watcher implementation. This implementation avoids disrupting other code spawning processes by polling explicitly each process in the SIGCHLD handler instead of calling os.waitpid(-1). This is a safe solution but it has a significant overhead when handling a big number of children (O(n) each time SIGCHLD is raised) cóR•—t‰|�«tjddd¬«y)Nrr‹rŒr�)r(r)r6r�©r+r-s €rr)zSafeChildWatcher.__init__s'ø€Ü ‰ÑÔÜ×ÑÐ/ð;à%,ö .rcóV•—|jj«t‰|� «yr )rÂr9r(r1rÔs €rr1zSafeChildWatcher.closesø€Ø �‰×ÑÔÜ ‰‰ �rcó—|Sr rrs rr zSafeChildWatcher.__enter__rªrcó—yr rr¢s rr¦zSafeChildWatcher.__exit__r¯rcóH—||f|j|<|j|«yr )rÂrÈr–s rr}z"SafeChildWatcher.add_child_handler"s%€Ø (¨$Ð/ˆ�‰˜Ñð ×јÕrcó>— |j|=y#t$rYywxYw©NTF©rÂr`r˜s rr™z%SafeChildWatcher.remove_child_handler(ó(€ð Ø—‘ Ð$ØøÜò Ùð úó ‚ � ›cóZ—t|j«D]}|j|«Œyr ©r4rÂrÈr˜s rrËz SafeChildWatcher._do_waitpid_all/s#€ä˜Ÿ™Ö(ˆCØ × Ñ ˜SÕ !ñ)rcó— tj|tj«\}}|dk(ryt|«}|jj «rt jd||« |jj|«\}}|||g|¢­Žy#t$r|}d}t jd|«YŒOwxYw#t$r7|jj «rt jd|d¬«YyYywxYw)Nrú$process %s exited with returncode %sr¹ú8Unknown child process pid %d, will report returncode 255ú'Child watcher got an unexpected pid: %rTr>) r!rºÚWNOHANGr"ròrrr#r»rdrÂÚpopr`)r+rÇr�r$r‘rUrVs rrÈzSafeChildWatcher._do_waitpid4sñ€ð 7ÜŸ*™* \´2·:±:Ó>‰KˆC�ð�aŠxàä/°Ó7ˆJØ�z‰z×#Ñ#Ô%Ü— ‘ ÐCØ)¨:õ7ð -Ø!Ÿ_™_×0Ñ0°Ó5‰NˆH�dñ �S˜*Ð , tÔ ,øô7!ò ðˆC؈JÜ �N‰NØJØö ð  ûô(ò 3ð�z‰z×#Ñ#Ô%Ü—‘ÐHØ"¨T÷3ñ&ð 3ús#‚'BÁ-B?Â#B<Â;B<Â?;C?Ã>C?) rérêrërìr)r1r r¦r}r™rËrÈrírîs@rrrs0ø„ñô.ôòò òò ò"ö -rrcóJ‡—eZdZdZˆfd„Zˆfd„Zd„Zd„Zd„Zd„Z d„Z ˆxZ S) raW'Fast' child watcher implementation. This implementation reaps every terminated processes by calling os.waitpid(-1) directly, possibly breaking other code spawning processes and waiting for their termination. There is no noticeable overhead when handling a big number of children (O(1) each time a child terminates). có •—t‰|�«tj«|_i|_d|_tjddd¬«y)Nrrr‹rŒr�) r(r)Ú threadingÚLockÚ_lockÚ_zombiesÚ_forksr6r�rÔs €rr)zFastChildWatcher.__init__asCø€Ü ‰ÑÔÜ—^‘^Ó%ˆŒ ؈Œ ؈Œ Ü×ÑÐ/ð;à%,ö .rcóŠ•—|jj«|jj«t‰|�«yr )rÂr9rër(r1rÔs €rr1zFastChildWatcher.closeks,ø€Ø �‰×ÑÔØ � ‰ ×ÑÔÜ ‰‰ �rcót—|j5|xjdz c_|cddd«S#1swYyxYw)Nr)rêrìrs rr zFastChildWatcher.__enter__ps$€Ø �Z‹ZØ �KŠK˜1Ñ �Kà÷�ZŠZús�.®7có>—|j5|xjdzc_|js |js ddd«yt|j«}|jj «ddd«t j d«y#1swYŒ xYw)Nrz5Caught subprocesses termination from unknown pids: %s)rêrìrërOr9rrd)r+r£r¤r¥Úcollateral_victimss rr¦zFastChildWatcher.__exit__vsp€Ø �Z‹ZØ �KŠK˜1Ñ �Kà�{Š{ $§-¢-Ø÷ ˆZô "% T§]¡]Ó!3Ð Ø �M‰M× Ñ Ô !÷ô �‰Ø CØ õ ÷ˆZús�/BÁ/BÂBcóä—|j5 |jj|«} ddd«||g|¢­Žy#t$r||f|j|<Yddd«ywxYw#1swYŒ¾A#ÁA&Á"A#Á#A&Á&A/có>— |j|=y#t$rYywxYwrÚrÛr˜s rr™z%FastChildWatcher.remove_child_handler’rÜrÝcó’— tjdtj«\}}|dk(ryt|«}|j 5 |j j|«\}}|jj«rtjd||« ddd«€tjd||«n |||g¢­ŽŒÄ#t$rYywxYw#t$r\|jrK||j|<|jj«rtjd||«Yddd«�Œ4d}YŒ wxYw#1swYŒ¥xYw)Nr@rráz,unknown process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %d)r!rºrär"r»rêrÂråròrrr#r`rìrërd)r+r�r$r‘rUrVs rrËz FastChildWatcher._do_waitpid_all™s8€ðð <Ü Ÿj™j¨¬R¯Z©ZÓ8‘ ��Vð ˜!’8àä3°FÓ;� à—“ð6Ø%)§_¡_×%8Ñ%8¸Ó%=‘N�H˜dð—z‘z×+Ñ+Ô-ÜŸ ™ Ð%KØ%(¨*õ6÷!ð&ÐÜ—‘ðØ # Zõ1ñ˜˜jÐ0¨4Ó0ðKøô%ò áð ûô ò $à—{’{à-7˜Ÿ ™  cÑ*ØŸ:™:×/Ñ/Ô1Ü"ŸL™Lð*>à),¨jô:ð!÷‘ð $’Hð $ú÷�úsNƒ'CÁD=Á CÁ'2D=à CÃCÃAD:Ä*D=Ä5D:Ä7D=Ä9D:Ä:D=Ä=E) rérêrërìr)r1r r¦r}r™rËrírîs@rrrWs+ø„ñô.ôò ò  ò )òö(1rrcóR—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zy )ra~A watcher that doesn't require running loop in the main thread. This implementation registers a SIGCHLD signal handler on instantiation (which may conflict with other code that install own handler for this signal). The solution is safe but it has a significant overhead when handling a big number of processes (*O(n)* each time a SIGCHLD is received). cóP—i|_d|_tjddd¬«y)Nrr‹rŒr�)rÂÚ_saved_sighandlerr6r�rs rr)zMultiLoopChildWatcher.__init__×s*€ØˆŒØ!%ˆÔÜ×ÑÐ4ð;à%,ö .rcó—|jduSr )rörs rrzzMultiLoopChildWatcher.is_activeßs€Ø×%Ñ%¨TÐ1Ð1rcóZ—|jj«|j€ytjtj «}||j k7rtjd«d|_ytjtj |j«d|_y)Nz+SIGCHLD handler was changed by outside code) rÂr9rörIÚ getsignalrÎrÏrrd)r+rds rr1zMultiLoopChildWatcher.closeâsz€Ø �‰×ÑÔØ × !Ñ !Ð )Ø ä×"Ñ"¤6§>¡>Ó2ˆØ �d—n‘nÒ $Ü �N‰NÐHÔ Ið"&ˆÕô �M‰Mœ&Ÿ.™.¨$×*@Ñ*@Ô AØ!%ˆÕrcó—|Sr rrs rr zMultiLoopChildWatcher.__enter__îrªrcó—yr r©r+r¬Úexc_valÚexc_tbs rr¦zMultiLoopChildWatcher.__exit__ñr¯rcór—tj«}|||f|j|<|j|«yr )rr´rÂrÈ)r+r�rUrVrs rr}z'MultiLoopChildWatcher.add_child_handlerôs5€Ü×&Ñ&Ó(ˆØ $ h°Ð5ˆ�‰˜Ñð ×јÕrcó>— |j|=y#t$rYywxYwrÚrÛr˜s rr™z*MultiLoopChildWatcher.remove_child_handlerûrÜrÝcó8—|j�ytjtj|j«|_|j€*t j d«tj |_tjtjd«y)NzaPrevious SIGCHLD handler was set by non-Python code, restore to default handler on watcher close.F)rörIrÎrÏrrdrcrQr›s rrœz!MultiLoopChildWatcher.attach_loopso€ð × !Ñ !Ð -Ø ä!'§¡¬v¯~©~¸t¿~¹~Ó!NˆÔØ × !Ñ !Ð )Ü �N‰NðJô Kä%+§^¡^ˆDÔ "ô ×ÑœFŸN™N¨EÕ2rcóZ—t|j«D]}|j|«Œyr rßr˜s rrËz%MultiLoopChildWatcher._do_waitpid_alls#€Ü˜Ÿ™Ö(ˆCØ × Ñ ˜SÕ !ñ)rcó*— tj|tj«\}}|dk(ryt|«}d} |jj|«\}}}|j«rt j d||«y|r'|j«rt jd||«|j|||g|¢­Žy#t$r|}d}t j d|«d}YŒ®wxYw#t$rt j d|d¬ «YywxYw) NrTr¹râFú%Loop %r that handles pid %r is closedrárãr>)r!rºrär"r»rrdrÂråÚ is_closedrr#rŽr`) r+rÇr�r$r‘Ú debug_logrrUrVs rrÈz!MultiLoopChildWatcher._do_waitpids €ð ÜŸ*™* \´2·:±:Ó>‰KˆC�ð�aŠxàä/°Ó7ˆJ؈Ið LØ#'§?¡?×#6Ñ#6°sÓ#;Ñ ˆD�(˜Dð�~‰~ÔÜ—‘ÐFÈÈcÕRá §¡Ô!1Ü—L‘LÐ!GØ!-¨zô;à)�×)Ñ)¨(°C¸ÐKÀdÔKøô=!ò ðˆC؈JÜ �N‰NØJØô ðŠIð ûô$ò /ô �N‰NÐDب÷ /ð /ús"‚'C½C.Ã%C+Ã*C+Ã.!DÄDcó�— |j«y#ttf$r‚t$rt j dd¬«YywxYw)NrÑTr>)rËr€r�r‚rrd)r+rrs rrÏzMultiLoopChildWatcher._sig_chld<sE€ð RØ × Ñ Õ "øÜÔ-Ð.ò Ø Üò RÜ �N‰NÐAÈD× Qð Rús‚“/AÁAN)rérêrërìr)rzr1r r¦r}r™rœrËrÈrÏrrrrrÄsA„ñ ò$.ò2ò &òò òòò3ò""ò#LóJRrrcód—eZdZdZd„Zd„Zd„Zd„Zd„Ze jfd„Z d„Z d „Z d „Zd „Zy ) raAThreaded child watcher implementation. The watcher uses a thread per process for waiting for the process finish. It doesn't require subscription on POSIX signal but a thread creation is not free. The watcher has O(1) complexity, its performance doesn't depend on amount of spawn processes. cóF—tjd«|_i|_yrá)Ú itertoolsrÉÚ _pid_counterÚ_threadsrs rr)zThreadedChildWatcher.__init__Rs€Ü%ŸO™O¨AÓ.ˆÔ؈� rcó—yrFrrs rrzzThreadedChildWatcher.is_activeVrorcó—yr rrs rr1zThreadedChildWatcher.closeYr¯rcó—|Sr rrs rr zThreadedChildWatcher.__enter__\rªrcó—yr rrüs rr¦zThreadedChildWatcher.__exit___r¯rcóÌ—t|jj««D�cgc]}|j«r|‘Œ}}|r||j›d�t |¬«yycc}w)Nz0 has registered but not finished child processesr/)r4r ÚvaluesÚis_aliver-r8)r+r9ÚthreadÚthreadss rr:zThreadedChildWatcher.__del__bse€Ü(,¨T¯]©]×-AÑ-AÓ-CÔ(Dó)Ñ(D˜fØ—o‘oÔ'òÐ(Dˆð)á Ù �T—^‘^Ð$Ð$TÐUÜ!Øö ð ùò)s¦A!cóä—tj«}tj|jdt |j «›�||||fd¬«}||j|<|j«y)Nzasyncio-waitpid-T)ÚtargetÚnamerVÚdaemon) rr´rèÚThreadrÈÚnextr r Ústart)r+r�rUrVrrs rr}z&ThreadedChildWatcher.add_child_handlerjsf€Ü×&Ñ&Ó(ˆÜ×!Ñ!¨×)9Ñ)9Ø)9¼$¸t×?PÑ?PÓ:QÐ9RÐ'SØ(,¨c°8¸TÐ'BØ)-ô/ˆð$ˆ� ‰ �cÑØ� ‰ �rcó—yrFrr˜s rr™z)ThreadedChildWatcher.remove_child_handlersr¾rcó—yr rr›s rrœz ThreadedChildWatcher.attach_loopyr¯rcó — tj|d«\}}t|«}|j«rt j d||« |j«rt jd||«n|j|||g|¢­Ž|jj|«y#t $r|}d}t jd|«YŒ~wxYw)Nrrár¹râr) r!rºr"rrr#r»rdrrŽr rå)r+rrÇrUrVr�r$r‘s rrÈz ThreadedChildWatcher._do_waitpid|s¼€ð 7ÜŸ*™* \°1Ó5‰KˆC�ô0°Ó7ˆJØ�~‰~ÔÜ— ‘ ÐCØ)¨:õ7ð �>‰>Ô Ü �N‰NÐBÀDÈ#Õ Nà %ˆD× %Ñ % h°°ZÐ GÀ$Ó Gà � ‰ ×ј,Õ'øô'!ò ðˆC؈JÜ �N‰NØJØö ð  ús‚B'Â'#C à C N)rérêrërìr)rzr1r r¦r6r7r:r}r™rœrÈrrrrrEsB„ñ òòò òò ð%ŸM™Móòòò  ó(rrcóÀ—ttd«sy tj«}tjtj|d««y#t $rYywxYw)NrµFrT)Úhasattrr!Úgetpidr1rµrM)r�s rÚ can_use_pidfdr#–sO€Ü ”2�|Ô $ØðÜ�i‰i‹kˆÜ �‰”—‘˜s AÓ&Ô'ð øô òáðús“=AÁ AÁAcóB‡—eZdZdZeZˆfd„Zd„Zˆfd„Zd„Z d„Z ˆxZ S)Ú_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.có0•—t‰|�«d|_yr )r(r)Ú_watcherrÔs €rr)z$_UnixDefaultEventLoopPolicy.__init__¦sø€Ü ‰ÑÔØˆ� rcó¸—tj5|j€)t«rt «|_nt «|_ddd«y#1swYyxYwr )rrêr'r#rrrs rÚ _init_watcherz)_UnixDefaultEventLoopPolicy._init_watcherªs6€Ü �\‹\Ø�}‰}Ð$Ü ”?Ü$5Ó$7�D•Mä$8Ó$:�D”M÷ �\‰\ús ‘6AÁAcóÆ•—t‰|�|«|j�Etj«tj «ur|jj |«yyy)zÑSet the event loop. As a side effect, if a child watcher was set before, then calling .set_event_loop() from the main thread will call .attach_loop(loop) on the child watcher. N)r(Úset_event_loopr'rèÚcurrent_threadÚ main_threadrœ)r+rr-s €rr+z*_UnixDefaultEventLoopPolicy.set_event_loop²sSø€ô ‰Ñ˜tÔ$à �M‰MÐ %Ü×(Ñ(Ó*¬i×.CÑ.CÓ.EÑEØ �M‰M× %Ñ % dÕ +ðFð &rcó‚—|j€|j«tjddd¬«|jS)z~Get the watcher for child processes. If not yet set, a ThreadedChildWatcher object is automatically created. ryr‹rŒr�)r'r)r6r�rs rryz-_UnixDefaultEventLoopPolicy.get_child_watcherÀs@€ð �=‰=Ð Ø × Ñ Ô ä×ÑÐ0ð:ØBIõ Kð�}‰}ÐrcóŽ—|j�|jj«||_tjddd¬«y)z$Set the watcher for child processes.NÚset_child_watcherr‹rŒr�)r'r1r6r�)r+rŠs rr0z-_UnixDefaultEventLoopPolicy.set_child_watcherÍs?€ð �=‰=Ð $Ø �M‰M× Ñ Ô !àˆŒ Ü×ÑÐ0ð:ØBIö Kr) rérêrërìr&Ú _loop_factoryr)r)r+ryr0rírîs@rr%r%¢s%ø„ÙDØ*€Môò;ô ,ò ö Krr%)4rìrSrÂr r!rrIr�r¯r�r2rèr6Úrrrrrr r r r r ÚlogrÚ__all__rTÚ ImportErrorrr"ÚBaseSelectorEventLoopr&Ú ReadTransportrjÚ_FlowControlMixinÚWriteTransportrrÚBaseSubprocessTransportr|rrrÀrrrrr#ÚBaseDefaultEventLoopPolicyr%rrrrrÚr<seðÙ8ã Û ÛÛ ÛÛ Û Û ÛÛ ÛÛåÝÝÝÝÝÝÝÝÝÝð €ð‡<�<�7ÒÙ ÐCÓ DÐDò ò ôP"˜_×BÑBôP"ôf M˜Z×5Ñ5ôMô`J˜j×:Ñ:Ø(×7Ñ7ôJôZ ˜×FÑFô ÷0S$ñS$ôl7Ð,ô7ôt2Ð+ô2ôjN-Ð'ôN-ôbj1Ð'ôj1ôZ~RÐ0ô~RôBO(Ð/ôO(òb ô6K &×"CÑ"Cô6Kðr+ÐØ4Ñr