rust p#rustc 1.98.1 (48a229cea 2026-09-01)Á‰m6GÞ­n6ÇèÆ2-64f5f36fb0927694ÁûÊÆÍRLñ.åSÛAúwjL-df1bddb45adbe94bÁ«ª1Úë• ¢›ºXÝÓrŽ*-1ad4f876c768bda9Á±ò‰<å%Z‰>¸64‡ËV`-2d2ab9fb0fe1def5Á»ÄóG Øg{ë(3íi«F×-06449a08aaab5e30Árustc_std_workspace_coreÁ€û{ù`ä"Ei¥€ÞÏ%G-cb0d4d77988d81b5Áó"Æ)ΉÉðÛÕpEÍ—E-3ec41d3a5a80a4a4Á miniz_oxideÁÐ8°ø‚ðbž Lƨ°J-e44eaef1807e5fc0Áadler2Á9lí©yA6P/D$UBŸ-dca52f01a59c33e7Á hashbrownÁ™¸ÈXó®÷ …ùý{e-143c77bb957d9940Árustc_std_workspace_allocÁð…¨À �¶÷Üúò·_z%í-145a318e0772276cÁ std_detectÁK(ƒ0ì*ãÛ8²D?-f99feda5ce9e492aÁrustc_demangleÁµ%jŽeårVŠÕÓ•-cfd0ab54bb33760eÁcfg_ifÁÍ}λ—©ŒÕž§C•×o-360da4ba13154744Á addr2lineÁ‹c²ŽúY\ÈGÞö÷ö--09755979c57b7e64ÁgimliÁ¢±QÄÍ`ª§DÞåù¬y-9a1fede77fbbf2f0ÁobjectÁö‚F λâËvú.zËí-7ff85ea729a864ffÁmemchrÁž˜]²1<õ¶=U�ý�Où-0e3477fb2664a277Á  ÿŽ—jl‹®¾To–K™G-549498e8b2e4d924Á»­±IÌûA?ø{M‹�»såÉ-9f1a384f463628fcÁ RawFdÁ,KÌ$>4=Í$í—Í$â—impÁáÉ<¼�žÌ$ôÉ<ú|ó¤ïÍ$¶ÂÍ$«Â‰ errorÁ î ¦ ñ sourceÁ�     -˜ .BUFFERÁ/ / -mkÁ2 -openÁ- from_fifoÁ5 5 7 - from_pipeÁ9 9 -from_fdsÁ-acquireÁ-acquire_allow_interruptsÁ- try_acquireÁ-releaseÁ@ - string_argÁ- availableÁ- configureÁD  spawn_helperÁFF USR1_INITÁF F J LjoinÁM  fcntl_checkÁfd_checkÁclone_fd_and_set_cloexecÁQ  set_cloexecÁset_nonblockingÁcvtÁsigusr1_handlerÁWdrop_without_releasingÁ    ]new_okÁ]new_errÁ`˜ ` from_env_extÁb c b `from_envÁ`¿ `ì h `¡ `± `configure_makeÁ` mflags_envÁ`into_helper_threadÁn‚` acquire_rawÁ` release_rawÁrõt request_tokenÁvõxlockÁy xfor_each_requestÁ{impl FnMut(&HelperState)Á{ find_jobserver_authÁ~  ~   FromEnvErrorÁ‚innerÁ „ñ FromEnvErrorKindÁ†NoEnvVarÁ‡ † NoJobserverÁ‰ † CannotParseÁ‹ †CannotOpenPathÁ� † CannotOpenFdÁ� † NegativeFdÁ‘ †NotAPipeÁ“ † UnsupportedÁ•  —ñ FromEnvErrorInnerÁ™�𠙤œ ™¼ž žó™Ô¡ ¡ó¡ô™ï¥ ¥ó¥ô™ˆ© ©ó™Ÿ¬ ¬ó¬ô™´°  ²ñClientCreationArgÁ´FdsÁµreadÁµwriteÁ´FifoÁ¸ ¸ó»ñd½Ç½Ó½ creation_argÁ½is_non_blockingÁÂñAcquiredÁÄbyteÁÆñHelperÁÈÕȃËñdÍßÏŽÑñÑÓ‹ÓdataÁÓdisabledÁ ×ñ HelperStateÁÙÜÙcvarÁ Ü> Þñ HelperInnerÁàrequestsÁà producer_doneÁà consumer_doneÁ ä> æñFromEnvÁè‹è’ëñ HelperThreadÁíßíƒðñ…8…8…8˜8˜8˜888888³8³8³8¼8¼8¼8Ã8Ã8Ã8Ç8Ç8Ç8485898=8>8?8@8@8B8C8D8D8Ì8Ì8Ì8Ð8Ò8Ò8Ò8Ø8Ø8Ø8ß8ß8ß8ç8ç8ç8ì8ì8ì8g8h8j8k8k8l8l8m8p8q8s8ñ8ñ8ñ8u8w8y8{8{8~8Ÿg‚‚˃ßv’äÐvÌŸg†‡ˆ�‰Š¤‹Œ¼�ŽÔ��ï‘’ˆ“”Ÿ•–´†fCw´y¤gÜ�ÜŸg™š›�œ�¤žŸ¼ ó¡¢Ô£ó¤ô¥¦ï§ó¨ô©ªˆ«ó¬­Ÿ®ó¯ô°±´OûaÞàt¿Ÿg´µ¼¶Ç·Ó¸¹àºó,:ðo0Ÿg½½d¾Ç¿ÓÀ›Á¯ñè�RÏFÈHŸgÄÄÑÅáÏ8TÀL<ŸgÈÈøÉÕʃÚ:ï�èê>Í…ÍÍdÎßœ�Œ:ãzŠŸg×$ŸgÓÓÑÔ‹Õ×Öã)Pß³[ÞúöÙÙþÚÜÛ™H‚ «Ϊ`ŸgÞ%öàà»áÎâÞãótB±aï´ÖŸg§&Ÿgèèžé‹ê’ø@…xÛtl€#”%ŸgííÈîßïƒðlxÌ`€#À'„‚—†²™»´Â½ÆÄËÈÑÍ×ÓÞÙæàëèðí‚‚ÏÍÜÙäàrÓvíŸg ˆ¤g[�…ö€#(ë  ø‘# ¿)Á (4 Ÿghm Ùg~ƒpu•ð…®ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwĤĤŤErrorÁ Ñâó:½ÖàM6 ÜA €g€gŠ‚gê ûcƒgbufÁûcØ«q¢1È¡ˆ¿)�¿)€†*ˆ  Á –Ô,žÀœÎÙÒ,†*Í *ë (Æ /6> ¿)Ê V^¿) s{ ¿)= �˜ ¿)Z ­µ¿)w ÊÒ ¿)” çï ¿)±   ¿)Ð %+ Êg=C L˘fã*r �}ó+…¿)�•Ÿœ­¸Ö/ (.»  /6 > ¿)KPÖ/\ a i(.˜"Ÿ°.Ÿ"ŸÅ™Ç™È™­É™Ê™àË™óG*¤�R{9 �7�7Æ*ž7½ Ù6wQ?mˆ!؆¿)¹†*¯»†*U[ égms ÷ ‡(.ƒ"ˆ÷1§° ¿)/;†*Úà çgòøq (.Ü!ï÷1p.ã!ïÖ2@I ¿)I†*?K†*ƒ‰Ô3–œ–� ¯0.²! ÔëIëIåìI–æ4È ª¬KÄñp.º! ÔÖ2 ¿)t  †*? K†*W]Ô3j p Á� ƒ0.–!¼¾6£¬ ¿)/ ; †*ÖÜÙ4éïl ý  ¿) Ö/-3 <BK ¿)Y_Ö/lr {.À ³•›¢©°·!ã*ÄÔ,Ìó+Ô¶0Ü¿)ä¿)ì ¾6n¿)ÿ†*~ ã:‰ã:e Ö2+¿)-†*€†*C ‘;N ÷1G‘;5¿)c†*_†*M´;U¿;ö¿)‹†* ¿;¿;8 ‘2)¿)¹†*S†*A �<L¿)Ü æœô__self_0Á�ò;a __self_1Á0 ò;*’<ò;Áò;ì’<ÞoÖ/y¿;†*À<†*Ô3�Š<†* Ù4�¿;†*™´;†*‡Ô3³ã:†*´;†*ÉÔ3Éþ:†*HÙ4×Ö/ÝÖ/ã(/þ#H/¶ àŸŸ BoxÁ£ó‹¤ô‹ljô²ßk#ù'ù'PathÁú'ßÒ%uÂHnìŽ MÅFÅFÆFGlobalÁ Ä› +ÉÑà è ¿)É Õ†*Ù4$ *9X/�¼÷1`/�¼÷1s| ¿)IQ ¿)\†*R Z ¿)e q  †*Üâ ÛgôúÁÆ ± ¶/ƒ¼17>ã*K ¶"Vó+^¶0f¿;/¿;¿)~¿)G†*O¿)=†*EŠ<M ¢?‡¿)¹†*— ŒD¢Öœäò;³’<¥ò;à §D†*õÙ4%¿;†*îŠ<†*ÜÊB;(0Î ¿)P0î  ¿)§B§BFileÁ¨BßéÏDǃÕ.{V†*X0þ  ¿) âE' †*ø0�   ¿) ¶"(  †*ø0â#  ¿)řǙș­É™Ê™àË™óG*¤�R{9 ÿ`ÿ`V�a¬â`½68ŸœRt™¥†*¢¨ ßg ºÀ°¶V\ + 1 ÿø0ÓÃã* �#)ó+1¿)9¿)+†*3 âE>¿)à†*èöIð¿)Á†*ɱCÑ¿)¡†*©  ¸G·ÃJ¿´œÂÍöI†*ÃöI†*e±C†*6ÁJ†*×H÷(1“  ¿)@1µ  ¿)'3†*[` *lq`eƒ1˜ Çœã*§ ä#±ó+¸¿)¿¿)°†*·  åKÄþLËêœ÷üL†*÷ *\¹ $º |åK€üŸ &/åKàM€L­ 3_Á€àM128Á€àM128ÁàM2Á(B“i ¿)°B³i ¿)ÁÁ JoinHandleÁÄó¦ B0ßf׷ܲ+c†*ðBÏi ¿) „K„KK‡Kí ä7ˆKphantomÁä7‰K«ä7ƒ¢3à6ú�Þ%•@v  ‚ †*#ÊB06&,¿ÄUB˜iÌo ã*{ ˜$†ó+Ž¿)–¿)ˆ†*� °O›¿)0†*8  £PF¾RNáœïú¡R†*ð¼R†*…ÊB¸G¥"„K„KK‡Kí ä7ˆKÁOä7‰K«ä7ƒ¢3à6ú��#•@^c †§St|(Gþ! ÍGƒ"Ð+×$6 ×$@§SÈ §SÒZdþSî(H…" ¿)¸H¥" ¿)§S'3†*[` *lq`eƒHŠ"Òœã*§ÑT®ó+µ¿)¼¿)­†*´ âT¾âTÅäœñûÝV†*ð *  (I�$ ¿)ÀI¯$ ¿)§S'†*˜IÍ$ ¿) ä#' †*pIæ$  ¿) &  2  †*ÈÍ ÝgÞãÒ×¥ª x } I’$Ø#ã*/ ”%:ó+B¿)J¿)<†*DâTL¿)†*%ÖL-¿)þ†*  ¶Z¨œ¶ÁâT†*·ÖL†*ˆ´Z†*YùXãÀJ ) ÷²6²6¨´6ß 6µ6poisonÁ 6¶6× 6M‹3àT—r§&hhJ¾) ÷„6„6CondvarÁ…6ß÷5Y’ÊÓaCóN8Jö( ÙJý(Ý.Þ%9ª[™\›O¤[“\±(Kÿ(  ¿)ÀK ) ¿)ª['†*hK¾) ¿) ™\'  3 †*’—ÊB£¨—œjoÄK„)ßÝ ã*è Þ%òó+ù¿)¿)ò†*ù ª[¿)Ô†*Û  ™\èð_ïEœS^Õ_†*Tî_†*%ÊBxxLƒ* ÷àM˜L˜* ÷˜L±*ø`8LÙ) àLà)å1§&<àM£†jVÕ`¿ø`¡ø`„ (Mâ)  ¿)xMƒ* ¿)àM'†*˜M˜*  ¿) & †*˜M±*   ¿) &  2  †*ÇÌùXØÝÌÑŸ¤ s xMç)çã*) §&4ó+<¿)D¿)6†*> àMI¿)†*"¶Z*¿)ü†*´Z ¶Z œ®¹õd†*¯¶Z†*€´Z†*RùXÛ(NÙ+  ¿)øNµ,( ¿)ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw×$Üz†*øNÔ-) !¿) řǙș­É™Ê™àË™óG*¤�R{9 ¿)øøOsStringÁùßÞ—Ÿ8b®ì®:¤  ° †*bhÊBu{kqíòšNÞ+ì´ ã*À û&Ëó+Ó¿)Û¿)͆*Õ ¾fà¿)^†*f  Ègt�j|&œ4?ói†*5Žj†*³ÊBY,‡� )1<DOWbj´˜�¤˜� ÷Þ% ü�� D�� é8Þ%E'$õ� ) ,û� lû�,�ž †£P - <�ž ‡ž  “ž \ŠžDŠž ¬‚D ).  ŸŸ °>£ó‹¤ô‹ljô²ßk#ˆ#ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw”%Ö2�#án²+ýÆ•@üã�3 ,Œã� F Ý � <W •ž ø¹ã�4  �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw˜$Ö2õ w|ˆ ›üã�4m˜$üÞ�: Å™˜$,¦žü¼�z íü¹�~ ÀœÀ'Ö2 ¼ž º–ž[ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¸Ä¬©^—¯fÖ2¯ˆ �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÀ'Ö2˜sî  $  ½ž'8Iüí›Ð¶ ÇÙ ê ¯ÀÒn�üƒ�ºíôû�•tÄ™œ×$$Šœöm �œ£PGÞ%ØÀ'„řǙș­É™Ê™àË™óG*¤�R{9 ˜$üÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^˜s˜$ëpž×$B£P¾Ršn­ŸŸ °>£ó‹¤ô‹ljô²ßk#öm•@ööm"¶0c˜sk˜$þ£PÑÚᛢˆœŒƒ×Æ ÉŽ`Žïk‹˜ljˆmþðm�‘yšn¥‡p¼åp;�tA£P%£P+£P1£P„×$ŠömC×$I(Q¤§ " ¿)ÐQʧ ¿)Äw(†*¸Qê§ ¿) £P(  4 †*•šÊB¦«™žkpÇQ©§ñá ã*ì À'öó+ý¿)¿)õ†*ü Äw¿)Ö†*ݼRä¾RëCœQ\ã}†*Q¼R†*!ÊBv\Š! ™Ÿ'Á 2¾69@t£! ™¢*Á 5¾6<Ö2CJdÏ! ™¦*Á 5÷1<Ö2CJTø! ™ª'Á 2÷19@D�" ™­*Á 5÷1<‘2CJ$± ´¹'¶"2¢?9@ ~ÍÓÙàè퉔‰û”¡›gDœøioÁ¯‰CommandÁ<Åá)KÞ„K£[<ã„6 ¨,ì²6 ©Tó›R ׌Ô*™YËd÷*‚[÷„…+†\üèÔü0- An implementation of the GNU make jobserver.Á1�ü5MJ This crate is an implementation, in Rust, of the GNU `make` jobserver forÁüƒNK CLI tools that are interoperating with make or otherwise require some formÁüÒJG of parallelism limiting across process boundaries. This was originallyÁü�LI written for usage in Cargo to both (a) work when `cargo` is invoked fromÁüêMJ `make` (using `make`'s jobserver) and (b) work when `cargo` invokes buildÁü¸IF scripts, exporting a jobserver implementation for `make` processes toÁ¬‚ transitively use.Á˜�üœJG The jobserver implementation can be found in [detail online][docs] butÁüçFC basically boils down to a cross-process semaphore. On Unix this isÁü®LI implemented with the `pipe` syscall and read/write ends of a pipe and onÁüûLI Windows this is implemented literally with IPC semaphores. Starting fromÁüÈOL GNU `make` version 4.4, named pipe becomes the default way in communicationÁü˜MJ on Unix. This crate also supports that feature in the sense of inheritingÁüæ+( and forwarding the correct environment.Á’�ü–NK The jobserver protocol in `make` also dictates when tokens are acquired toÁüåNK run child work, and clients using this crate should take care to implementÁü´ EB such details to ensure correct interoperation with `make` itself.Áú �|þ  ## ExamplesÁŽ �ü’ LI Connect to a jobserver that was set up by `make` or a different process:Áß �lã  ```no_runÁÔñ  use jobserver::Client;ÁŒ �ü� 52 // See API documentation for why this is `unsafe`ÁüÆ 63 let client = match unsafe { Client::from_env() } {Áüý  Some(client) => client,Áü� 0- None => panic!("client not configured"),Á4Î  };Á<Õ  ```ÁÝ �üá /, Acquire and release token from a jobserver:Á‘ �l• –�Ô£ ¬�¾ �ü 85 let client = unsafe { Client::from_env().unwrap() };Áüû JG let token = client.acquire().unwrap(); // blocks until it is availableÁüÆ<9 drop(token); // releases the token when the work is doneÁ<ƒÌ’‹�ü�HE Create a new jobserver and configure a child process to have access:ÁØ�<ÜÌ’ôä use std::process::Command;ÁÔƒ¬�ž�ü¢EB let client = Client::new(4).expect("failed to create jobserver");Áüè'$ let mut cmd = Command::new("make");Áü� client.configure(&mut cmd);Á<°Ì’¸�t¼ ## CaveatsÁË�üÏHE This crate makes no attempt to release tokens back to a jobserver onÁü˜MJ abnormal exit of a process. If a process which acquires a token is killedÁüæOL with ctrl-c or some similar signal then tokens will not be released and theÁü¶(% jobserver may be in a corrupt state.Áß�üãOL Note that this is typically ok as ctrl-c means that an entire build processÁü³?< is being torn down, but it's worth being aware of at least!Áó�´÷ ## Windows caveatsÁŽ�ü’MJ There appear to be two implementations of `make` on Windows. On MSYS2 oneÁüàMJ typically comes as `mingw32-make` and the other as `make` itself. I'm notÁü®PM personally too familiar with what's going on here, but for jobserver-relatedÁüÿIF information the `mingw32-make` implementation uses Windows semaphoresÁüÉOL whereas the `make` program does not. The `make` program appears to use fileÁü™JG descriptors and I'm not really sure how it works, so this crate is notÁüäFC compatible with `make` on Windows. It is, however, compatible withÁœ« `mingw32-make`.Á¿�üÃKH [docs]: https://make.mad-scientist.net/papers/jobserver-implementation/ÁüÆ8https://docs.rs/jobserver/0.1ÁlÍ ~ÍÓÙàèí‰Á”Âû”Ô¡›gÂø–‚À‰«‚¹á)K¸„K£[·„6 ¨¶²6 ©µ›R ×´™Y˳‚[÷²†\¥¨«D„¢”’„<ªv¬·cLÒX[KN>A14L�,… ‚†™T Ì$d, ÷1ŒŠ Üü¾ &¼¢  Get the error kind.Á$Å ø øÜ�Bÿ Ê  $Ë üŠ'Ü¥gü¸B»ùúû ùÜ ú€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡ûã*Bÿ ¿ $Àœ Æü˜'Ü‚üÆ>4Éü üÜřǙș­É™Ê™àË™óG*¤�R{9  ü�Bÿ Ð $Ñ<­Ì$’dŒ±FOPQSTUV´½ÄÈc_intÁ, –‡×Œ™YìD$>§B OpenOptionsÁ\D³B–‚$`‰ReadÁ$fçWriteÁ,l� ˜ }ô MaybeUninitÁ\�ý­í>$Ëù'!«‚<ãá)" AtomicBoolÁTЇa%²D–“�&K¥„K'Õ$¿¦)BuilderÁ<Åý@*¾NTÎÁ+DurationÁDêȲ,OsStrExtÁEÝ.ÍD OsStringExtÁ]ç.ÇD DirEntryExtÁ]Ô.¸E FileExtÁ=Ç.ìD FileTypeExtÁ]°.®E MetadataExtÁ]½.ŒE OpenOptionsExtÁuÊ.†E PermissionsExtÁuÚ.þD AsFdÁ%Ë.„$ AsRawFdÁ=Ñ.¢# BorrowedFdÁUÚ.®L FromRawFdÁMæ.¤# IntoRawFdÁMñ.¦# OwnedFdÁ=ü.í# î-….¡# ChildExtÁEÿ.ÂI CommandExtÁUî.‘I ExitStatusExtÁmú.­I JoinHandleExtÁmí.ƒJ \»Ä®<4Ÿ¢ˆ‹´¡|À5¬Õ(Lð¼ð  üÿ\±ó4¶àãÓÖœßÂ\ �#.2459<=>?@BCDüÔ 2Û àMÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw�#Ö2Bÿ-- .limitÁ,ã ¼Ÿ 4¥ ˆN² àMÀ //àMü�$—¶´ÿ-- 2 Ð22àMüºY$ω ‰ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw�#Á ÿ- ×- 4© Ô check_pipeÁTÝü…BLˆŠ ŠÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwřǙș­É™Ê™àË™óG*¤�R{9 �#Á Bÿ- •- 5© ’÷5�6�6�6656÷1²+Á Uÿ²+¢5�7�7�7757²+ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwâEÁ Uÿ  ã?¿),®5�8�8�8858÷1Ö2Á Uÿ¿)ü‰[L“‹ ‹�¸ÿ-  - 9© �ζT¦ð!9�:�:�::9:÷1±ä±ä ParseIntErrorÁ²ä¦í°Ÿû™XE¶Á Uÿ²+‚#9�;�;�;;9;÷1Ú½²+üÎ77DØ7÷1÷1�#ÿ-- <Ç$á7Ó,î7üë9-<ò9Œ Œ�#ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwä#Ö2Bÿ- ú9- =$û9üÍ$ê<ü´Q9\»QŽ Ž�#“ÁBÿ- ÇQ- ?$ÈQüÛY@<âY�� ��#řǙș­É™Ê™àË™óG*¤�R{9  �ä#ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw²+Ö2Bÿ- êY- @$ëY×$ñYÆ\@�A�A�AA@A÷1ÖLåKUÿ²+üÕ^"TÜ^‘ ‘�#¾6Bÿ- ç^- B$è^üØ`,Lß`’ ’�#ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwàMÖ2Bÿ- é`- C$ê`üÙb*Làb“” “�# ”á)á)«‚â)߆)Òí&Kt¢²+Bÿ- êb- D$ëbcmdÁñb<ïgD�E�E�EEDE²+¡ÄUÿ÷1÷1üòi±d€j×$£PŸŸ °>£ó‹¤ô‹ljô²ßk#ˆ#án�#án²+ýÆ•@ëpBÿ‡p‹4’jƒ,­jœ Õj|Îk$Ùk´èkLïkì0ì0OnceÁí0ßæ0Ý´L·d‹ÍBÆlF�I�I�IIFI÷1²+²+Uÿ ‘2<³pF�J�J�JJFJ÷1¾Ì£P§SšnDÝpF�K�K�KKFK Þ%²+UÿâT šn\út˜$MŒŒu$“u˜$²+BÿLL M$˜u·�M�N�N�NNMN÷1Î8Î8 PoisonErrorÁÐ8×ã5mj1é¦Ý@›R›R©žRÜ 6ŸRÉZ 6R¤KíÊ6ç§&ÃRÃRÄRWaitTimeoutResultÁÅRó�+ æ!’yfÏëeîÏUÿ²+ü½„A\Ç„÷1ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw²+Á ÿ OfdÁÓ„üÁ†PDˆ÷1�Ñÿ P�ÑÔ†ζT߆ü«ŽIÄ®Ž÷1ñºBÿ Q�ÑÇŽ,«�Q�R�R�RRQR÷1¡¼¿;üÞ�6\á�÷1¡ÄBÿ S�Ñí�setÁø�üß“:|â“÷1¡ÄBÿ T�Ñò“®Óý“ü¸•%»•÷1ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw÷1Ö2Bÿ Uª ¿•üÏ–rã $Ç–4Æ–Œ½–|Ý–÷1 äLäL siginfo_tÁåLsi_signoÁæLsi_errnoÁçLsi_codeÁèL_padÁêL_alignÁ³I}p·±(¡I è5é5ê5 __variant1Áë5ì5 __variant2Á>�Xß'ö«²+@ÿ V_signumÁ<ò–_infoÁ,†—_ptrÁ$§—lù$”%Xüœ('ü�%MJ This drops the [`Acquired`] token without releasing the associated token.Áß%�üç%KH This is not generally useful, but can be helpful if you do not have theÁü·&FC ability to store an Acquired token but need to not yet release it.Á‚'�üŠ':7 You'll typically want to follow this up with a call toÁüÉ'NK [`Client::release_raw`] or similar to actually release the token later on.Á´£(”%²+BÿWW X$¾(ÄÍ*H,,ï*<,?,1,4,d‚.û&^_ü•.Q4˜.×$ ‘hû&Bÿ]] ^‹4Ÿ.var_nameÁD¯. var_valueÁLÇ.üÝ/[<à/Á ¥Ý‘hû&Bÿ]] _¦$è/ÉÜD�0ÙÜL™0\Å1×$abfghjklmnpqü×8.ü×1IF Creates a new jobserver initialized with the given parallelism limit.Á¥2�ü­2HE A client to the jobserver created will be returned. This client willÁüú2IF allow at most `limit` tokens to be acquired from it in parallel. MoreÁüÈ3HE calls to [`Client::acquire`] will cause the calling thread to block.Á•4�ü�4HE Note that the created [`Client`] is not automatically inherited intoÁüê4B? spawned child processes from this program. Manual usage of theÁü±5JG [`Client::configure`] function is required for a child process to haveÁÜ€6 access to a job server.Á 6�t¨6 # ExamplesÁ»6�<Ã6Ì’ÔÏ6¬�î6�üö6Eô–<À7Ì’Ì7�dÔ7 # ErrorsÁå7�üí7KH Returns an error if any I/O error happens when attempting to create theÁ¬½8 jobserver client.ÁÞ8àMÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw×$Ö2Bÿ`` až´,â8üúG7üé9DA Attempts to connect to the jobserver specified in this process'sÁ„²: environment.ÁÇ:�üÏ:LI When the a `make` executable calls a child process it will configure theÁü ;KH environment of the child to ensure that it has handles to the jobserverÁüð;KH it's passing down. This function will attempt to look for these detailsÁüÀJ÷áÜÑ>Êâñ>�”ù> # Return valueÁ�?�ü˜?B? [`FromEnv`] contains result and relevant environment variable.Áüß?IF If a jobserver was found in the environment and it looks correct thenÁü­@EB result with the connected client will be returned. In other casesÁü÷@*' result will contain `Err(FromEnvErr)`.Á¦A�ü®AJG Additionally on Unix this function will configure the file descriptorsÁüýADA with `CLOEXEC` so they're not automatically inherited by spawnedÁlÆB children.ÁØB�üàBHE On unix if `check_pipe` enabled this function will check if providedÁì­C files are actually pipes.ÁÏC�d×C # SafetyÁèC�üðC@= This function is `unsafe` to call on Unix specifically as itÁüµDGD transitively requires usage of the `from_raw_fd` function, which isÁü�E(% itself unsafe in some circumstances.Á®E�ü¶EJG It's recommended to call this function very early in the lifetime of aÁü…FJG program before any other file descriptors are opened. That way you canÁüÔFGD make sure to take ownership properly of the file descriptors passedÁŒ G down, if any.Á¶G�ü¾G74 It is ok to call this function any number of times.ÁdˆHû&ÿ`` bζT•H4¦Ib�c�c�ccbc ¿)ÈgUÿ²+,ÂIb�d�d�ddbd÷1‘h�hUÿòõëIb�e�e�eebeÈgÈgUÿ²+ü€V*ü¬PD�æ„õPÝæŠQ�ü’Q>; Wraps [`Client::from_env_ext`] and discards error details.ÁÕQ�dÝQ™ïîQ�üöQ@»ïü»RG…ðü‡S(Öð´S�ü¼SJ”ñü‹TJèñüÚTG¼òŒ¦UŒó¼U�üÄU7³óDŽVřǙș­É™Ê™àË™óG*¤�R{9 ×$ÿ`` fü÷[-üæV0- Acquires a token from this jobserver client.Á›W�ü£WHE This function will block the calling thread until a new token can beÁüðW  acquired from the jobserver.Á•X�”�Xüé´X�ü¼XGD On successful acquisition of a token an instance of [`Acquired`] isÁüˆYJG returned. This structure, when dropped, will release the token back toÁü×Y@= the jobserver. It's recommended to avoid leaking this value.ÁœZ�d¤ZêãµZ�ü½ZKH If an I/O error happens while acquiring a token then this function willÁü�[KH return immediately with the error. If an error is returned then a tokenÁ¬Ý[ was not acquired.Á<þ[¨ ¨×$ãnBÿ` †\` g$‡\ü’c9üÔ]FC Acquires a token from this jobserver client in a non-blocking way.ÁŸ^�”§^üé¾^�üÆ^GÂûü’_J“üüá_@çü¦`�d®`êã¿`�üÇ`KÖýü—aK«þ¬çaÿþ�b�ü‰bUR If non-blocking acquire is not supported, the return error will have its `kind()`Áüãb*' set to [`io::ErrorKind::Unsupported`].Á\™c© ©×$ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwřǙș­É™Ê™àË™óG*¤�R{9 ”%Ö2Bÿ` ¥c` h$¦c4�dh�i�i�iihi÷1ä#”%UÿÑTü�g,ü�e30 Returns amount of tokens in the read-side pipe.ÁÇe�”Ïeüéæe�üîe@= Number of bytes available to be read from the jobserver pipeÁ³f�d»fêãÌf�üÔf74 Underlying errors from the ioctl will be passed up.ÁL—gª ª×$öÆBÿ` ¡g` j$¢güÒn*üégKH Configures a child process to have access to this client's jobserver asÁL¹h well.ÁÇh�üÏhHE This function is required to be called to ensure that a jobserver isÁüœiKH properly inherited to a child process. If this function is *not* calledÁüìiHE then this [`Client`] will not be accessible in the child process. InÁü¹jLI other words, if not called, then [`Client::from_env`] will return `None`ÁüŠkHE in the child process (or the equivalent of [`Client::from_env`] thatÁŒ×k `make` uses).Áík�üõk! ## Platform-specific behaviorÁ›l�ü£lKH On Unix and Windows this will clobber the `CARGO_MAKEFLAGS` environmentÁüólIF variables for the child process, and on Unix this will also allow theÁüÁmFC two file descriptors for this client to be inherited to the child.ÁŒn�ü”n96 On platforms other than Unix and Windows this panics.ÁLÙn«¬ «×$ ¬¦È²+Bÿ` ãn` k$änöÇênüðv/üåoK¡ˆLµpõˆÃp�üËpH”‰ü˜qKæ‰üèqH»ŠüµrL�‹ü†sH㋌Ós´Œés�üñs!ÛŒ—t�üŸt@= On Unix and Windows this will clobber the `CARGO_MAKEFLAGS`,ÁüätIF `MAKEFLAGS` and `MFLAGS` environment variables for the child process,Áü²uA> and on Unix this will also allow the two file descriptors forÁüøu-* this client to be inherited to the child.Áªv�ü²v9–�t÷v­® ­×$ ®¦È²+Bÿ` †w` l$‡wöÇ�wôìxTïx¯ ¯×$¾6Bÿ` úx` m$ûxü훇ü¾{IF Converts this [`Client`] into a helper thread to deal with a blockingÁüŒ|63 [`Client::acquire`] function a little more easily.ÁÇ|�üÏ|JG The fact that the [`Client::acquire`] isn't always the easiest to workÁüž}KH with. Typically you're using a jobserver to manage running other eventsÁüî}LI in parallel! This means that you need to either (a) wait for an existingÁü¿~B? job to finish or (b) wait for a new token to become available.Á†�üŽDA Unfortunately the blocking in [`Client::acquire`] happens at theÁü×HE implementation layer of jobservers. On Unix this requires a blockingÁü¤€EB call to `read` and on Windows this requires one of the `WaitFor*`Áüî€HE functions. Both of these situations aren't the easiest to deal with:Á»��üÃ�KH * On Unix there's basically only one way to wake up a `read` early, andÁü“‚EB that's through a signal. This is what the `make` implementationÁüÝ‚IF itself uses, relying on `SIGCHLD` to wake up a blocking acquisitionÁü«ƒHE of a new job token. Unfortunately nonblocking I/O is not an optionÁüøƒGD here, so it means that "waiting for one of two events" means thatÁüÄ„JG the latter event must generate a signal! This is not always the caseÁü“…! on unix for all jobservers.Á¹…�üÁ…IF * On Windows you'd have to basically use the `WaitForMultipleObjects`Áü�†HE which means that you've got to canonicalize all your event sourcesÁü܆>; into a `HANDLE` which also isn't the easiest thing to doÁ¤Ÿ‡ unfortunately.Á¸‡�üÀ‡C@ This function essentially attempts to ease these limitations byÁüˆˆEB converting this [`Client`] into a helper thread spawned into thisÁüÒˆDA process. The application can then request that the helper threadÁü›‰KH acquires tokens and the provided closure will be invoked for each tokenÁlë‰ acquired.Áý‰�ü…ŠJG The intention is that this function can be used to translate the eventÁüÔŠ@= of a token acquisition into an arbitrary user-defined event.Á™‹�|¡‹ # ArgumentsÁµ‹�ü½‹KH This function will consume the [`Client`] provided to be transferred toÁü�ŒDA the helper thread that is spawned. Additionally a closure `f` isÁüÖŒ85 provided to be invoked whenever a token is acquired.Á“��ü›�/, This closure is only invoked after calls toÁüÏ�IF [`HelperThread::request_token`] have been made and a token itself hasÁü�ŽEB been acquired. If an error happens while acquiring the token thenÁüçŽ41 an error will be yielded to the closure as well.Á ��”¨� # Return ValueÁ¿��üÇ�KH This function will return an instance of the [`HelperThread`] structureÁü—�JG which is used to manage the helper thread associated with this client.Áüæ�IF Through the [`HelperThread`] you'll request that tokens are acquired.Áü´‘85 When acquired, the closure provided here is invoked.Áñ‘�üù‘IF When the [`HelperThread`] structure is returned it will be gracefullyÁüÇ’IF torn down, and the calling thread will be blocked until the thread isÁü•“'$ torn down (which should be prompt).ÁÁ“�dÉ“êãÚ“�üâ“B? This function may fail due to creation of the helper thread orÁü©”FC auxiliary I/O objects to manage the helper thread. In any of theseÁüô”/, situations the error is propagated upwards.Á¨•�ü°•  # Platform-specific behaviorÁÕ•�üÝ•HE On Windows this function behaves pretty normally as expected, but onÁüª–FC Unix the implementation is... a little heinous. As mentioned aboveÁüõ–KH we're forced into blocking I/O for token acquisition, namely a blockingÁüÅ—JG call to `read`. We must be able to unblock this, however, to tear downÁü”˜! the helper thread gracefully!Áº˜�ü˜FC Essentially what happens is that we'll send a signal to the helperÁü�™KH thread spawned and rely on `EINTR` being returned to wake up the helperÁüÝ™IF thread. This involves installing a global `SIGUSR1` handler that doesÁü«šEB nothing along with sending signals to that thread. This may causeÁüõšHE odd behavior in some applications, so it's recommended to review andÁü›&# test thoroughly before using this.Á”ô›×$öm•tBÿ`‚oo`þÆöm ‡œˆ#ömánÜÇœ�#ömán²+ýÆöm$åœöm<ìœ nöm;œ%;[]üÞ +üÞ85 Blocks the current thread until a token is acquired.Á€Ÿ�üˆŸJG This is the same as [`Client::acquire`], except that it doesn't returnÁüןIF an RAII helper. If successful the process will need to guarantee thatÁü¥ 41 [`Client::release_raw`] is called in the future.Á\å ° °×$¡ÄBÿ` ñ ` p$ò üú£+üÅ¡>; Releases a jobserver token back to the original jobserver.Áˆ¢�ü�¢HE This is intended to be paired with [`Client::acquire_raw`] if it wasÁüÝ¢JG called, but in some situations it could also be called to relinquish aÁü¬£IF process's implicit token temporarily which is then re-acquired later.Á\�¤± ±×$¡ÄBÿ` �¤` q$ޤ´ã¤”%s�#s”€¥$ƒ¥² ²”%²+Bÿr ˆ¥r s$�¥Œ†¨À'uÜÿ©üž¨KH Request that the helper thread acquires a token, eventually calling theÁüî¨63 original closure with a token when it's available.Á©©�ü±©IF For more information, see the docs on [`Client::into_helper_thread`].Ál†ª¶ ¶À'²+Bÿt ”ªt u$•ªÔó«À'w�#w””¬$—¬· ·À'²+Bÿv œ¬v w$¡¬„‹¯Þ%y{ü¢¯-$¥¯¸ ¸Þ%›R›R©žRÜ 6ŸRÉZ 6R¤KíÊ6縧&Bÿx ª¯x y$«¯ú¯y�z�z�zzyz÷1Î8Î8¿ÎÐ8×ã5mj1é¦Ý@ðÏðÏUÿ²+üɲ;„̲¹ ¹Þ%‚²+Bÿx‚|| ݲxþƵÉÄ벺ˆ#µÉ ºÞ%œð²º�#µÉÿɲ+ {µÉ$Þ²œ è²]_�¶{�}�}�}}{}µÉ÷1ÁȲ+üÆÀ1œÉÀ» »Å™Ç™È™­É™Ê™àË™óG*¤�R{9 ÓËBÿ âÀ ~’ÝÀ4ÊÁ~���~òõřǙș­É™Ê™àË™óG*¤�R{9 ¿)Uÿ­¼DêÁ~�€�€�€€~€÷1¿)¿)¿)Uÿ²+‰Â~�������~�÷1­¼–ÍUÿ²+¼óün52 Error type for [`Client::from_env_ext`] function.Á¤�ü¨96 [`Client::from_env_ext`]: crate::Client::from_env_extÁdþÜv’äÐṽü‘#,œ‚‚Á -"Ü… g…--òóô òÜ ó€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡ôã*Bÿ„ë„ …-œ-Ìàü¹EB Kind of an error returned from [`Client::from_env_ext`] function.Áÿ�üƒ9‚Ï:ŒÎ„é�†fCw´y‡ˆ‰Š‹Œ�Ž��‘’“”•–ˆŠŒŽ�’”–DÎü€IF There is no environment variable that describes jobserver to inherit.ÁY††�ln††�\öüÜ63 There is no jobserver in the environment variable.Áü—ZW Variables associated with Make can be used for passing data other than jobserver info.Áª††�½¿††�\Ôü‡HE Cannot parse jobserver environment variable value, incorrect format.ÁX††�km††�tµüåKH Cannot open path or name from the jobserver environment variable value.Á[††�np††�dœüÉNK Cannot open file descriptor from the jobserver environment variable value.Á^††�qs††�TÆ ü®RO The jobserver style is a simple pipe, but at least one of the file descriptorsÁü… <9 is negative, which means it is disabled for this processÁüÆ {x ([GNU `make` manual: POSIX Jobserver Interaction](https://www.gnu.org/software/make/manual/make.html#POSIX-Jobserver)).Á-††�AD††�D« üÖ PM File descriptor from the jobserver environment variable value is not a pipe.Á`††�su††�\ú ü¹ <9 Jobserver inheritance is not supported on this platform.ÁL††�_a††�$#�˜ g˜$$õö÷ õ� ö€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡÷ã*Bÿ—Æ— ˜$œ$üà ! ŒÓ Á OûaÞàt¿š›œ�žŸ¡¢¥¦©ª¬­°±›�Ÿ ¾6Á Bÿ¢£¤¾6Ö2Á Bÿ¦§¨÷1Ö2Á Bÿª«÷1Á Bÿ­®¯÷1‘2Á Bÿ±Dë ™™Á ™™Á \ù ™™Á ™™Á Î> Î>™™ ŸÎ>Î>¾6Á Bÿ™™·ä4–!™™¾6? ?™™ ¢??¾6Ö2Á Bÿ™™£å4²!™™¾6tº!™™Ö2t? t?™™ ¦t?t?÷1Ö2Á Bÿ™™©æ,Ü!™™÷1tã!™™Ö2Ì? Ì?™™ ªÌ?Ì?÷1Á Bÿ™™¯ç,ƒ"™™÷1@ @™™ ­@@÷1‘2Á Bÿ™™›è,˜"™™÷1´Ÿ"™™‘2\¼" ™™Á ™™Á ò-Á ³ g³òòýþÿ ýÁ þ€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡ÿã*Bÿ².» ² ³òœò´íŒò¶",:ðo0µ¸¹¶·¹º¢?¶"BÿŠ´´¶"\�$�´´÷1d�,�´´÷1r@r@´´ ¹r@r@¢?¶"Bÿ´´ÃìL¶´´¢?á.¶"¼ g¼áá€�‚ €¶" �€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡‚ã*Bÿ»/þ» ¼áœáŒÖ4á�#ñè�RÏFÈH¾¿ÀÁTî$î½½âE\þ,þ½½âEü�d�½½¶"üâ#|â½½¸G("/�#àgÃ("("ƒ„… ƒ�# „€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡…ã*BÿÂ0ΠÃ("œ("œ› D¦ ä#Ï8TÀL<ÅDµ $µ ÄÄåK+%0ä#Ç gÇ+%+%†‡ˆ †ä# ‡€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡ˆã*BÿÆ1“ Æ Ç+%œ+%Œ›i4¦i˜$Ú:ï�èê>ÍÉÊ´³i4³iÈȰOôÏi,ÏiÈÈ£Pö&8˜$Ì gÌö&ö&•–— •˜$ –€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡—ã*BÿËB“iË Ìö&œö&Œ�"ܤ A client of a jobserverÁÀ�üÄIF This structure is the main type exposed by this library, and is whereÁüŽPM interaction to a jobserver is configured through. Clients are either createdÁüßOL from scratch in which case the internal semphore is initialied on the spot,Áü¯IF or a client is created from the environment to connect to a jobserverÁ¤ù already created.ÁŽ �ü’ KH Some usage examples can be found in the crate documentation for using aÁ\Þ  client.Áê �üî OL Note that a [`Client`] implements the [`Clone`] trait, and all instances ofÁü¾!63 a [`Client`] refer to the same jobserver instance.Á4˜"×$œ�Œ:ãzŠÎ¼¥",¥"ÍͧS—);×$ІЗ)—)˜ ˜×$×$BÿÏGþ!Ï Ð—)*<×$Ò gÒ**™š› ™×$ š€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡›ã*BÿÑH…"Ñ Ò*œ*œ•$üÁ"'$ An acquired token from a jobserver.Áé"�üí"LI This token will be released back to the jobserver when it is dropped andÁüº#IF otherwise represents the ability to spawn off another thread of work.ÁD $”%)Pß³[ÞúÔÕÖsį$4¯$ÓÓ§SœÍ$$Í$ÓÓä#tæ$Dæ$ÓÓ&+=”%Ø gØ&+&+œ�ž œ”% �€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡žã*Bÿ×I�$× Ø&+œ&+”‡)\Ž)Þ%H‚ «Ϊ`ÚÛÄ )$ )ÙÙª[l¾)$¾)ÙÙ™\Ù->Þ%Ý÷ÝÙ-Ù-Þ%BÿÜÜ ÝB.?Þ%ß gßB.B.Ÿ ¡ ŸÞ%  €g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡¡ã*BÿÞKÿ(Þ ßB.œB.”ê)\ñ)§&tB±aï´Öáâã|ƒ*Dƒ*àààMœ˜*l˜*ààœ±*l±*àà(0@§&å÷å(0(0§&Bÿää åœ0A§&ç gçœ0œ0¢£¤ ¢§& £€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡¤ã*BÿæMâ)æ çœ0œœ0”á+ü™+63 Return type for [`Client::from_env_ext`] function.Á<ì+û&ø@…xÛtléêüµ,(üú+63 Result of trying to get jobserver client from env.Á4¹,èè¾füÔ-)üã,/, Name and value of the environment variable.Áü—-85 `None` if no relevant environment variable is found.ÁØ-èèřǙș­É™Ê™àË™óG*¤�R{9 ¥Ý‘hƒ2Bû&ì gìƒ2ƒ2¥¦§ ¥û& ¦€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡§ã*BÿëNÙ+ë ìƒ2œƒ2¼¬§üý¥QN Structure returned from [`Client::into_helper_thread`] to manage the lifetimeÁüϦKH of the helper thread returned, see those associated docs for more info.Á!d·§À'ðlxÌ`îïwÔʧ,ʧííÄw¼ê§,ê§íí£PL=DÀ'ñ gñL=L=³´µ ³À' ´€g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡µã*BÿðQ¤§ð ñL=œL=ª®- +0$YST" É(â.ãT3‘8–=òBÖGÛLáQ€V…[("`€e…j+%o8[t2\yð]~Î_ƒ¶`ˆa�ÿa’ þY˜²b�Tc¢ác§ öb­¢²§·ö&¼8 Áz Æ Ë*Ð[Õ`Ú&+ßíäòéB.îeójøœ0ý ƒ2�I0GvE bA& ïn-+?3 ’w:ß>@Ì*F+)LÃ(RuX{^L=d|'j'pl&v}%| ö²„0$Š-LW]`tx6Client::into_helper_threadÁ io::ErrorKindÁClient::from_env_extÁClient::from_envÁHelperThread::request_tokenÁClient::acquireÁ detail onlineÁ?https://make.mad-scientist.net/papers/jobserver-implementation/ÁClient::configureÁžèdÑÓe–‚‰Client::release_rawÁÈClient::acquire_rawÁî“io::ErrorKind::UnsupportedÁ�”¸”Ÿ”í”�•“•Í”ו–‚de…žÑÈí±–”–î“Ï–�”û‡Ÿ”¸”�•Í”í”וdÍ“•žÑe‰–‚È”–±–Ï–Ĉd2https://www.gnu.org/software/make/manual/make.htmlÁŸ”crate::Client::from_env_extÁ crate::ClientÁ,GNU make manual: POSIX Jobserver InteractionÁؘdŸ”™™¹™dË™ؘŸ”™™¹™ÍË™…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6 FromEnvError inner Unsupported NotAPipe NegativeFd CannotOpenFd CannotOpenPath CannotParse NoJobserver NoEnvVarFifoFdsreadwriteClient creation_arg is_non_blockingAcquiredbyteHelperthreadstateclientdatadisabled HelperState lockcvar HelperInner requests producer_done consumer_done FromEnvvar HelperThread šœ­œ¹œËœÚœëœþœ“�¥�·�Æ�Ñ�Û�æ�ò�ÿ�’ž¨ž·žžÏžÜžèžõž€Ÿ�Ÿ¡Ÿ¬Ÿ·ŸÉŸØŸìŸ€ Ž ˜ ¾Ib¾€£Cìœr™)07ŸA¢—ën`¸–·)Ñò¸ðÒ-2‹¤å±â@œ–�¨™è[»€ÖÛ)œ}jìO)éîè;qãͧ 4¶lj:Ä�©âú;�ÞŒÙÖ) "8 š'“ª6 A6 3®:±õÍôÆqdù±d¾—'/5>¦b¨‚K”¶Yh�»¶Ð9p�ï¶ pÁb”VÃÕ÷_M¾¶Yyî.ɘ?sb×'Êtîêhá�C¿Õùe§›ãà;M÷¥c-Š.ÃÁb·°Ÿ�+J/Eãsž,zØ}ÛõÌÉ+tÍE%Ö«�Ä×î2Á&hë$P&2íbàιì&GpUo‰ÿ¤†¥2Çö“åu Ÿý× ˆò"aÛGf«Ä›Óªµý7!ì’>¶bôÍF‘ 𜧓#e$òæè“4!E$m¸™ h£Ê“�ré-–Né*àˆØ �žQ¹'uFR#ÜiW©ÔÃñ-Ñ)a…Þ ê^�æb;£žZuæ«Owx ®'ýKz¼Lçॿ@/[‹e–]‰ƒ� éàätçÀé�h×!,æ_#štC‰ZaÞ¡jÌYÆáú�â®bÙklírw×£%r¸ŒÍ-ÓÇS'Ÿ-*ËGè ÇZYþ¡�VèQäy[ ™�‹âý©žk>øUûº‚5Ã2½�1Ń×=Ë…bç}Ý¢7E^lEp‰ðQçk‘ÆçÌÒµ{�@—ï›ËS½ åÄé—vhXˆQ,?Ì«9¼æŒÉHõüDwUá*ŸØ>f\5h­w}súF/|új3. ¡†!/G„ÈÔNp)k�©t>µ;Tƒ? ¿ô}•Þúˆz+ó¹Ì(~Õ$Æo‚&¨¿3|�®³è­m½(åEQQ¡ÈËá�[L g¦!ÎÏñEŠkP_ŸÄil8ùÐÂ*ˆ,�áá6®opÆ] ,,�Ä« ·Ï€Oa‰ÂMȈ½°ÄüµÂ™P‚lZÌmLƒ{¿ýh×øí”'  #ã«�˜ùpj`4(”Ö7â‘+{ÁTÅ#ÒÞ£Mh=¨9]OÇ¡n0³u¦F'ˆHñɼ Gj ¦A35Õü¤95“£ëb÷ƒ ÝJM n=#¡½[ä?á*�]FçJª1M�ª?Q��õºW» ¨ ¨³ÅŠÑ„¬^ÿ ië¼×“%¿4>/¸�AdM¹“}ã¶O û;8o žÈ:¹xØ›¹Š�˺.*"^0{ÑyúüüøS&p‰¾ÐËvî ¤è9Ѳ¨¶£¹Ï]'+KÒcy›ÂЋ-CŠžÂ)f[Y˜›ûl‡¿L;Ó³jʲå);XQRÈ ςòMãrñ¤ØÙF- <Ƈ»"»§ð�8Å<µôÇaæ«o@Õˆlt¿|Õ ô¿=+±}�ÄíÜ“OL‰Õôé´t8ÌLááa¨&툀r´]yø:c£x“¿Ô„?®¦v”&¢Æ2,™<’T¦5ßKE8~O:Þ²j¹åÔ÷á³Íü'èæäúۇȂW¡KCº=’o¥˜]¡Äƒo_�ülIAòi¡ÃÚ½A¿Ýƒíß�¡:ö‰ïf…qg¼û`#Útp²ñ„ó\+6§;á[ö©únk®9^;¸NG !,¡ôË•Xi«B1Ú¨E1ÊܼÂþÌ å^“–ž™Á¬¾K@æ.UÇWj�ìSâÉþR24Z³E¾ð=Z£§”­†mAU I ¸¤‹ZDŸ¥Ò„Ù¿”³ªÙµ üÞ¯¸Ä¸g//ßV‡ôÍEˆø ç4�Î…ªKÙÖæëœ Õ'&–íÉ¡tcø3ÄõŸóëFÒ ÆñªÛ¦¬²`«˜ºéE¸H�²8ÑQq�î ËÉ£�º$ØûéâVäÏðCãØŸÿýš´ò'µí4Sk]y€fçDZU>qÌÖlã‚Ëu[ kã0Ý¥bAýB$Ø‹P‰fþ)ÛEd°G¦íEÖ£m aÒ >½y!Œ!@­· jM\ýƒs<ù†@ˆdÙQæšBÅÌüÅ�"Œ†ßæ$Û—ƒŒ¼aª< ›¿ŸÑԮє÷ØêÛž¤Èñ>bNwE"hc�~'š™]¦ò>¶¢wÐ�ødÏgý$ ]ÈTfts»Wši%íŠÉ£Ü®þ¬è�ŦҽÚ#�Q¡ÚÈC¦b¤eÿ’ø¯Åúˆm¾µ—ÞpfCßaâ}Ÿ*&m."`™ñ©6'³Éç0˜«»ïr¸Í0q6ù¸+4Ý£ ÕKgÎŒÞÈP4¸]Z�³xmÎ2í„AWaŽ3#É”ÿ–¥yp™ãß›]s¡z!>Å&RBûºñiœ×ˆ4õ}*lå]ÞUˆ æp8šNÑ_¼º…'¯;™Ê>2Ã:eŠ&„ê9þÓùS?—£¿ÑxžRrL¬N3lòÈl [AIá³…‚Òl!ï£iœ-pvø"’Q þUÓ:_÷¾3Jöð©§ú¹.—€y ´œæ1T` ¶Å°g¨¥¡z>·ÁÀ-ßNeòë¶�îÇõá•PÓ(Rr²6fר®K-˜+Ãé� Ü2@`+7Ôãüí6$B2"Ù4—j;BÞŠÙç°Û�5ÿü ™{÷š+™Ù¹Æ—=qŠòw�ÿÔÛÑîSn¡é¢îó2ì2ß3Ö*ƒö& œÿ†TšŠšy‹Ð.ª í'µ£·Ôè†ô©' ä¯\Ç�=èNBó¶Ã;&�ïóã™iYÂÂëR¥¼¦Ñ�‚¡ sÁ`vçnChÉ›jƒ6ÞtÛâÚ`w0qlAçD™N¿�»œFÒö’¹ d ®ÐáФ:ɇn¡ ±�~“R̨ºš·Êt)‡Œr¦÷~âáýJèÖ%-м1gç£ýW—T‹À¼ç©áÁAå û­fd,òh-ãntŒpµ$)„¤sJñ™¯¥v+-ZN¹iƒhu œ‘»Tƒ´ <Š?¼%žÞ5´M‹bk*Õ’¸\œ3(SEÛ¢ ´ÎrµL,fNöÎC᪃wýÍÔ)°ÆN™|ØÝõÆ $Uï7Ä·F‘òö+gxp�kºµþ#š®p®A¸GÒd±¢·î¸æîÌæH ͨôŒò9=©(«…¤Ñ�ð§Bj�.–Ö’ÖHú»ù`ëÓú= J.Œ¹¸+àÒ—^÷W*„Ê÷^$»É6,ôõ©Ýî� F�Qh–N!ØI`pSŒ;ÕNF.Þ‰MÁáGã0Ûi5Ì“VÖ2»ŽÁÁ°�ËÌíïàaFªõqk±Ì• ;©T®�úo²®SÆ�x…4¡‚µl {üksé„}p,Ì�jMQtÖO„U¯+ð? Ø‚äÉåÉæÉéÉçÉëÉèÉêÉŽ Q"%UÊPA~R‚R‰R�R—RžR¡R§R­R³RºRÌRíRSqSŒS:TUTúTåXëXñXôXúXYY YYYY#Y'Y.Y5Y9Y<YBYHYOYRYYY_YfYmY™Y-ZdZ­Zc[J\£\X]¶]^§^û^D_æ_Î`abzbÊblcdcd eeueÓe,f—fªfçfþg�hÛhiqi¾i j™jÚkîkÚmámämêmñmnmnÂnìn's&z„zàz<{Ð|ãU‚³ ‚„9ˆ|ŠÏMŠ\�éž� ª ý ¡\¢w¢Ê¢á¢x£¤Ø¤1¥Ç¥h¦Í¦-§æ§ÿ§¨Ê¨½©Rª8«Ì«c¬ý¬i®¯Œ¯©¯X°±_±¢±÷±²e²}²”²ë²³³o³†³Ý³õ³ ´P´m´µaµ{µ•µ®µ¶¶7¶å¶·0·K·f··œ·J¸u¸Ž¸«¸Y¹†¹ ¹¹¹Ö¹„ ºo½ˆ½¥½õ½¾À¾×¿ñ¿ À#À@ÀîÀÁ6ÁOÁlÁ Á½Ák›µÂÎÂæÂÃ7ÃTÃÄpÄÊħÅÄÅsÆVÇrÇŒÇ©Ç QÂR UY©y°<µùR}SFTy Y£fækýmÎ n›  ¡h¢Ö¢ß§ ¨�©‰©‘©™©¡©©©±©¹©š¯¡°©°±°Ã°Ù°ï°±±^´GµSµ(¶ ·�·o¸œ¸~¹Ç¹i½–½¾Ë¿1ÀÁ]Á®Á‘ÂôÂEÃgĵÅKÇšÇ       **********)))))*)~QÀRÝR9S¤SmTU±Y1Z|ZÅZ{[Î]_\_þ_æ`7a’bâb„c{d,eÂfh©hôhŠi×i"jÊj¶mn…nŒrzo|«‡�݃æ‡*Днœ­žT Ã "¢�¢ú¢¤J¥À§ê§3¨?©ª=ªúª#«Ž«·«%¬N¬¿¬è¬)®T®Ç®ð®O¯x¯À¯^°±I±c±�±§±Ö±ù±²B²g²²™²È²í²³³N³q³‹³º³ß³÷³´;´„´!µeµµ™µ³µâµ¶N¶ë¶·4·O·j·³·P¸y¸Â¸_¹Š¹¤¹í¹J½s½¼½)¾¬¿Û¿õ¿ÀWÀôÀ Á:ÁƒÁÔÁqŸ¹ÂÒÂÃkÃHÄ´ÄIÅÛÅ,Ç[ÇwÇÀÇÄAuR{R~R…RŒR“RšRžR¤RªR°R¶RÉRéRüRlS‡S5TPTöTâXèXîXñX÷XýXYY YYYY#Y*Y1Y5Y9Y?YEYKYOYVY\YbYiY”Y)Z=ZLZ_Z•Z¨Z^[F\Ÿ\T]±] ^£^ö^?_á_É`abubÅbgcÿc]deeqeÏe(f“f¦fâføgŠhÕhiki¸ij“jÖkékÖmÝmámçmímnhn¾nçns"z€zÜz7{Ë|ÞQ‚®‚„4ˆxŠÈŠI�V�㞊 ¥ ø  ¡W¢r¢Å¢Û¢s£¤Æ¤Ó¤+¥Â¥c¦È¦)§á§ü§¨Æ¨¹©%ªNª «4«Ÿ«È«6¬_¬Ð¬ù¬:®e®Ø®¯`¯‰¯¦¯S°±1±[±u±Ÿ±¼±ó± ²(²a²y²‘²®²ç²ÿ²³4³k³ƒ³ ³Ù³ñ³ ´#´M´j´µ]µwµ‘µ«µÈµÿµ¶4¶á¶·,·F·a·|·™·F¸q¸‹¸¨¸U¹‚¹œ¹¶¹Ó¹€ºk½…½¢½ò½¾¼¾Ó¿í¿À À=ÀêÀÁ2ÁLÁiÁ�ÁºÁg—±ÂÊÂãÂÃ4ÃQÃþÃkÄÅĤÅÁÅnÆQÇmljǦÇTÈXÈ]ÈbÈgÈlÈqÈvÈ{È�ȇȌȑȖțȠȥȪȯȴȹȾÈÃÈÈÈÍÈÒÈ×ÈÜÈáÈæÈëÈñÈöÈûÈÉÉ ÉÉÉÉÉ$É)É.É3É8É=ÉBÉGÉLÉQÉVÉ\ÉbÉhÉnÉtÉzɀɇÉ�ɔɚɠɦɬɲɸɾÉÄÉÊÉÐÉÖÉÞÉxR‚R‰R�R—R¡R§R­R³R¼RÚR!SŒSUT UåXëXôXúXY YYYY'Y.Y¹f¹•¹¯¹Ã¹iºQ½~½’½â½ÿ½¥¾³¿æ¿ÀÀ-ÀÓÀüÀ+ÁEÁYÁ“ÁªÁPÂyªÂÄÂÝÂðÂ*ÃAÃçÃOľÄSűÅWÆ3ÇfǂǖÇ=ÈßRïRQSsST¤Ê¤ì¤¨¥Û¥|¦á¦Á§ì§¨¡¨@©ª>ªûª$«�«¸«&¬O¬À¬é¬*®U®È®ñ®P¯y¯�¯.°`°!±K±e±�±©±à±û±²N²i²�²›²Ô²ï²³!³X³s³�³Æ³á³ù³´=´T´ò´#µgµ�µ›µµµìµ¶¶¼¶ì¶·6·Q·l·ƒ·!¸Q¸{¸’¸0¹`¹Œ¹¦¹½¹[ºK½u½Œ½Ô½ù½—¾­¿Ý¿÷¿À'ÀÅÀöÀ"Á<ÁSÁŠÁ¤ÁBÂs¡»ÂÔÂêÂ!Ã;ÃÙÃIĵÄJÅ«ÅIÆ-Ç]ÇyÇ�Ç.ÈçR÷RaS{S"TDTëTwYZ;ZIZ\Z‘Z¥Z@[:\‹\ä\™]ø]R^è^+_Ö_¾`ab_bºb\cécDdîd6e¶efmf¡f×f(g{h½hi[ižiëi†j§käkËmûm;n nÌnórzgzÅz!{Ç|ÓF‚–‚„ ˆdнŠ5�מ~ ™ ì ¡K¢f¢¹¢Ô¢g£¹£­¤¥µ¥¦­¦§É§ú§ ¨´¨H©#ªLª «2«�«Æ«4¬]¬Î¬÷¬8®c®Ö®ÿ®^¯‡¯˜¯A°h°/±Y±s±�±·±ð± ²#²^²w²�²©²ä²ý²³/³h³�³›³Ö³ï³´!´K´\´µ+µuµ�µ©µÃµüµ¶&¶Ï¶ô¶*·D·_·z·‹·4¸Y¸‰¸š¸C¹h¹š¹´¹Å¹nºS½ƒ½”½ç½¾ª¾µ¿ë¿ÀÀ/ÀØÀþÀ0ÁJÁ[Á˜Á¬ÁUÂ{¯ÂÉÂâÂòÂ/ÃCÃìÃQÄÃÄXųÅ\Æ5ÇkLJǘÇBÈ:S¥SnT²Y~ZÇZ}[Ð]_]_`ç`8a“bãb…c}dÃfh«höhŒiÙi$jÌj·m!n‡n�rzp|¬ˆ�Þƒç‡+Жоœ®žU Ä #¢‘¢ü¢!¤L¥Á§4¨@©>ª$«¸«O¬é¬U®ñ®y¯Á¯`°K±�±Ø±D²Ê²P³¼³=´…´#µäµO¶ì¶´·Q¸Ã¸`¹î¹K½½½*¾­¿XÀöÀ„ÁÕÁsÂÃlÃIÄÜÅ-ÇÁÇ:S¥SnT²Y~ZÇZ}[Ð]_]_`ç`8a“bãb…c}dÃfh«höhŒiÙi$jÌj·m!n‡n�rzp|¬ˆ�Þƒç‡+Š–Š¿œ®žU Ä #¢‘¢ü¢"¤L¥4¨Á¯³°Ø±Ç°D²Ý°Ê²ñ°P³±¼³…´UµäµO¶´·Ã¸î¹½½*¾XÀ„ÁÕÁÃlÃÜÅÁÇ%S�SYT�YhZ±Zg[J\£\X]º]^§^ÿ^H_ê_Ò`#ab~bÎbpcdgdeueÓe,f®fçfh•hàhiviÃij¶j¢m nqnxríy&z„zàz[|—s�U‚Ƀ҇ЀЩœ™ž@ ¯ ¢|¢æ¢x£ ¤Ø¤6¥Ç¥h¦Í¦¨)ª«£«:¬Ô¬@®Ü®d¯¬¯5±y±Â±.²´²:³¦³'´p´Îµ:¶Ÿ·®¸Ù¹¨½¾CÀoÁÀÁÃWÃÇŬǨ²1z× ¼± _“ÒY˜¢ìö;U�Ò¤æ4+"ðß&")%ô&) *$+-@.Ä/š0�2J=G&Ì>?r?Ê?@p@´&Ê&à&H= îÝ$"'%E&) *"+->.Â/˜02ä4Ê>³&I=!ï?q?É?@o@Þ½@%"(%F&) *#+-?.Ã/™0€2å4Ë>î±\²â²f³Ô³úµ¬&Á&×&í&°&Å&Û&ñ&eS&TïTZ•ZD[>\ü]/_Ú_Â`a b¾b`cícðdÛfhÁh i¢iïiŠj«kÏm?n¤n÷rzË|×J‚ „$ˆhŠÁŠ<�Ûž‚ ð O¢½¢k£µ¤¹¥¹¨F° µÔ¶9¸H¹sºì½¯¾ÝÀ�ÁZÂ4ÃñÃaÆGÈÑ¿OÇge|QºRíRqS:T UmY—fÚkñmÂn� ý \¢Ê¢º§¨9©ªöªŠ«!¬»¬$®Ã®K¯Ž¯X°±_±¢±²”²³†³ ´R´µaµ®µ¶å¶�·J¸�¸Y¹»¹D½Š½÷½¦¿%ÀîÀQÁ¢ÁkÂèÂ9ÃBÄ©Å%ÇŽÇØ§W©w°:µ·h¸w¹b½Ä¿ ÁŠÂ`ÄDÇ˧J©j°-µö¶[¸j¹U½·¿Á}ÂSÄ7Çmpw{ƒ‡‹�“—›Ÿ«²¶½ÁÈÌÙàäèìðôøü  $(,048<@DKX\`imxˆŒ�”¤¨¬»Éèú -=ATXhlptxƒ‡™¨ÇËÝóý48<@DHUcgn�…‰�œ£ª®µ¼Ñâû&*15IMTXcg~�¡»¿ÃÇÚçëó   2 7 J O e j ~ ƒ • š ª ¯ Â Ç Ë Ó ë ó ø    " ' / 7 ? D L T \ a i q v ~ † Ž “ — Ÿ · Â Î Û ç ì ô ø    * A E M \ h l t � ‰ ‘ • � £ « ¯ · » Ã Ê Ò Þ î ò ú  $ + / 7 I Y n ƒ ‡ Ž ’ š ¨ ° ¸ ¼ Ä × ß ç ë ó ú      # ) / 5 ; B I P W ^ e l s z � ˆ � • › ¡ § ­ ³ ¹ ¿ Å Ë Ñ × Þ å ì ó ú $+29@GNU\bhntz€†Œ’˜ž¥¬³¹¿ÅËÑÚ§y©�©‰©‘©™©¡©©©±©™°¡°©°»°Ñ°ç°ù°±BµKµ·j¸y¹d½Æ¿ÁŒÂbÄFÇúR~SGT†Y‡YˆY‰YŠY‹YŒY�YŽY�Y�Y‘Y’Y¤fçkÿmnÚnÛnÜnÝnÞnßnànánânãnänånœ  ¡i¢Ø¢Ù¢¨œ¯`´*¶�·ž¸É¹˜½¾3À_Á°ÁöÂG÷ŜÇìÉR̵ ÍP ÍKZ^Z§ZûRƒSLT“Y¥fèknæn¡  ¡n¢Ú¢¨¡¯e´/¶”·£¸Î¹�½ ¾8ÀdÁµÁûÂLüšÇXpqhblagfjkuFsw쀿)™�÷1ـ倆X¿)¾6å,÷1²+¾6Uÿ ‰¥‰¥ ArgumentsÁ‹¥templateÁûcŒ¥Çûcg‡@#éó  ·º_í#í#¸°î#�ÑÛ#¬ݶÑ÷˜ÌÖ2âE ®âEò¼§f¾6§fË(Ë(uÍ(ßÒ%iXèZûë:�§fß½§fã:§f‘;§f¿)§f¿;§f÷1“6§&ˆ6§&þ'¤¾6‹gàMàM‹gàMàM‹gàM+àM‹gàM,àM‹gàM6àM‹gàMNàM‹gàMNàM‹gàMPàM‹gàMQàM‹gàMSàM‹gàMàM‹gàMàM‹gàM àMë)¿)ã:ÿ¾6ÿÌ»«º�‰Pt›K«´èýVB€œ,çݵdµd¶dStderrÁ ñMw±° F+¨¿)™öÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw²+ŸŸ °>£ó‹¤ô‹ljô²ßk#Ê&ýÆ•@ö¡ÄöðÏØn‹#²+�#²+²+ýÆÇÅîšîšPinÁðš¿ ð[$²òVá=µ•4„K„KK‡Kí ä7ˆKÁOä7‰K«ä7ƒ¢3à6ú�““InnerÁ”‚ ü•idÁü–parkerÁü}æ%y©híÀhÀhÁhSystemÁ ¹/I)üü“2“2 UnsafeCellÁ•2�ñ.ç–\*=°"�řǙș­É™Ê™àË™óG*¤�R{9 ·ÄßÈřǙș­É™Ê™àË™óG*¤�R{9 „K„KK‡Kí ä7ˆKÁOä7‰K«ä7ƒ¢3à6ú�ÀÀ ScopeDataÁÁnum_running_threadsÁŸÂa_thread_panickedÁŸÃ main_threadÁŸ¥ÂB$%”ßÖ•@řǙș­É™Ê™àË™óG*¤�R{9 „K„KK‡Kí ä7ˆKÁOä7‰K«ä7ƒ¢3à6ú�îî SpawnHookÁïhookÁæð¥ æÌ.F�U¥Ó•@řǙș­É™Ê™àË™óG*¤�R{9 ¾6‘2Èg¾fÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwâEÖ2·Ä�ѡąC…CüˆC”+Ð=‰C¶Ð=ò¹ÚàÅŸŸ °>£ó‹¤ô‹ljô²ßk#ÿÅ•@•@…C…CüˆC”+Ð=‰C¶Ð=ò¹ÚàÅåK•@„K„KK‡Kí ä7ˆKÁOä7‰K«ä7ƒ¢3à6ú�ÿÿPacketÁ‚scopeÁ×ƒÇ ×„_markerÁ×Î'F3:!tÀ²+•@£P§SùÉÞÆˆÌÅ8Å8WeakÁÈ8í ä7É8«ä7=ÆÖ�BüÐ •@Å8Å8�ÑÈ8í ä7É8«ä7=ÆÖ�BÞ%ÈÒÅ8Å8�ÑÈ8í ä7É8«ä7=ÆÖ�B�#ÈÒÅ8Å8�ÑÈ8í ä7É8«ä7=ÆÖ�B¾ÊÈÒÝ8Ý8ArcInnerÁß8strongÁä7à8Âä7á8×ä71%wãÿÃxdüÐÝ8Ý8¯Óß8ÀÓä7à8Âä7á8×ä71%wãÿÃxd�#šn§Ï‰Å¢?((RawVecÁ+ß,²Ð©XÕ”ˆó‰§Ï•@((øÔ+ß,²Ð©XÕ”ˆó‰åK•@©7«7¬7OsÁ­7óÙ6®7¯7SimpleÁ°7óÙ6±7²7 SimpleMessageÁ³7óÙ6´7µ7CustomÁ¶7óÙ6VNè7Oö‡ö‡÷‡ CustomOwnerÁø‡óÙ6 fûËÒñD¶ÚÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^�h²+°OüÐ�� JoinInnerÁ�nativeÁבÕ×’packetÁ×_Šÿ3òÓÚÞ²+ðÏßßAdapterÁâ߉㣠‰q¯™ØA1¿æëÔÍ×$”%¾6âE¶"�#ÜÁ —ØÖ2‘h¾Ê§A§AThreadÁ¨Aßü=U/'o±½%úú ThreadInitÁûhandleÁü rust_startÁŸ³~8þ‹nœAœA SpawnHooksÁ�AfirstÁæÖ¤]¿¡Gž¢A¢AChildSpawnHooksÁ£AhooksÁæ¤Ato_runÁæOw'1µ“¼ê6ê6ë6ReprÁì6óÚ6í6ôÚ6 BÆi�½£ò¼¶V¶V·VFileDescÁ¸VóóU ðwþþ®öVöV÷VìDøVó¼V ÜÐÊ85Í¥ ¢_¢_BufÁ£_ß[ãa¨áá›ï…f…fáÚ†fÇÆõe§ó®·‹-ôQ §Ï�hö8¿R¿RGuardÁÀR¡ ã5´aî²ðÏá6§&÷1·àðÏUÿÕ_Ì}�p�pIterÁ pí óo¡p end_or_lenÁóo¢p²ÐóoÛê2ÝЫåKÙa ð‡ð‡ OsFunctionsÁñ‡format_os_errorÁò‡decode_error_kindÁó‡is_interruptedÁÓ7‡U!‡äâÙaåKÙaàMÙaÔaåKÔaàMõaàMõaþ6—Øý6÷1 Õ7Õ7íÖÖ7¦Ù6×7£ Ù6Ø7 error_dropÁÙ6Ù7 outer_dropÁÙ6ß*I]@ÆDà—ØUÿ²+þ6 êãö6÷1çãääUÿ²+�?ÖZÖZ×ZAssertUnwindSafeÁÙZó *µfKLª×BŒ²+¾Ì §È²+’?Œå²+£3åK•@ö6÷1ôä²+á6§&÷1üàŠáå,÷1�¼‹¼�÷1 €g€gŠ‚gê ûcƒg”+ûcØ«q¢1È¡ã*Uÿ²+Œ²+¾ÌÝåý6÷1äã²+ìw¿)ðWýG«X˜$«XÖ2ùWåK¶_×$ÜÒ_åK£ä£ä¤äTryFromIntErrorÁ¥äó ¬q£:{ a±²+̲+˜²+ç8ðÏç8îÏ­p¿)ÀF•@Ë6§&ž:üЕ@é8�#©{¨{Ê{Å9üЕ@Å9Þ%•@Å9�#•@Å9¾Ê•@º¾6úúOsStrÁûßÞ¸@—5Ezoºã?ã?ºéê§"�h²+¨"�h²+ˆJ²+–P¶ý¶ý¼¸ý‚¹ý’}£²ËJüü ÷1æëÈ•@‹²+R§Ï•@Æû‡+ü‡ý‡NotFoundÁþ‡ÿ‡PermissionDeniedÁ€ˆ�ˆConnectionRefusedÁ‚ˆƒˆConnectionResetÁ„ˆ…ˆHostUnreachableÁ†ˆ‡ˆNetworkUnreachableÁˆˆ‰ˆConnectionAbortedÁŠˆ‹ˆ NotConnectedÁŒˆ�ˆ AddrInUseÁŽˆ�ˆAddrNotAvailableÁ �ˆ‘ˆ NetworkDownÁ ’ˆ“ˆ BrokenPipeÁ ”ˆ•ˆ AlreadyExistsÁ –ˆ—ˆ WouldBlockÁ ˜ˆ™ˆ NotADirectoryÁšˆ›ˆ IsADirectoryÁœˆ�ˆDirectoryNotEmptyÁžˆŸˆReadOnlyFilesystemÁ ˆ¡ˆFilesystemLoopÁ¢ˆ£ˆStaleNetworkFileHandleÁ¤ˆ¥ˆ InvalidInputÁ¦ˆ§ˆ InvalidDataÁ¨ˆ©ˆTimedOutÁªˆ«ˆ WriteZeroÁ¬ˆ­ˆ StorageFullÁ®ˆ¯ˆ NotSeekableÁ°ˆ±ˆ QuotaExceededÁ²ˆ³ˆ FileTooLargeÁ´ˆµˆ ResourceBusyÁ¶ˆ·ˆExecutableFileBusyÁ¸ˆ¹ˆDeadlockÁºˆ»ˆCrossesDevicesÁ¼ˆ½ˆ TooManyLinksÁ ¾ˆ¿ˆInvalidFilenameÁ!ÀˆÁˆArgumentListTooLongÁ"ˆÈ InterruptedÁ#Ĉň´$ƈLj UnexpectedEofÁ%ȈɈ OutOfMemoryÁ&ʈˈ InProgressÁ'͈̈TooManyOpenFilesÁ(Έψ³)Јш UncategorizedÁ*9ns+ïÎl»Ö2ÆÌ»¢?œ¥¾6œ¥Ö2œ¥÷1Œ­ª©¿)ΩåKíL÷1öL÷1À�Øn•@�ÿÅ•@�ÇÅ•@�ã?•@ð6¢:üЕ@¢:Þ%•@¢:�#•@¢:¾Ê•@¢:£Ç÷Ç¢:ÍÌ•@Õ:üÐÈÒÕ:Þ%ÈÒÕ:�#ÈÒÕ:¾ÊÈÒ¤¬¬"�h²+Öf®Úå6§&è6§&ë6§&”+åKàýàýÆâý’ür 1¡z÷àMàM€„[²+Ëå’E§Ï•@×`Þ¸Á ×`âÁÖ2×`°OÖ2×`âEÁ ×`�#Ö2×`ä#Ö2×`¿)Á ×`àMÖ2×`÷1Á ×`÷1Ö2×`²+Á ×`²+Ö2Ü`ê„Ö2Ö2Ü`Þ¸Á Á Ü`âÁÖ2Ö2Ü`×$Ö2Ö2Ü`”%Ö2Ö2Ü`�#Á Á Ü`�#Ö2Ö2Ü`˜$Ö2Ö2Ü`ä#Ö2Ö2Ü`àMÖ2Ö2Ü`²+Á Á Ü`²+Ö2Ö2ü9Þ%•@ü9�#•@øánØn•@‡:Þ%•@‡:�#•@Ìf®ÚÎf®Ú„Ö2†Ö2ƒÖ2‡ ëÉ ëÇ öIú±ðàM8A.<?›B"/D=@-œ#0;>ÅwÉwq,Ù+}©Ø core_intrinsicsÁfmt_helpers_for_deriveÁ¢g¡g¾Ib¾€£Cì/ÕL®&óÉ„½…ÿ‚]´œ¾Ib¾€£CìÇ;½ýRO«‰q,΋р〢g¡g¾Ib¾€£C컀Ê% ìþÉ„Šid´œ¾Ib¾€£CìÀ¢¾¸ ƕɄ„$�´œ¾Ib¾€£Cì«P¬ÿÓìÒyÉ„Ð+¼´œ¾Ib¾€£Cì4ù¬BÓÓq,ëCр〢g¡g¾Ib¾€£CìˆJ+c´ƒq,“ixр〢g¡g¾Ib¾€£Cì›HJ$¦˜LÉ„ÅR´œ¾Ib¾€£Cì³ÓïÄò�„øe,þ!}”V¯Ñ€derive_clone_copy_internalsÁð‰â¾Ib¾€£Cìì̼œPœr<ö(�ÄlÑ€øô¾Ib¾€£CìC½ó²Ç›ýeq,â)bр〢g¡g¾Ib¾€£CìD㌓žÙK[É„â<´œ¾Ib¾€£Cì¥i ¤Ò­pÑq,þÄр〢g¡g¾Ib¾€£Cì“«“:Q€q!,¤§úр〢g¡g¾Ib¾€£Cì3ßóÃÃ>c4ɼõ!Ô´œ¾Ib¾€£Cì«á;t]pÎ –žL{úûè¾Ib¾€£Cì#2D‘�ÝÇÉÌÐ)0´œ¾Ib¾€£Cìê7 ³ry{É„›§^´œ¾Ib¾€£CìŠe>pÉ„õ‹´œ¾Ib¾€£Cì~–Qhæ³È$q,�$р〢g¡g¾Ib¾€£CìÛ–d§ ¤aWr<Ù)Ñ€øô¾Ib¾€£CìmÂZÏ ˜°8c|g|Ü ¾Ib¾€£Cì«XÁò™W¢„q ,»  Ñ€ã€¢g¡g¾Ib¾€£Cì¼ ²mb§C[q,“ Õр〢g¡g¾Ib¾€£Cì+OwÒúî°w8ø|úûè¾Ib¾€£Cì–T匾ÉÌí(Ü´œ¾Ib¾€£CìIëÉ��O¨êÉ„²  ´œ¾Ib¾€£Cì2"�œñç¬q,Ƒр〢g¡g¾Ib¾€£Cìèãï`¬©áÑɄРk´œ¾Ib¾€£Cì3‡Ÿí¹v q,…"óр〢g¡g¾Ib¾€£Cìè |…â|q,ÿ((р〢g¡g¾Ib¾€£CìÒT½¯�Ê€šFß?ì? @@Ó?ð? @Ë?@×?ø?@Û?ü?Ï?è?ô?ã?@@¶DÔB˜@¡E#DêAFü@lC(AtEÈCTAõC€AÎEÝDCÈ@EµAB0FPDlBeF…DŸB=@6CGE™C-@ÍDñB¸@¾E@DB FA‰CDA‘EåCpAD¥AóEE&Cì@7EÚA\BUFuD�BŠF¦DÄBˆ@\CdE¸C°4ODHT <·Þnk®9^;¸šhë$P&2íû­fd,òmÎ2í„AW×ëFÒ Æñª­‘ ðœ§&ŒÙÖ) "8 Ÿý× ˆò"øí”'  #ã_ð? Ø‚;’>¶bôÍF%¸æîÌæH #”&¢Æ2,™‹²®SÆ�x6ð§Bj�.&¹Ì(~Õ$QSâÉþR24¡<Š?¼%žÞ5*ƒö& œÿú.ª í'µ£ü[ä?á*�j�˺.*"^0tâ}Ÿ*&m.Ð;ÕNF.Þ‰M/'³Éç0˜«»Òš'“ª6 A6 �»¶Ð9p�ï?Ì«9¼æG²å);XQR}ÙF- <Ƈ€Èñ>bNwÄ“¿Ô„?®¦vŠs<ù†@ˆdÙ¾™]¦ò>¶¢wÆj;BÞŠóЋ-CŠžÂzè“4!E$m¸(!ÎÏñEŠkPVV‡ôÍEˆø ¨–Ö’ÖHú»'íïàaFªõq3âáýJèÖ% ™Á¬¾K@柷 jM\ýƒ½E8~O:Þ�F�Qh–-.UÇWj�ì —vhXˆQ,F;á[ö©ú™8šNÑ_¼º…Þœæ1T` ¶Åê<µôÇaæ«‚N!ØI`pSŒ.]yø:c£x‰“#e$òæ'Ø‹P‰fþ)Û¹ ]ÈTftÈ_ŸÄil8ùW¶lj:Ä ´M‹bk*Õ’™P‚lZÌ]o@Õˆlt¿|ƒA¢—ën`¸– û;8o žrá6®opÆ]Y«�˜ùpj``>qÌÖlã‚¶h­w}súF/K)k�©t>µ;Nû`#Útp²ñ—Ó(Rr²6ît)‡Œr¦÷~ h-ãntŒpµ$)„¤sJñgxp�kºµþ #š®p®A¸!³ÅŠÑ„¬^ÿn:eŠ&„êà·Ôè†ô©'ý=©(«…¤Ñ�%ÐÂ*ˆ,�áX¨&툀r´ˆüksé„}p8I ¸¤‹ZDŸ¤tçÀé�h×4b¤eÿ’ø¯ÅÍb¨‚K”¶YhéE¸H�²8ѯE"hc�~'šÅ£¿ÑxžRrLâ Gj ¦A3fõºW» ¨ ¨m°g¨¥¡z>·ë¦Ñ�‚¡ sUo‰ÿ¤†¥ áФ:ɇ •Xi«B1ڜȈ½°Äüµ\n¡ ±�~ …4¡‚µl {7“R̨ºš·Ê N¿�»œFÒS&p‰¾ÐËvTƒ? ¿ô}•O¥Ò„Ù¿”³¥¶ pÁb”]FçJª1MkAòi¡ÃÚ½A”QæšBÅÌüÅ¿!/G„ÈÔNpMaŽ3#É”ÿ–Øsb×'Êtîê¨E1ÊܼÂ�'¯;™Ê>2Ã߃wýÍÔ)°¢ ´ÎrµLÈ ς~£m aÒ >»Q þUÓ:_÷çù`ëÓú= (#�Q¡ÚÈC¦ÌÃé� Ü2@`ð…bç}Ý¢7A�"Œ†ßæ$ÛÀYÆáú�â7+7ÔãüíñËS½ åÄéEKz¼Lçॿ1Íü'èæä�jìO)éîè;é-–Né*àˆ*a…Þ ê^�æ.bàιì&Gpò'µí4Sk´«�Ä×î2Á&Qq�î ËɰiYÂÂëR¥¼Á`vçnCh·)Ñò¸ðÒ;&�ïóã™lAçD™Ä·F‘òö+¾3Jöð©§èœ-pvø"’æ{Ñyúüüøu&RBûºñiÛªÙµ üÞ¯¦©T®�úo5e§›ãà;t8ÌLááa‡„ó\+6§˜2Çö“åu !Ì“VÖ2»1ëb÷ƒ ÝJh‰ƒ� éàä3¬N3lòã]¡Äƒo’ôÆqdù±d‘»Tƒ´ ¸Ä¸g//ß§Óªµý7!ì$á�[L g¦U…‚Òl!ï£iå6$B2"Ù4—ò¸\œ3(SEÛ™¯¥v+-ZNNG !,¡ôË›¸ŒÍ-ÓÇS:|új3. ¡†L¾—'/5>¦œr™)07ŸÇ¡n0³udïr¸Í0q6Óîó2ì2ß3Öùù¸+4Ý£ ÔÁáGã0Ûi505Õü¤95“£g 3®:±õÍ M n=#¡½iÕ ô¿=+±}„�ª?Q��lµ{�@—ï›DÈl [AIá³ä¥bAýB$¸há�C¿ÕùVäÏðCã²�+J/Eãsž+tÍE%ÖèNBó¶ÃÿŒÉHõüDH¦F'ˆHñɼefר®K-˜+ïÁÀ-ßNeòëì(åEQQ¡ÈËT'uFR#Üi,wUá*I $Uï7b;£žZuæ«/Qäy[ ™�=ŸØ>f\5JP4¸]Z�³xÖþÌ å^“–žžVÃÕ÷_M¾¶!,æ_#št5Ï€Oa‰ÂM[Û¦¬²`«˜º®M÷¥c-Š'+KÒcy›Ây—ƒŒ¼aª<Á"aÛGf«Ä›#pfCßaÏ ä¯\Ç�=þs»Wši%íŠÉÉ›jƒ6Þ®bÙklí8_�ülI“§”­†mAU £Ëu[ kã0Ý·Cº=’o¥˜‘E^lEp‰ðBîSn¡é¢øòMãrñ¤ØtÛâÚ`w0qö’¹ d ®Ð-м1gç£ý¹iƒhu œ,Ì�jMQ9Þúˆz+óP]s¡z!>ÅÚ ™{÷š+õÒ—^÷W*„*¾Ib¾€£Cìú¹.—€y ´éUûº‚5Ã2?½�1Ń×=Ë@úۇȂW¡K�ö‰ïf…qg¼–tÖO„U¯+:å]ÞUˆ æpÝ@/[‹e–]2½y!Œ!@­¼4>/¸�AdpÕKgÎŒÞÈÕW—T‹À¼Ùç°Û�5ÿüôͨôŒò9$Õ'&–íÉ¡«™Ù¹Æ—=qŠö)f[Y˜›ûl{¥yp™ãߛنTšŠšy‹ÐûØ �žQ¹+‹âý©žk>ø> ›¿ŸÑÔ®ÂÇZYþ¡�Vè<GÒd±¢·î"rw×£%r9-2‹¤å±âѲ¨¶£¹Ï]x<’T¦5ßKŒEd°G¦íEÖº@œ–�¨™èÆo‚&¨¿3|R£Mh=¨9]Oc�®³è­m½SOwx ®'ý0ŽÁÁ°�ËÌ2úˆm¾µ—ÞÎJ.Œ¹¸+à)Ê÷^$»É6,+mLƒ{¿ýh×^ç©áÁAå .ÃÁb·°Ÿ ,,�Ä« ·Z+{ÁTÅ#ÒÞbQçk‘ÆçÌÒCtcø3ÄõŸó¬è�ŦҽÚËYyî.ɘ?™ h£Ê“�r)'Ÿ-*ËGè ;k±Ì• ;4qãͧ 4ç4�Î…©Ð�ødÏgý$Ç,fNöÎC᪇¿L;Ó³jÊ|²j¹åÔ÷᳎òw�ÿÔÛÑ÷4(”Ö7â‘a ië¼×“%¿oÈ:¹xØ›¹Šs£�º$Øûéâ±ÆN™|ØÝõÆ[»€ÖÛ)œ},zØ}ÛõÌÉ�ÄíÜ“O…C‰ZaÞ¡jÌ6¿Ýƒíß�¡:•M¹“}ã¶OqªKÙÖæëœ ª]y€fçDZUµvî ¤è9wÑ”÷ØêÛž¤Ãôõ©Ýî� ,»"»§ð�8Å�W©ÔÃñ-Ñ)-Z³E¾ð=Z£¢"`™ñ©6ÑL‰Õôé´†œ×ˆ4õ}*lܶ�îÇõá•Pí9þÓùS?—á�©âú;�Þ É£Ü®þ¬ÊØŸÿýš´³ÿ\ÿvÿÿy+ÿÿÿUSqAÿÿÿ#ÿÿÿL<ÿÿÿÿÿÿÿQÿÿFÿ&ÿ]ÿÿÿÿÿÿÿws)ÿ;;l;Eaÿ\(]8sÿAÿoÿÿÿÿÿÿvÿÿ}ÿÿÿBbF<ÿsmÿ|If>K 0Ax?Zx\ÿÿÿÿÿÿÿÿFpZ8Oÿÿÿÿÿbÿ4ÿÿÿÿÿÿÿÿhM&T[9CÿÿÿÿÿmÿÿÿÿZ?ÿÿÿ=ÿÿÿÿeiÿÿ JJ& ÿbÿÿ8KuaaX& ÿÿ{ÿÿÿÿÿSÿ0ÿmÿqÿvÿ ÿ_rDs85d^4iLLSÿIÿ|4W ÿÿ0ÿS]ÿÿÿ ÿÿÿrÿÿÿyÿÿÿ2ÿoÿÿÿÿvÿ4Kÿÿÿÿÿmÿÿ'e)CSOkPÿÿÿQfÿÿ^>FMY|Oka"^ÿÿÿuÿÿe4ÿÿÿÿÿUN'ÿÿ~ÿfÿÿÿÿoÿÿpÿÿÿÿÿkÿOÿ[oiym9 UÿÿeYH_Eqc>d'fÿÿÿ'ÿÿ*ÿRÿÿÿÿbQZ6(ÿÿKoÿÿÿ Zÿ\ÿvÿÿy+ÿÿÿUSqX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35/src/error.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35/src/error.rsÁ LW›Ì<UCv!i–ÈH:¬Ë"Ë"_ ''6:)F:N;_MPSWA€UA-GMPWSOKM *I~Žv™œŽ” t *EDe $,)-¬¢Æ(‰]ê`�eu6_@'ñW/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35/src/unix.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35ÁW/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35/src/unix.rsÁ ¥Æ3æœ8 ’£»NáÙÂYϱ©±©ú""$ .AWK'%N*9D1)9/L/'3-, 4+ 4$D4 ) 2// 1`4 @ 49 %I*- 4X (HLF ]  !@; b**)% cdE@= > CMJL KH+ [JOQ'N]W^>,1='%=,&G 35# >+-B# 4=D" NIHHIJB PM7OO DKM ME6'&&#,I3:;/WG,$:<0D)) @#G::@; (D.67SN, GKJL+9.%&; )#QU 36_21IF3 HGJ0*,#+, $$?.(:92Q8 &  00<$16)+B !-+,MFKLLFL LL%%CGJMT*4K LN!& D+3( S&.<FIPMJ),*37 LB*A9 =() 7 => ; (( ! $AF3" 4<0JQC '& 4:%+(I 8&  'E G)H, $ 3@7  4444 IyM”_"ûÚ×ÔÛâ \V/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35/src/lib.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35ÁV/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/jobserver-0.1.35/src/lib.rsÁ ã Zƒ9öâ*û"ŸS^ÃÛéÔéÔÀ1NOKMNJKGMMPN,OOFM67 109K=IF( INP)P@NNQJPKGL69 2    JQPJL P7(MJRPK?S.17;.4=/X . b7. NMNMMGO  J P57 IQPP&MGO GNJ/OIM"EL-OOL<>M@ 2b *Y; 1Z 1R< ICEL-OOL<1.5M%LOEPP4*( KLOEPPZ/@-%( 8E<3PMPMQM&PNK>18#PMPMQM&ENF2>6',&##%+IM!DN;OPQGIMJMPJNMLO&NMCHJIPOEPI=4NJ9PON=NN,GK4%MKPO&KPNJM+I 96O =ON92CMON2#9 RL P;N"O/)&PH0&?+4<LKN1B$K-$I $PLOM1  # K#T…OJnJD4.?+ F:'?:0 .3 1? $773E-(2D,'C C LLY W  '3"G 4 C§±IIp[µ6ôÝÎñí¯fMhlx86_64-unknown-linux-gnuÁLªd;Š‹D�ݳn¼ü jobserverÁ-afd947e751247370Á¾Ib¾€£Cìßß·  #Ÿøi¼àîÊ?òòòðòðòµÖñŸ¼Óò¼¼ä¼øøòòäòäòäòÖòäñäâ}òúºä4ôòhäòäºô44hhòÖîÜI’ñâîîܼܸîòÜä  '4hñâð~»äR�±�×׈G rust-end-file