! / 0 0 0 0 8 ` // 64 ` futures-328a70e7bc2bb132.futures.f2d79cb7e8794385-cgu.0.rcgu.o/ lib.rmeta/ 0 0 0 644 19992 ` ELF>˜L@@GNUÀrust TJ#rustc 1.98.1 (48a229cea 2026-09-01)ÁûÊÆÍRLñ.åSÛAúwjL-df1bddb45adbe94bÁ futures_coreÁì–´C-ÞU,qÑ}ýèÒ-a08f9eceddc04eb7Á«ª1Úë• ¢›ºXÝÓrŽ*-1ad4f876c768bda9Á±ò‰<å%Z‰>¸64‡ËV`-2d2ab9fb0fe1def5Á‰m6GÞ­n6ÇèÆ2-64f5f36fb0927694Á»Äó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Á futures_utilÁs20"�d™ñ«ô†î-295b8d78b7c91d4aÁ futures_macroÁÝ´è® ÿ$k\æåc°ò-2d875dffae9f3cf6Á futures_taskÁà€“:©KkÄtÝ€¸ë€-128f12bebb0b2696Á futures_sinkÁ�Ži»¬�¡¬fÙ£©dx-04ec0352964b17dfÁpin_project_liteÁ# ÿÿÜÖ^*�¶üxVC-078d79a159585fd4Áfutures_channelÁN� ¡ÍÏç’ɰú+_Øà-b9a1f469600c1287ÁslabÁtÎ=žQ·ÜDµÑÖZ[Áô-16f6668050970f4dÁ futures_ioÁ–iޝ ÊÜ©e`% < ±-f0bb37989624a613Á¡µ%(Q|;™i³°�ÖÐzá-f44de480fcddb292Áfutures_executorÁÌ­€QÔ@Å+¬™OÑë&Ò-d773e40eeb1be500Á. ThreadPoolÁT´<Ó thread-poolÁ¼À;.ThreadPoolBuilderÁŒÀ<Ó˜ ')compatÁ4¬=ÓÒ ”Ý<û      !"#$%&'()*+executorÁ.........Û 8888888888 8 8 8 8 88888888888888.8ûFutureÁ4µ ¿´ TryFutureÁL½ ! FutureExtÁLú © TryFutureExtÁd…!ÎStreamÁ4Æ!E TryStreamÁLÎ!b StreamExtÁL‹"ý TryStreamExtÁd–"ûSinkÁ$Î" SinkExtÁ<‚#¡) AsyncBufReadÁdË# AsyncReadÁLÙ# AsyncSeekÁLä# AsyncWriteÁTï#AsyncBufReadExtÁ|½$Ê1 AsyncReadExtÁdÎ$§1 AsyncSeekExtÁdÜ$Å1 AsyncWriteExtÁlê$¸1readyÁ,¤%„pin_mutÁ<Ú%Ü5selectÁ4±&è5joinÁ$ð&å5pendingÁ<ö&% À $ÿ& !À ! select_biasedÁl…'ç5"try_joinÁD”'æ5#futureÁ4é'h%” ,ñ'ÿ)&sinkÁ$ø'È%'streamÁ4þ'¶ (taskÁ$†(Ê)) stream_selectÁlÜ(9*channelÁ<°)+lockÁ$ø)á1,ioÁ¼*�*-üµKü.+ Abstractions for asynchronous programming.Á/�ü3NK This crate provides a number of core abstractions for writing asynchronousÁL‚ code:ÁŒ�ü�EB - [Futures](crate::future) are single eventual values produced byÁüÖMJ asynchronous computations. Some programming languages (e.g. JavaScript)Áü¤" call this concept "promise".ÁüÇ;8 - [Streams](crate::stream) represent a series of valuesÁôƒ produced asynchronously.Áü¢FC - [Sinks](crate::sink) provide support for asynchronous writing ofÁ\é data.ÁüõKH - [Executors](crate::executor) are responsible for running asynchronousÁdÁ tasks.ÁÎ�üÒNK The crate also contains abstractions for [asynchronous I/O](crate::io) andÁü¡/, [cross-task communication](crate::channel).ÁÑ�üÕOL Underlying all of this is the *task system*, which is a form of lightweightÁü¥JG threading. Large asynchronous computations are built up using futures,ÁüðLI streams and sinks, and then spawned as independent tasks that are run toÁü½;8 completion, but *do not block* the thread running them.Áù�üýQN The following example describes how the task system context is built and usedÁüÏ85 within macros and keywords such as async and await!.Áˆ �\Œ  ```rustÁü˜ ! # use futures::channel::mpsc;Áüº _\ # use futures::executor; ///standard executors to provide a context for futures and streamsÁüš (% # use futures::executor::ThreadPool;Áìà  # use futures::StreamExt;Á,á  #Á|ç fn main() {Á\÷  # {Áüƒ DA let pool = ThreadPool::new().expect("Failed to build pool");ÁüÈ 0- let (tx, rx) = mpsc::unbounded::();Áù �üý OL // Create a future by an async block, where async is responsible for anÁüÍ PM // implementation of Future. At this point no executor has been providedÁüž 52 // to this future, so it will not be running.ÁüÔ  let fut_values = async {Áüõ PM // Create another async block, again where the Future implementationÁüÆSP // is generated by async. Since this is inside of a parent async block,ÁüšXU // it will be provided with the executor of the parent block when the parentÁüó! // block is executed.Át• //Áü¤SP // This executor chaining is done by Future::poll whose second argumentÁüøTQ // is a std::task::Context. This represents our executor, and the FutureÁüÍSP // implemented by this async block can be polled using the parent asyncÁü¡  // block's executor.ÁüÂ,) let fut_tx_result = async move {Áüï'$ (0..100).for_each(|v| {Áü—B? tx.unbounded_send(v).expect("Failed to send");Á”Ú })Átí };Áü�ü€IF // Use the provided thread pool to spawn the generated futureÁüÊ+( // responsible for transmissionÁüö)& pool.spawn_ok(fut_tx_result);Á �ü¤ let fut_values = rxÁüÄ .map(|v| v * 2)ÁÜä .collect();Á€�ü„LI // Use the executor provided to this async block to wait for theÁüÑ" // future to complete.Áäô fut_values.awaitÁT‘ };Áœ�ü PM // Actually execute the above future, which will invoke Future::poll andÁüñTQ // subsequently chain appropriate Future::poll and methods needing executorsÁüÆTQ // to drive all futures. Eventually fut_values will be driven to completion.Áü›>; let values: Vec = executor::block_on(fut_values);ÁÚ�üÞ(% println!("Values={:?}", values);Á\‡ # }Áü“™– # std::thread::sleep(std::time::Duration::from_millis(500)); // wait for background threads closed: https://github.com/rust-lang/miri/issues/1371Á,­ }Á<³ ```Á»�ü¿QN The majority of examples and code snippets in this crate assume that they areÁü‘+( inside an async block as written above.ÁüÉ´üý6ü½6|Ú.8ûÕãë¿´û!”©®<ÎËSE álb ú…ý ”¢û±· ÅΡ)Ýëù ’ «7 ÅV Ê1ås §1‚� Å1Ÿ® ¸1½Ä „ÔÝ Ü5íõ è5… å5›$ % À 5 !À 5 !Òa ç5"ñ{ æ5#‹“ h%” £ ÿ)&²¸ È%'ÇÏ ¶ (Þä Ê))ó 9*‘ +¨. á1,½A �*-ÕÕÕ¤ž Œ„ LŠ ë#!ëEC¤ã ŒÉ LÏ #!<EC<¤¯!Œ•!L›!S#!SlECl¤ô!ŒÚ!Là!…#!…¢EC¢”À"Œ¦"L¬"·Üî"ŒÔ"LÚ"ÎT¾#Ó‰|’#¼Œ#Œ¤#Lª#ëÓ‰6420ë Ó‰geca  Ó‰˜–”’ 7 Ó‰ÉÇÅÃ7 d®$Ó‰|‚$¼ü#Œ”$Lš$V Ó‰6420V s Ó‰gecas � Ó‰˜–”’� ® Ó‰ÉÇÅî œ–%Ä ¬Ì%Ý ¤£&Ó‰|é%¼ã%Ó async-awaitÁ¼�&üû%õ dá&ÓêE¼¿&ü¹& ÓêE $ ÓêE,*$ 5 ÓêEA?5 a ÓêEVTa { ÓêEki{ dÚ'tÃ'“ “ £ =£ ¸ \¸ Ï {Ï ä šä ÜÎ(Ó‰|”(¼Ž(ÓêE¼¬(ü¦( |�)Ó«Œò(Ìì(t†) ”ê)Ó«Œ¿)̹)tÓ). „®*Ó‰|…*¼ÿ)t—*A „’+ü©+)& Built-in executors and related tools.Á×+�üß+DA All asynchronous computation occurs within an executor, which isÁü¨,FC capable of spawning futures as tasks. This module provides severalÁüó,?< built-in executors, as well as tools for building your own.Á·-�¿-�üÇ-EB This module is only available when the `executor` feature of thisÁÌ‘. library is activated.Á¯.�ü·./, # Using a thread pool (M:N task scheduling)Áë.�üó.MJ Most of the time tasks should be executed on a [thread pool](ThreadPool).ÁüÅ/NK A small set of worker threads can handle a very large set of spawned tasksÁü˜0MJ (which are much lighter weight than threads). Tasks spawned onto the poolÁüê0NK with the [`spawn_ok`](ThreadPool::spawn_ok) function will run ambiently onÁĽ1 the created threads.ÁÚ1�üâ1 # Spawning additional tasksÁ†2�üŽ2KH Tasks can be spawned onto a spawner by calling its [`spawn_obj`] methodÁüÞ2MJ directly. In the case of `!Send` futures, [`spawn_local_obj`] can be usedÁd°3 instead.ÁÁ3�üÉ3 # Single-threaded executionÁí3�üõ3KH In addition to thread pools, it's possible to run a task (and the tasksÁüÅ4NK it spawns) entirely within a single thread via the [`LocalPool`] executor.Áü˜5NK Aside from cutting down on synchronization costs, this executor also makesÁüë5GD it possible to spawn non-`Send` tasks, via [`spawn_local_obj`]. TheÁü·6OL [`LocalPool`] is best suited for running I/O-bound tasks that do relativelyÁü‹7'$ little work between I/O operations.Á·7�ü¿7JG There is also a convenience function [`block_on`] for simply running aÁüŽ8/, future to completion on the current thread.ÁÂ8�üÊ8_\ [`spawn_obj`]: https://docs.rs/futures/0.3/futures/task/trait.Spawn.html#tymethod.spawn_objÁü®9pm [`spawn_local_obj`]: https://docs.rs/futures/0.3/futures/task/trait.LocalSpawn.html#tymethod.spawn_local_objÁÓª¤Ç*äÁ*Dš+block_onÁDÈ: C0block_on_streamÁ|Ò: F1enterÁ,ã: o2BlockingStreamÁtê:Œ3EnterÁ,ú:f4 EnterErrorÁT�;h5 LocalPoolÁL�;z6 LocalSpawnerÁd ;7„¬:ÈÊ­¯œž‚„prZ\EG-/|àAüöA52 A "prelude" for crates using the `futures` crate.Á°B�ü¸BLI This prelude is similar to the standard library's prelude in that you'llÁü‰CDA almost always want to import its entire contents, but unlike theÁüÒC=: standard library's prelude you'll have to do so manually:Á”D�<œD±7ô¨D # #[allow(unused_imports)]ÁäËD use futures::prelude::*;Á<ìD±7øD�ü€EJG The prelude may grow over time as additional items see ubiquitous use.Á<èA‹$èEh:ã4îE¿´;ûLöE!<²$œFÈ%>±$¢F ?Ç$ÅF¶ AË4ËFEBáLÓFbCÝdºILùLÈIM’LÓIN«TÞIO ½G©E ÐGÎF ŽH¡)G îHýI �IûJ ðJÊ1Q ƒK§1R –KÅ1S ªK¸1TlØEU4ßELO@C\ŽF:$•F03lµF*4¼F #l GŒäFLêFL°G$"dÀGGE$¤öGŒØGLÞG;lÑHŒ•HL›HLáH$"rdñHGE…L®IÓ‰|�I¼ŠIÓ‰0#Ó‰+)5(Ó‰@>:-Ó‰US?LÈJÓ‰|öI¼ðIŒŒJL’J|ÝJÓ‰7531IdóJÓ‰igeckd†KÓ‰›™—•�l™KÓ‰ÍËÉǯ'SinksÁ crate::sinkÁ ExecutorsÁcrate::executorÁasynchronous I/OÁ crate::ioÁ�*cross-task communicationÁFuturesÁ crate::futureÁStreamsÁcrate::channelÁ crate::streamÁÐhÚhÈ%êhøhŒi¡i´iÑiÝihÿiói’jÐhÚhêhøh.Œi¡i´iÑiÿiÝiói’j¶ spawn_local_objÁ>https://docs.rs/futures/0.3/futures/task/trait.LocalSpawn.htmlÁí[‚ thread poolÁÓZ Cspawn_okÁThreadPool::spawn_okÁ spawn_objÁ9https://docs.rs/futures/0.3/futures/task/trait.Spawn.htmlÁ¿kÓkí[‚  l¹lÆlÓZßlíl¿kÓkí[z‚  l¹lÓZÆlßlíl¿´!©ÎEbýû ¡)Ê1§1Å1¸1ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²…Cyè·œ×òl §�ÿÍ3yœ?L†¶"3Jä–3 :sN$¡ÚÓÉýÞU Ó9úÉÖ z| ÎæG˜øá^#Ûôë•åt–¨&κuidÔ�¿$R]l •ZQáuw%Œ1qˆaŸÜž9• 'À&Ô/øñNl®r¿€.ÒÒèƒ~„R÷74|îÕž¯Æ`óõ3D½(ßwÊ2)ü6·ŸnÓJˆ(Úõ$r°ø{ F¹v¬ßîZ/}x2× -y:X©çé²c)ð+Dé¼” Ì¢¸ï¾´%eb®j3§§Õ¢' ÁL2-ò%ÅœEÁ—ŽæpÅ™oo> AÑÜŸ,ºuýO»/vØ+)‚�0Á6²•t=ÕœšÅÙòü„åãÖÛL=ßófœo·�×�“ 9bT_ó‘>Ê™G%bØ$ˆ¬u–£r%³ Y‚ß©Q¤öÉ594¾²©=óã+ЯÊ5£±,qBF\该ÛÔúé(JU¤I�ÀæY5E›Œ dÆYGxuRç›hƒÁŠÁ¤Dĵ4±{}fÀÔh$¼žçÑ Ž|ŽˆQ 2´4ô¢Ú²O¦ægó˜ÅM8«ÛbÔ3?Yºýñê!ksâµ èü�ßÁ‹¬� ˆ!÷^�nÞàä1˜÷Ý~7Ì;Qc€X�z ±ÁÇÒ¬9ûJ�� „èa¬÷j%³ê«Š™i-ã·úzwþçö5¥4¯bøeúD2£¾€êäjÅ�k´Méh¯Œõ�`!ö~eûT&zÔCmݳÇb®¬Bv ˆÔöáO|ìûb|›D¢ï¼Ë’GØæÐ˜5í’0¿µÍù(ÞÞ�;¦Åš”*žY8NJ&c»ÒL¬NsÆo¾ë€S”?’Vñ˜7R1ÀéêŒÙ…%R-V0TT Ûß$GjŒ¯Òô : \  ¦ Í !4!e!–!È!þ!/"`"‘"Ã"Ê"Ñ"##3#H#]#r#ˆ#¦#Å#ä#$"$B$m$¢$×$ (%%.'.+./.3.7.;.?.C.I .®1±1¸1¾1Å1È1Ï1Ö1Ù1à1æ1í1242W2~2¢2Å2è2þ23(3=3S3Š3¼3î3 4ƒR-V0‚Q-U0O ÒØÛÿ!Cg‰«Ïñ 7 Y { ¢ É !1!b!“!Ä!û!,"]"Ž"¿"Æ"Í"##0#E#Z#o#„#£#Â#á#$$>$i$ž$Ó$%!.%.).-.1.5.9.=.A.E.ª1®1µ1»1Á1Å1Ì1Ò1Ö1Ý1ã1é1 202S2z2ž2Á2ä2û23%3:3O3†3¸3ê34Õ@†¨î V x Ÿ Æ .!_!�!Á!)"Z"‹"¼"Ã"Ê"#-#B#W#l#�#¿#Þ#ý#$;$f$›$Ð$%M-'.+./.3.7.;.?.C.Q0±1¸1¾1È1Ï1Ù1à1æ1-2P2w2¾2á2 3"373L3µ3ç34K4€K-O0lovz~‚†ŠŽ’–šž¢¦ª®²¶º¾ÂÆÊÎÒÖÚÞâæêîòöúþ "&59=AEIMQUY`dhlptx|€„ˆŒ�”˜œ ¤¨¬°´¸¼ÀÄÈÌN4½5-7—7"%Ü …Cyè·œ×òšøZÃ`*”VA AA1A!AFA° ODHT U€·ÞÌ;Qc€X�>¤DÄ29ûJ�� „è@Rç›hƒÁŠÁ1O»/vØ+) wþçö5C8NJ&c»P³ Y‚ß©Q)o¾ë€S”?Rksâµ èü�:uidÔ�¿$ 1ÀéêŒÙTl §�ÿÍ3·�×�“%á^#Ûô땦Ś”*žYOR]l •ZQ $ˆ¬u–£r%(¦ægó˜ÅM87’Vñ˜7RSt=ÕœšÅÙ"ÒL¬NsÆQh¯Œõ�`!öG 9bT_ó&½(ßwÊ2)Ôh$¼žçÑ 4«ÛbÔ3?84ô¢Ú²O6¯Ê5£±,q,a¬÷j%³ê«A~eûT&zÔCHåt–¨&κ úé(JU¤. F¹v¬ßîZAÑÜŸ,ºuýøñNl®r¿BF\该ÛÔ-ßÁ‹¬� ˆ;eb®j3§§ÕjÅ�k´MéF¤öÉ594*…Cyè·œ×òD2£¾€êäEyœ?L†¶9• 'À&Ô/‚�0Á6²•!z ±ÁÇÒ¬?c)ð+Dé¼”%ÅœEÁ—Ž‘>Ê™G%bØ'ï¼Ë’GØL"3Jä–3¢' ÁL2-ò :sN$¡Ž|ŽˆQ 2´59úÉÖ z/}x2× -I�ÀæY5E›/Œ dÆYGxu01˜÷Ý~7=ÚÓÉýÞU ÓµÍù(ÞÞ�;N1qˆaŸÜž ¥4¯bøeúDŠ™i-ã·úzBmݳÇb®¬BIòü„åãÖÛ#| ÎæG˜øy:X©çé²€.ÒÒèƒ~„L=ßófœo$æÐ˜5í’0¿Mü6·ŸnÓJˆ Ì¢¸ï¾´%æpÅ™oo> Yºýñê!9(Úõ$r°ø{¯Æ`óõ3D¾²©=óã+Ð+áuw%Œ !÷^�nÞàä<v ˆÔöáO|Jµ4±{}fÀ3R÷74|îÕžìûb|›D¢KNbt`](ÿFÿÿlIJÿÿ,(ÿ)lcÿ{'8ÿU!ÿ]Rÿÿ-~_jDÿÿjÿyÿÿÿÿÿÿr[JVÿJGÿlÿÿyÿPÿÿZÿÿÿÿ=ÿM:ÿÿiÿO}=!m|YBÿÿÿ_D="hFr>ÿÿÿ`OQÿÿNbt`](ÿFÿÿlT/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/futures-0.3.34/src/lib.rsÁI/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/futures-0.3.34ÁT/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/futures-0.3.34/src/lib.rsÁ x4k߸_ Ðç>ß, ¶K¶Kþ/O FN#<G L O0PKM<R9 "`) E1PQ6!QTY"TUT!-(CJ,* M# QUU?) šR,  @?/';s3939%FT6  U; %$4.IKDJ4RSRS$PR$PSSLT,O4du X$;?2/H$aQ"9Q:QIB #! O6'6@'@IXÓÎùÖÕÚ¸¸0»hX”‘sHx86_64-unknown-linux-gnuÁ.Ñ F¨À¹Û qpcëfuturesÁ-328a70e7bc2bb132Á…Cyè·œ×òŸ”Ë ícU¨9«U9ÿ«U9UUrUªª9rUª//^�Nærust-end-file.note.gnu.property.shstrtab.strtab.symtab.rmeta@ .€`ãK&HL`LaL5lib.rmeta-link/ 0 0 0 644 648 ` ELF>@@GNUÀ>futures-328a70e7bc2bb132.futures.f2d79cb7e8794385-cgu.0.rcgu.oÁrust-end-file.note.gnu.property.rmeta-link.shstrtab.strtab.symtab@ €`N2°*È É:/0 0 0 0 644 624 ` ELF>ð@@rustc version 1.98.1 (48a229cea 2026-09-01)0ñÿ.text.comment.note.GNU-stack.strtab.symtabfutures.f2d79cb7e8794385-cgu.0  O@0@-m(p0