rust H—#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\”v’2®�-9cd8a66bfd45f04eÁhermitÁ4™ÅwasiÁ$‡ÅŠ”òÉ<ÃÉ<ÜŽAsRawFdÁ<ÁÅî¤�Ž FromRawFdÁLÊÅî "ŽRawFdÁ,ÕÅî:<ÓWakerÁ,ƒÅsolarisÁ¬Ê¨ô,‚Åî¤Òþ¸<ÚÅþÖLãÅ<ÂÅ•ÖLËÅî£ SocketAddrExtÁl9ÅandroidÁ¬£testsÁ,þ%Í$ó%¶set_nonblockingÁ|‚�ÅaixÁŒ¨ŒÅillumosÁ¬»ŒÅŸ ¬ÒŒÅvitaÁ”éŒü§ŒU[shellÁ,‚Óos-pollÁ˜½„ ¨½ƒ ð¸<œ Åî¤ì ð AsRawSocketÁ\Ï É<« ªAsFdÁ$Ø Å ª¸<Þ Åîª BorrowedFdÁTç Åî68ªÖLó ÅîKMª IntoRawFdÁLþ ÅîikªOwnedFdÁ<‰ Åî…‡ªô,’ Åîšœª‰ \Ê É<  ªAsSocketÁD× ÉªBorrowedSocketÁtá É<>ª FromRawSocketÁlñ É[]ª IntoRawSocketÁl€ Éz|ª OwnedSocketÁ\� É—™ª RawSocketÁLœ ɲ´ç¨ $§ Åî¤ö ç¸<­ ÅîçØ T¶ Åî,.çÖL ÅîACçŒ LÍ ÅîVXçª <Ø Åîkmçô,á Åî€‚ç‰ \™ É<ï çï D¦ Éç‰t° É&(ç©lÀ É8:çÈlÏ ÉJLçç\Þ É\^ç„Lë ÉnpǨ $Ú Å Ǹ<à ÅîÇØ Té Åî,.ÇÖLõ ÅîACÇŒ L€ ÅîVXǪ <‹ ÅîkmÇô,” Ålj \Ì É<¢ Çï DÙ Éljtã É&(Ç©ló É8:ÇÈl‚ ÉJLÇç\‘ É\^Ç„Lž Énp‰macrosÁ cfg_os_pollÁcfg_not_os_pollÁ cfg_os_extÁcfg_netÁ cfg_io_sourceÁcfg_any_os_extÁtraceÁºerrorÁlogÁinterestÁREADABLEÁWRITABLEÁAIOÁLIOÁPRIORITYÁ�¬ÏœremoveÁ is_readableÁ is_writableÁis_aioÁis_lioÁ is_priorityÁ#´#¹&º(ñÀ ********** * * * * ******»>registryÁ*RegistryÁ@selectorÁ@ has_wakerÁ*CÝCÀ *F as_raw_fdÁ*Hñ*JregisterÁK�J reregisterÁM�J deregisterÁO�J try_cloneÁQ Jregister_wakerÁJû*Uñ*Was_fdÁ*Y°sysÁtokenÁ\]”wakerÁ______e˜ f ewakeÁeventÁiÆjjjjjoõo‹o�ois_errorÁois_read_closedÁois_write_closedÁoÉo¯o¼ofrom_sys_event_refÁjzñ{ EventDetailsÁ| |'aÁ|ó{€ñieventsÁ‚‚‚‚EventsÁ†innerÁ‚ˆ with_capacityÁˆcapacityÁˆis_emptyÁˆ�ˆclearÁˆë‚�Œ�Ÿ�IntoIterÁ��‚”Œ”Ÿ”¥ ” size_hintÁ”Š‚šñisourceÁœœœœœœá¢Ï¢å¢ýœ¦�¦Ï¦å¦ýiiiiiÌ·pipeÁ¸¸¸¸·featuresÁguideÁInterestÁÀ ÀóÅ•ÇÝ ÊŽ ̤  ΖC˜ Ð [ debug_detailÁ[ÌÓsyscallÁ[ÓûÖÖÖÖÖÖÖÖÖÖ Ö Ö Ö Ö ÖÖÖÖÖÖÖÖNEXT_IDÁÖí˜ í•ï íselectÁñ ñ íÏô ÖöÔÖø°Öinterests_to_epollÁÖEventÁÖÅÖÆýýýýõý‹ý�ý‚ý‘ý¦ýÉý¯ý¼ý debug_detailsÁŠ check_eventsÁÖÓÓŒŽŽŽŽŽŽŽŽŽŽ Ž Ž Ž Žœ˜ œnew_unregisteredÁœ»Ÿ œ ack_and_resetÁœfdÁœwokenÁœresetÁ¤ ަ°ÓsourcefdÁ¨¨¨¨¨¨¨¨°Œ°Ï°å°ýÓÓɶ¶¶new_rawÁ¹ ¹ ÖÖSelectorÁ½idÁ½epÁÖÀñíå íýÄ ÖÆ£'Š EventsDetailsÁÈ ÈóŠËñÖstateless_io_sourceÁÍÍÍÍÍÍÍ IoSourceStateÁÔ ÍÖ˜ Ödo_ioÁØ�؂؎ÖÏÖåÖýÖŽŽ àÐ%Žâñ¨SourceFdÁä äŒäó¨èŒèñÓnetÁëëëëëëëëë new_ip_socketÁë new_socketÁëSocketAddrCReprÁöv4Áöv6Áëùas_ptrÁë socket_addrÁû ëto_socket_addrÁÓtcpÁþþþþþþþþþþ þ þ þ þ þ new_for_addrÁþbindÁþconnectÁþlistenÁþ set_reuseaddrÁþacceptÁ’ ’ ÓudpÁ•••••••••• • •¾,•only_v6ÁÓudsÁ£££££££££datagramÁ¬¬¬¬¬¬¬¬¬¬ bind_addrÁ¬unboundÁ¬pairÁ£listenerÁ¹¹¹¹¹¹¹¹¹¹ ¹ ¹ ¹ ¹ ¹¹¹¹Ý.¹ü,Ì £streamÁÎÎÎÎÎÎÎÎ connect_addrÁÎý.£UNNAMED_ADDRESSÁ£ path_offsetÁ£ unix_addrÁ£ý.Û�Û ¶¶¶¶¶¶¶¶ ¶ ¶ ¶ ¶ ¶¶¶¶¶¶¶¶¶¶¶¶˜ ¶öâ ötry_ioÁø‚ø�ø ¶üÏüåüý¶€writeÁ� €write_vectoredÁƒ €flushÁ… ¶‡í2ˆ ‡ÿ2Š ‡š3Œ ¶Ž”¶� from_raw_fdÁ¶’°¶” into_raw_fdÁ¶–”¶ ˜Ô¶ š”¶ œâ œ¨2ž‚ž�ž ¶ ¢Ï¢å¢ý¶ ¦readÁ§ ¦ read_vectoredÁ© ¶«•5¬ «¦5® ¶°”¶²”¶´�4¶¶°¶¸ê3¶º”¶¼Ô¶¾”¶â ¶SenderÁÁÓ¶Ãñ¶ReceiverÁÅÓ¶Çñ\TokenÁÉ Éó\\\ÎŽ\Ðñ\\Ó•\ÕÝ\פ \ Ù–\ ÛÆÜÿ_Ž ÞÓ_àñj™#âÓj䎂IterÁæŒæÓæposÁ‚êŒêñ‚íŒíŽ io_sourceÁðððððððððð ð ð ð ð ðððIoSourceÁ���ƒ�Ó� selector_idÁð†�†˜ †ú(‰‚‰Ž† into_innerÁð���ë�Ãð‘�‘Åð”�”Ï”å”ýð™�™ñðœ UNASSOCIATEDÁœ˜ œ associateÁœcheck_associationÁœremove_associationÁð¢Žð SelectorIdÁ¤£'ð¦ñ“*¨Ù+©‰/ªªªªªªªªªª ª ª ª ª ªªªªªªªªªªªªªª TcpListenerÁÆÓªÈ¾,Èfrom_stdÁÈü,Ë Ì È local_addrÁÈset_ttlÁÈttlÁÈ take_errorÁªÒÏÒåÒýªÖñªØ�4ªÚ°ªÜê3ªÞ”ªàԪ┪ 䔩©ƒ0çççççççççç ç ç ç ç ççççççççççççççç TcpStreamÁ„Óç†Ê,†Ä>† peer_addrÁ†æ>†shutdownÁ† set_nodelayÁ†nodelayÁ†ø>†‡?†’?†peekÁ‘ †¨2“‚“�“ ç—•5˜ —¦5š 眕5� œ¦5Ÿ ç¡í2¢ ¡ÿ2¤ ¡š3¦ ç¨í2© ¨ÿ2« ¨š3­ ç¯Ï¯å¯ýç³ñçµ�4ç·°ç ¹ê3ç »”ç ½Ôç ¿”ç Á”©¨¨¨¨”-ÇÇÇÇÇÇÇÇÇÇ Ç Ç Ç Ç ÇÇÇÇÇÇÇÇÇÇ UdpSocketÁßÓÇá¾,áÄ>áæ>áðAásend_toÁæ á recv_fromÁè á peek_fromÁê ásendÁì árecvÁî áÓBð áÊ,á set_broadcastÁá broadcastÁáset_multicast_loop_v4Áámulticast_loop_v4Ááset_multicast_ttl_v4Áámulticast_ttl_v4Ááset_multicast_loop_v6Áámulticast_loop_v6Ááø>á‡?ájoin_multicast_v4Áájoin_multicast_v6Ááleave_multicast_v4Ááleave_multicast_v6ÁáÞ-á’?á¨2ƒ‚ƒ�ƒ LJχå‡ýÇ‹ñÇ��4Ç�°Ç‘ê3Ç“”Ç•ÔÇ—”Ç ™”¨¨í-œ .���������� � � � � ���������� UnixDatagramÁµÓ�·¾,¸Œ·Ý.·Ä>·Ê,¼Œ·î.·ý.¿ ·æ>·ðA·ýFà ·ºGÅ ·éFÇŒÇ ·©GÊ ·’?·‰B·¨2΂Î�Î �ÒÏÒåÒý�Öñ�Ø�4�Ú°�Üê3�Þ”�à”�âÔ� 䔜œ‰/çççççççççç ç ç ç ç çççççççççç UnixListenerÁÿÓç�¾,‚Œ�Ý.�Ä>�ü,�æ>�’?ç‰Ï‰å‰ýç�ñç��4ç‘°ç“ê3畔痔ç™Ôç ›”œœƒ0žžžžžžžžžž ž ž ž ž žžžžžžžžžžžžžž UnixStreamÁºÓž¼Ê,½Œ¼´0¼Ä>¼ý.Á ¼æ>¼ðA¼’?¼‰B¼¨2Ç‚Ç�Ç žË•5Ì Ë¦5Î žÐ•5Ñ Ð¦5Ó žÕí2Ö Õÿ2Ø Õš3Ú žÜí2Ý Üÿ2ß Üš3á žãÏãåãýžçñžé�4žë°ž íê3ž  ñ”ž óÔž õ”œ¨¨¨¨Æ8Æ8È8Ë8Í8Í8Ï8Ï8'8)8)8)8D8E8E8G8I8I8I8K8K8M8M8O8O8Q8S8T8V8V8V8X8Z8Á8Á8Á8ï8ñ8ñ8ô8Â8Ä8Ç8÷8ù8�8‚8ƒ8„8…8†8‡8ˆ8‰8Š8Š8Š8‹8‹8Ì8Ì8Ì8Ø8Ø8Ø8Ü8Ü8Ý8Ý8Þ8Þ8ã8ã8ã8�8Ÿ8¡8¢8£8¤8§8ê8ê8ê8²8²8³8³8´8´8ú8û8Ž8�8�8‘8’8¢8¶8Ë8Ì8Ö8Ù8Ú8Ä8Ä8Ä8÷8ø8ý8ý8þ8þ8ÿ8ÿ8�8�8ƒ8ƒ8ƒ8…8‡8ˆ8ˆ8Š8Š8Š8Œ8“8™8È8È8È8�8ž8£8£8¤8¤8¥8¥8§8§8©8©8©8«8¬8¬8®8®8®8·8½8Ï8Ñ8Ñ8Ñ8Ô8Ô8Ö8Ø8Ø8Ú8Ú8Ü8Ü8á8á8á8f8h8å8p8q8r8s8t8u8v8w8x8y8{8{8{8€8�8�8�8ì8ì8ì8ï8Š8‹8Œ8�8Ž8—8˜8›8›8›8£8£8¤8¤8¥8¥8¨8¨8©8©8ª8ª8‰8‰8�8“8–8–8—8—8˜8˜8›8›8›8§8§8§8Ÿ8Ÿ8 8 8¡8¡8£8Ë8Î8Ï8Ð8Ñ8Ó8Ó8Ô8Ô8Õ8Õ8×8×8×8Û8á8‰8Š8‹8Œ8�8Ž8�8�8‘8‘8“8˜8˜8š8š8š8œ8�8�8Ÿ8Ÿ8Ÿ8¢8¢8¤8¤8¤8¦8¨8©8©8«8«8«8­8°8°8±8±8²8²8´8´8´8¸8¾8ä8å8æ8æ8è8è8ê8ê8ì8ì8î8î8ð8ð8ò8ó8ô8õ8ö8÷8ø8ù8ú8û8ü8ý8ý8ý8þ8þ8ÿ8ÿ8ÿ8€8€8�8‚8ƒ8ˆ8ˆ8‰8‰8Š8Š8Œ8Œ8Œ8�8–8º8¼8Á8Â8Ã8Ã8Å8Å8Ç8Ç8Ê8Ê8Ì8Í8Î8Ó8Ó8Ô8Ô8Õ8Õ8×8×8×8Û8ã8„8†8‡8ˆ8Š8Š8‹8‹8Œ8Œ8Ž8Ž8Ž8’8š8¿8Ã8Ä8Å8Æ8Ç8Ì8Ì8Î8Î8Î8Ð8Ñ8Ñ8Ó8Ó8Ó8Ö8Ö8Ø8Ø8Ø8Ú8Ü8Ý8Ý8ß8ß8ß8á8ä8ä8å8å8æ8æ8è8è8è8ì8ô8¢ù ÀÀÁˆ Âó IÀ…úÓ [�Ç“o÷±“o“oÌ“oˆ“o…“o¯²“o“oí“oËÔ“o“oÊò“o“oŸg“o¢#>>»?Ý*ãg·‘A&"]ŸgÀpŸg@@ìAû*BŠ*\!,NÙhO„$ûp¢#ûpŸg½½“'¾£'Ö¿­'ÖþUfJgT„$Êq¢#ÊqŸgÈÈÉë'Êóý ¸’ůUþŸgààŽ áÐ%Ž+¢Dvn{ùߢ#ØrŸgääåÙ)çó €‰û=üRŒ¢—sŸgÁÁÏ6ÂÓ¶È7£#Õ׿¢Ýs� Ýs�  8Ýs¬Ýs­)­) ChildStdinÁ®)Ó†)ÆQæ£HN¤#Ýs¢#Ýs¦#Ýs¬í#í#ª î#Ð%Û#¬ݶÑ÷˜ÌÝs„$Ýs¬Ýs–uŸgÅÅò6ÆÓ¶_âÃŒ”òð¢åuçåuç 8åu¬åuÁ)Á) ChildStdoutÁÂ)Ó†) ¦4£”Bçà¬åuÑ)Ñ) ChildStderrÁÒ)Ó†) -™uî6–l¦#åu¢#åu¤#åu¬–uåu„$åu¬åu–uù ÉÉÊ–7Ëó úÛt ‰Pˆ†x…†xŸg†x�džx÷±†x†x̆x¯²†x†xí†xûh†x¬†xŸgÞÞŽ ßÓ_qS ÆÊR½|…ââ™#ãÓjWJ%üõ³EÀŸgàyŸg||}õój ¾™�«F�’†8ŸgææÎ8èÓ‚éê8‚škk_!?âÉŒ…×zŽP Œ††Å‡Ó‚T‹z,ó‚ø†ÄQ×zŸg®{¢ŸŸ BoxÁ£ó‹¤ô‹ljô²ßk#�ÅFÅFÆFGlobalÁ Ä› +ÉÑÜ"��ÿ9ƒƒð„Óð…§:ð׊æ5VÃe¹|é"ò|¢ò|Ÿgò|Ÿg¤¤×<¥£'ðs-âVØŽá…à}¢ÆÆœ>ÇÓªeÄk¸ŸgŸ~¦#Ÿ~¢#Ÿ~¤#Ÿ~¬–uŸ~„$Ÿ~¬Ÿ~–u¬å!å!æ!œ>ç!óÏ! t�+¼³-Ÿ~ç„„ÂA…Óç+.ûòö ã¬ç 8Ü� Ü� ‘€¢ÜŸgܦ#Ü¢#ܤ#ܬ–uÜ„$ܬܖu¬â!â!ã!ÂAä!óÏ! · !©+€”Ü¢ßß«FàÓÇVÄ"DHK‰ŸgÈ�¦#È�¢#È�¤#È�¬–uÈ�„$È�¬È�–u¬Í"Í"Î"«FÏ"ó½" êIÄ™ç…gÈ�¢µµÖL¶Ó�ú;:-Ñì)xŸg�ƒ¦#�ƒ¢#�ƒ¤#�ƒ¬‹G‹GŒGÖL�GóëF K ˆ�ÕàÙ>�ƒ¬–u�ƒ„$�ƒ¬�ƒ–u¢ÿÿºP€ÓçqñÇÔИŸgÒ„¦#Ò„¢#Ò„¤#Ò„¬ÛGÛGÜGºPÝGóÃG Jq¡«–=OÒ„¬–uÒ„„$Ò„¬Ò„–u纺¬S»ÓžèK¡Â$UóCç 8—†� —†� ̆¢—†Ÿg—†¦#—†¢#—†¤#—†¬¤H¤H¥H¬S¦HóæE Dÿážö‚Š—†¬–u—†„$—†¬—†–uÃÀÌÉÄÀÒÉÅÀÓÉÇÀÕÉÉÀÍÉÊÀÎÉäâíæ¢¤ÌÀ×ÉÎÀÙÉ#À&À(ÀH>U@À½ËÈâàèäÃÁÇÅÐÉàÞzâ€|êæš†™�¦¤ÖƳ„‹ßÖµ�ÿçºF>Y@ø½¦à’Á¶ÅÚÆ·„�ßÚµ‘ÿëºW@ö½˜Á¼ÅàÆ½„•ßâµ™ÿóº°äüÁ¢Å¦Ÿ”�ÒÆ¯„‡ßÒµ‰ÿ㺀Á‡ ¡„¨ ÕºÜ ŽÁ–í#šÁ°Å²Åºí#¾Å]Þí#âÆäå!»í#¿„Áâ!“í#—ß™Í"Þ‹Gàí#䵕ÛG—í#›ÿï¤Hñí#õº�Á¸ÅÜÆ¹„‘ßܵ“ÿíº”Á´ÅØÆµ„�ߨµ�ÿ麦ū —„œ ˺РÛÉ� ”æ��‘�ù ˜�Ç÷±Ìˆ…¯²#íËÔÊòŸg¢# š„$ P¢ D� M¬$¤#³¦#8ç8ûh$ŽPÄQÜ"é"H·ù ù ú ¬ü óÕ  >¨WTÑp™YF´�Z_ ù±´�´�v{ƒ„ÆHû “oБ ´�Æâ‘Î;î HR‡‘øˆÈ†Б%/(Š�Ë$)“o5Б=FPP‘ î“o&+ Å™�²‚²ƒ²LessÁ„²…²†²‡²ˆ²‰²GreaterÁв%ÑÓ¡yû›Í·Å™Ç™È™­É™Ê™àË™óG*¤�R{9 “”ББ“”#-î ;Fæ“QH·´�´�). î´�@EM Ï�“”ББâ‘�â‘•8î EOé–¿0b0001Á0b0010Á0b0100Á0b1000Á0b10000Áü™-ü¢"  Ä¢ ¹ D» 5ü�7 À ÆüñW“oD…´�Š-k_Áü¸ -üÁ "  ÄÁ û˜DÚ  0ü¯ 7 À å ü� W“oD¤ ´�…-k_Áüà-üé"  Äéû˜D‚ 0ü×7 À �ü¸W“oDÌ´�…-k_ÁüïAä‘d‘4‘´�! (˜ ¼ 8,˜ œl < ´�! (¨£�3,¨ ¬± üø6  Äøû˜ê& ­üæK À °·ü¨� “oDÓ“o$¹“o,¿´�dcc´�d´�Gî KvÌ»d¼4¼´�! (ã�3,à ÇZ DË Óô» Ø ßüŠU$¬“o$£ÍÌ´�Ì!A�Ìådæ4æ´�! (í£�3,í ñZ Dõ ýôå ‚  ‰ ü´U$Ö“o$ÍÍÌ´�Ì!A�¤†!d‡!4‡!´�! (Ž!£�3,Ž! ’!Z –! ™!̆! ž! ¥! üÚ K$÷ “o$î ÍÌ´�Ì!A�¤¢"d£"4£"´�! (ª"£�3,ª" ®"Z ²" µ"Ì¢" º" Á"!üö!K$“"“o$Š"ÍÌ´�Ì!A�ÌÈ#dÉ#4É#´�! (Ð#£�3,Ð# Ô#Z DØ# à#ôÈ# å# ì#"ü—#U$¹#“o$°#ÍÌ´�Ì!A�|è$í$ $è$,ñ$Tí$ý$%üº$C“o$Ù$“o$Ã$“o,É$î BȪŒ,ô%|ó% ÎÔ“o“o-,ü%+Œó%´�Ôê%´�‹&'ü¸%Sß% “oLÈ%“o,Ó%´�f“o�“oµ*î .[î«Îü‰¶'D�¶ £�4‰¶$™¶,Ÿ¶L¦¶ü�¶ ¶¶KüÛ³Û¨)£ ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw�7�7ErrorÁž7½ Ù6wQ?mˆ!؆t«´ ûp,î³ Ô­4õ³†x,…´“oL“´.¦-õ0 interestsÁ<έzü�Ë)TˆË ¤Ô­4�Ë$“Ë,™ËL ËüˆË"°ËMüÏÈá¨+£ ²®t¡É¾¯,äÈ˯4ëȆx,ûÈ“oL‰É+¦-õ0—¯4‚Ö°é¼³ÝTºÝ ¥Ô­4³Ý$ÅÝ„ºÝÐÝOü€ÜШ-£ ²®t¯Ü¾¯,•Ü˯4œÜ¦S˲¨(7º  H7ù €´Ÿy( ŸgX7ˆ €´ –u(  4 »´¡¦ Ûg·¼©®qvØ7¿Áñ ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwĤĤŤŽ® Ñâó:½ÖàMu Êq€ €g€gŠ‚gê ûcƒgbufÁûcØ«q¢1ȡǀ´Ð€´Á»´Ê ŸyÕ€´œ»´¥  –u³ô·¼ œ.9Õ·»´/ò·»´÷šµX,û  û Ž#‚ ¹|9A†Øü æÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwŽ„¯lÕ ÔÔÕÓ( >ñZ—¯�,½õ¸ Äý¸Êû¸ (œ+ioÁ0âï¸E(£Ë €´@£ñ €´§B§BFileÁ¨BÓéÏDǃÕ.{Xd»´�” Ùg¥ª—œ¼£ÐãÖçµâ Ørìó¶ô€´ü€´ì»´ô  ỵ½ -œ;F³½»´<½¼[Ÿy8ÁŸy8Á(¥Ù €´h¥ù $»´OT çgejWw¥Þê‘çµ� ääåÙ)çó €‰û=üRÕó¶Ý€´å»´Õ  ܾã¥Àë œ%£À»´Œ¿:Ÿy8Á÷Ø Ÿy5BO   ùüØ#ØèÁ,ï¬Á›¬Á£®Áø¬ÁµI_Á% ÜêØ‡¬Á®ÁdŸy2ÁŸy2ÁŸy2Á(º®8 €´¨ºÎ8 €´��ÿ9ƒƒð„Óð…§:ð׊æ5VÃeá»p|»´§¬½¼¹¾«°Ðº³8Äêçµö Ýsó¶ €´€´»´   ©Ä–Æ$FœT_”Æ»´U½¼tTËL©Ä<ÜL û‚� á»ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw”Ç„¯UÿŽÇÌËL,ÖL ‰á»ûŽÇ”Ç�LJȔÇàÑtÖLêLøüÛK�®ÇlÿKåÅ,ïKŽÇ öK–Æ5«È*'œ*X¡ÈÁ àLŽÇàL Ž#ŽÇ1%-ãLûº®ÇßL«Èѵ½ ÝLŽÇ„œ×ŽÇû€Ê‘œ(»Ù` €´¨»û` €´©Ä*6»´af½¼sxejŠ»Þ`Ȥ絰 åuºó¶Â€´Ê€´º»´”ÆÊ–ÆÒóœ ”Æ»´½¼ Tüt©Ä<�u ¡ŽÇ”Ç�LJÈÌüt,‡u ‰á»¡ŽÇ”Ç�LJȔÇtet‡u›užüŒt�®Çl°tÇÌ, tŽÇ §t–ÆÉ“ν%œ(V‰Î¿ ‘uŽÇ‘u€Ê(Ý&”u¡E®Ç�u“Î\µ½ ŽuŽÇ}œÎŽÇ†€ÊŠœ(¿ü&¿�'Ï&+†x7 †xAJT(Àƒ'  €´HÀÂ'Ÿy!»´LQŒ¿^cPpÀˆ'ÑŠçµ–­Ñžó¶¦€´®»´ž Õ·©Õ·±Òœßé�Ó»´ÞŒ¿üHÁÂ'ŸyŸy&Á“'ÔHÁŠ'­Ñ­ÑŸyoŸyv5î BL—'Ö•' ­Ñ&0PÙ'  î†x', Å™“”ã'ØZ˜•f­Ñn­Ñv“”~‡î ”žåÕ¨HÄÂ'ŸyŸy(- îŸy>CKĨ'ÚÄ¥'“”­Ñ­Ñ Õ·�Õ·•9î FP¼×¿HÅÂ'Ÿy ühŸyÿ3 Ū'DÅ®'Ü&1­Ñ9 þØDÕ·„UƒblõØ®(Æø €´ˆÆ— €´Ør)5»´`e½¼rwdi‰Æýá£çµ¯ ¬y¹ó¶Á€´É€´¹»´Á ‰½̉½Ôõœ êÛ»´½¼"ˆÇ£ÌÌ epoll_eventÁͨΫbÐ8aƒÌÞJTY †ÍÜks(Çï âÇôå-ày8 àyBÍÜ ÍÜÍ^h™Ýê\ï,ÍÜü×,$¼×, ‡. �-vü«,V$È,ïÝ,¾,�Þn4ÕÞu(ȼ  €´ˆÈå €´ ®{,»´PÈü  €´ Ÿy)  5 »´�¢šµ¯´¡¦nsÐÈÁìê çµö ææÎ8èÓ‚éê8‚škk_!?âÉ9ó¶B€´K€´<»´E „àQ€´»´&�Ó/Õ·8—œ¥°¨â»´¦�Ó»´sšµÏˆÉå„àPÉüŸy(Éà æÉÈï2Âá>ÀáF„à“¨â›ŸyÕ·‡nx †„àÍ †ŸyµD‡! ÀÀUniqueÁ¿ µÃ_markerÁµ´]8"»Oÿ¹|®®«°¿ ”3¯f*²Û�¹| ¹|œü‡!-D�! £¹|ÇD™!,£!Lª!ü�!$º!¨üõŲ®tî  ø{LŠ ¾¯D� †x,º “oLÐ  ¹|Cø{0›æ8AÝDõH—¯M�¿æìDÔ"  åë囿(üÔ"/TÝ" ¤¹|SDè",ò"Lù"üÝ"&‰#©üÀ!ɲ®t»"™çL×!¾¯Dê!†x,‡"“oL�"ÁçËø{-›æ5>ÝAõE—¯JŠîèçDÙ#  åë囿(ìÙ#Tâ# ¥¹|RDí#¤â#ü#ªü�#m²®tÀ#™çL�#¾¯D¨#Áç¨ø{›æ#,Ý/\—ë©T· ˜º\Ë ¹|ü· ,  ع|õ¸†ºL È D¬Â Ý ‰üÆ— ·¹lé ò|,Ù õ¸ à –ºªý¸ž%œ(Xõì³\‹ ¹|œ �üà< ý¸ló Íí,é  .|” ¹|© “üÝL ÁçŒø ò|Lê  0„‰ à}ü‰$ Lš  Ÿ-D¤ œš øµ‰%   �%²®L$)5HT¸ ˜ºTõ ¹|´õ L€  £#¹| / \€ ¶­ [ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¸Ä¬©^—¯f„¯$ˆ �%²®éñ žHü¸T DÐ  Ü DÙ ,ã Lê   üÐ< ’ –üÖ¼ ü‰%  ²®tÏ ÃïLë ¾¯Dþ †x,› “oL± ÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^éñU²®Ž à}®ÏéñØ ˜º7ý¸3ÂÝÅõÉ—¯ÎÆ 4 ŽJ‘ð,Áð¹ñ‘áò‘óÈ„Í à}üÍ, ŒÞ   -Dð ÜÞ ø·Í-  ÁðF#/BT„ ˜ºTà ¹|´Ã LÎ ¹ñ * \Î ¸ù [éñ³!áò -Ìü„V Tœ  Ý ¢D§ ,± L¸  ’üœ> à —ü˜È š ¦üÍ-  ²®t“ ÃïL¯ ¾¯D †x,ß “oLõ ³ôƒ²®¼•õÚéñ±õfDý¸bmÝpõt—¯yÆ h ŽÈ˜ñúöSÁð*¹ñ¾áò8ýøl„Ñ à}üÑ- ”â  ¡-Dõ äâ ø¹Ñ.  ÁðF#/BT‰ ˜ºT© ¹|´© L´ ¹ñ * \´ ºþ [éñ³!áò-Ìü‰ 7 T”  Þ¢DŸ  „ü” , Æ ˜üæà Œ’˜üÑ.  ²®t— ÃïLô ¾¯Dÿ ³ôc²®œ•õºæéñî±õD"ý¸@YÝ\Æ +Ž™ëŠüÁðí¹ñ�áòû�þ/Té0 ¹|Œé0 ô0   g¹|/ ø0 4ô0 €1 ›ü¦0Z çµ\Ó0 Íí,­0 ó¶ ´0 ý¸…œ MÜ€š(Ëâ1   €´xË‚2  €´ÿ`ÿ`V�a¬â`½68ŸœRtŸyVb»´�’½¼Ÿ¤‘–¶Ëç1 §ÐçµÜ•õäó¶ì€´ô€´ä»´ì  ±‚úýƒ$œ2=ûƒ»´3½¼RŸy0ÁüÉ4$  „É4  • ”Ú4 �Ÿy 9ü¬4L ¤ ÷4 þ4 žü…4y à}T—4 ±‚ˆo�ŸyTžT ��ÿ9ƒƒð„Óð…§:ð׊æ5VÃeŒ�<¯T  –ŽÇ”Ç Œ�®ÇUÿ‡ÈÌžT ,©T  ‰Œ�–ŽÇ”Ç€‡‡È”ÇÍxt©T ½T “ü®S� ®ÇlÒS Ü,ÂS ŽÇ ÉS  œ†'¹‡Ö)œ,\¯‡Å ³T ŽÇ³T €Ê(‰&¶T –^®Ç²T ¹‡u Œ� °T ŽÇ€œÕŽÇ¢€Ê�œTÓµ ��ÿ9ƒƒð„Óð…§:ð׊æ5VÃeЂ<äµ  †ŽÇ”Ç Ђ®ÇUÿ‡ÈÌÓµ ,Þµ  ‰Ђ†ŽÇ”Ç—‹‡È”ÇÑ{tÞµ òµ ƒüã´� ®Çl‡µ È�,÷´ ŽÇ þ´  ²Š2Ò‹à+œ-aÈ‹Î èµ ŽÇèµ €Ê*«!'ëµ †k®Ççµ Ò‹ƒ Ђ åµ ŽÇ…œÛŽÇ±€Ê‘œü¦̦ „FŒ$À)øÇ¦   �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÚKÚK SocketAddrÁÛKaddrÁæEÜK¶æEç*™P“f„¯ã»ÀÌßü¦ mÜ�,èôмРº'ÈÅ[éñ[" �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw�ƒ„¯éñ‹Òô¸üФü›Y¾ÄÊ) ä‘ÄøÞŽ$ìÜ�$ŸÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^éñÜ�Œ��Å^éñgÜ�É Ü�°ª ŸùŽ£Æ  Ž ØŽ/‡�¡‘òÞ‘TË  (��ÿ9ƒƒð„Óð…§:ð׊æ5VÃeîƒÄË  Þ"Ε›"$Þ  J<Ö  –GÞŽåAlÖ é ü€ i è ¼5²®t²  �ƒ,Ÿ ÞŽ$¦  îƒê ΕwÞŽ×s:ª =Ÿ¦–.ð–5ÞŽ«TµΕüÆ  ÉÞŽ îƒÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwŸy„¯UÿèÁÞŽüµ2,À ‰îƒÉÞŽŒ™õ™ŸyÚËüÀ'íÇüÛ’�™Œ™æ—,úèÁ�ÞŽ$�ˆ˜: š/1”¶5ª 8p–šÖÜèÁ$áÞŽÄÎ<Ô ¤GÞŽ,ÎJ<”ÔæÉä�™Í šûý—,ÇÞŽˆèÁÓ”¶èÁª %ÞŽOžœ¿ _ref__bufÁª T‘4Ε<¢4 юǔǑ™®ÇUÿ‡ÈÌ‘4,œ4 ‰îƒÑŽÇ”Ç—ž‡È”Ç~otœ4°4Îü¡3�®ÇlÅ3æ—,µ3ŽÇ ¼3ˆ˜ÓÇžÇ%œ(V½ž¿ ¦4ŽÇ¦4€Ê(+&©4ÑO®Ç¥4Çžfý— £4ŽÇ}œÎŽÇ�€ÊŠœüÇÌÇØŽ$á!øÉÇ  ‡�>#/BüÇ mÜ�,‰ôñ¼ñ „'Êæ[éñ¾! �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÒ„„¯éñŠ4•‚üñ¤ü¼Y½ÃÉ( ž£Ä™ÞŽ$�Ü�$À¯“���Î éñÜ�w¬”[ª KùŽOÆ KްµØŽ4‡�Ü¢œ˜£!üïÌïØŽ$‰!øËï  ‡�>#/Büï mÜ�,²ü™Ä™ ¿( ÌŽ[éñ¿! �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw—†„¯éñŠ5¾½ü˜¦üäZ½ÃÉ) ö§´ÃÞŽ$·Ü�$诓ž��Ï éñÜ�x¬”\ª KùŽOÆ KޱµØŽ5‡�´§�ð§"T¨+��ÿ9ƒƒð„Óð…§:ð׊æ5VÃeª‡<¹+ ÊŽÇ”Ç ª‡®ÇUÿ‡Ę̀+,³+ ‰ª‡ÊŽÇ”ÇÉ«‡È”ÇÍxt³+Ç+Çü¸*�®ÇlÜ* —†,Ì*ŽÇ Ó* åª(‚¬×)œ,]ø«Æ ½+ŽÇ½+€Ê(Ó1&À+Ê_®Ç¼+‚¬v ª‡ º+ŽÇ€œÕŽÇ£€Ê�œœ£ ÀÁ'“o2´�:AÐ?ë ÈÉ(Ÿr3:A¼á äå)Õ¿5ܾ=D„±' ÉÊ'†x2Ÿy9@¼À@ |}'||}õój ¾™�«F�’†^�Þfm*[\_i·¾¿ð¨‰Å4ú †°­ˆ D” À±»$­ >³ìD³ @´–7,Í Éµ–7ÊµŽ ,ŸÞ¶üÊOü³OL Mio is a fast, low-level I/O library for Rust focusing on non-blocking APIsÁüƒPM and event notification for building high performance I/O apps with as littleÁüÔ2/ overhead as possible over the OS abstractions.Á‡�\‹ # UsageÁ—�ü›OL Using Mio starts by creating a [`Poll`], which reads events from the OS andÁüëMJ puts them into [`Events`]. You can handle I/O events from the OS with it.Á¹�ü½" For more detail, see [`Poll`].Áà�üä%" [`Poll`]: ../mio/struct.Poll.htmlÁüŠ/, [`Events`]: ../mio/event/struct.Events.htmlÁº�|¾ ## ExamplesÁÎ�üÒPM Examples can be found in the `examples` directory of the source code, or [onÁd£ GitHub].Á°�ü´EB [on GitHub]: https://github.com/tokio-rs/mio/tree/master/examplesÁú�dþ ## GuideÁ‹�ü�A> A getting started guide is available in the [`guide`] module.ÁÑ�ÌÕ ## Available featuresÁï�üóDA The available features are described in the [`features`] module.ÁüŽ#tŸ*[\_i·¾¿ð¨‰<Å=†°­ˆ <À±»;>³ì:@´–79ɵ–7JÊµŽ 9Þ¶ÅÈËT‚ 4† Ķ \à  Ï €  Õ ä , Ö  × â , Ø 8›$Ù & Ý 8›$Þ  ã *æ  é þ , ó  ô ÷ + ‚  ƒ œ 8ì„  ‡ › 8Ó<ˆ � 7Ø L’ + ª  « Û 8îD¬  ´ Ú 8docsrsÁ4µ $ » 8å½  À Ù 8ìÁ  Ä Ø 8Ó<Å Í 7Ø LÏ , é 8›$ê ø äª |·  Ç ¾  Í Ü , Î  Ï Ú , Ð 8›$Ñ & Õ 8›$Ö  Û *Þ  á ¼ , ë  ì µ + ú  û ™ 8ìü  ÿ ˜ 8Æ €  ƒ — 8Ó<„ Œ 7Ø LŽ , § 8›$¨ ¶ ¼æ Tó  þ ­  „ “ , …  † ‘ , ‡ 8›$ˆ & Œ 8›$�  ’ *•  ˜ « , ¢  £ ¤ + ±  ² Ê 8ì³  ¶ É 8Ó<· ¿ 7os-extÁDÁ + Ø  Ù ˆ 8îDÚ  â ‡ 8‘¿4ã $ é 8åë  î † 8ìï  ò … 8Ó<ó û 7ÚÃDý , – 8›$— ¥ ¤Ò <ß  ç �  í ü , î  ï ú , ð 8›$ñ & õ 8›$ö  û *þ  � Ž , ‹  Œ ‡ + š  › ° 8ìœ  Ÿ ¯ 8Ó<  ¨ 7“*,ª + ¾  ¿ ë 8îDÀ  È ê 8‘¿4É $ Ï 8åÑ  Ô é 8ìÕ  Ø è 8Ó<Ù á 7“*,ã , ù 8›$ú ˆ Ôþ l‹  ™ Š  Ÿ ® ,    ¡ ¬ , ¢ 8›$£ & § 8›$¨  ­ *°  ³ ˆ , ½  ¾ � + Ì  Í † 8ìÎ  Ñ … 8ÁÒ  Õ „ 8Ó<Ö Þ 7“*,à $ å 8ªç  ê ƒ 8Ì$ë $ ï 8Ó<ñ ù 7ÚÃDû + ”  • å 8îD–  ž ä 8‘¿4Ÿ $ ¥ 8å§  ª ã 8ì«  ® â 8Á¯  ² á 8Ó<³ » 7“*,½ $  8ªÄ  Ç à 8Ì$È $ Ì 8Ó<Î Ö 7ÚÃDØ , ó 8›$ô ‚ ÜÝ tê  ù Ô  ÿ Ž , €  � Œ , ‚ 8›$ƒ & ‡ 8›$ˆ  � *�  “ Ò , �  ž Ë + ¬  ­ Û 8ì®  ± Ú 8Á²  µ Ù 8Ó<¶ ¾ 7ÚÃDÀ $ È 8Ó<Ê Ò 7“*,Ô + é  ê ¯ 8îDë  ó ® 8‘¿4ô $ ú 8åü  ÿ ­ 8ì€  ƒ ¬ 8Á„  ‡ « 8Ó<ˆ � 7ÚÃD’ $ š 8Ó<œ ¤ 7“*,¦ , ½ 8›$¾ Ì ”× ,ä  ê £  ð ú , ñ  ò ø , ó 8ª ô & õ 8ýö  ù *ü  ÿ ¡ 8ô‰  Œ  � › 8Õ,Ž $ “ , •  – ™ , — 8ª ˜  š Œ¦ $³  ¸ ð  ¾ È , ¿  À Æ , Á 8ª  & à 8ýÄ  Ç *Ê  Í î 8ô×  Ú  Û è 8º$Ü $ à , â  ã æ , ä 8ª å  ç ”ó ,€  † ¿  Œ – , �  Ž ” , � 8ª � & ‘ 8ý’  • *˜  › ½ 8ô¥  ¨  © · 8è,ª $ ¯ , ±  ² µ , ³ 8ª ´  ¶ „Â Ï  Ó Á  Ù ò , Ú 8levelÁ,Û & à 8Ý,â $ ç , é  ê ð , ë 8ª ì & í 8ýî  ñ *ô  ÷ ¿ + �  ‚ — 8ìƒ  † – 8Ó<‡ � 7ô,‘  ¡ ¹ 8ô£ '¦ , ¨ 8äÕ,©  ®  ¯ ¶ , °  ± ´ , ² 8ª ³  µ % · + ñ  ò Œ 8ìó  ö ‹ 8Æ ÷  ú Š 8Ó<û ƒ 7ô,…  – ¹ 8˜ 8 ,›  ¡ · 8£ 8 § ©  « ´ , ­  ® ± , ¯ 8ª °  ² % µ d� D“ ÀÁ NonZeroU8ÁLºåñ#¾,â (µ!œ7)+”ÝDã”úD€lÌÒläê”üD‚l›“o !"äñü¯=: Returns a `Interest` set representing readable interests.ÁDû“oä� üÎ=: Returns a `Interest` set representing writable interests.ÁDš “oä¸ü¯HE Returns a `Interest` set representing priority completion interests.ÁÅlinuxÁœ†Å¸ ¬›ü…,üü7D“oü¨3ü•  Add together two `Interest`.Áº�üÂDA This does the same thing as the `BitOr` implementation, but is aÁ´‹ constant function.Á¦�<® ```Á´º use mio::Interest;ÁÕ�üÝKH const INTERESTS: Interest = Interest::READABLE.add(Interest::WRITABLE);Áü­2/ # fn silent_dead_code_warning(_: Interest) { }Áüä)& # silent_dead_code_warning(INTERESTS)Á<’Šà/üËXHthis returns the result of the operation, without modifying the originalÁµ“o“o“oBÿȪ/Oî 8Oü±8ü½+( Removes `other` `Interest` from `self`.Áí�üõDA Returns `None` if the set would be empty after removing `other`.Á¾�<ÆŠà´Òšàí�üõNK const RW_INTERESTS: Interest = Interest::READABLE.add(Interest::WRITABLE);ÁÈ�üÐ=: // As long a one interest remain this will return `Some`.Áü’FC let w_interest = RW_INTERESTS.remove(Interest::READABLE).unwrap();ÁüÝ'$ assert!(!w_interest.is_readable());Áü‰&# assert!(w_interest.is_writable());Á´�ü¼>; // Removing all interests from the set will return `None`.Áüÿ<9 assert_eq!(w_interest.remove(Interest::WRITABLE), None);ÁÀ�üÈ>; // Its also possible to remove multiple interests at once.Áü‹85 assert_eq!(RW_INTERESTS.remove(RW_INTERESTS), None);Á<ÈŠà/üÔX•â4¸“o“ořǙș­É™Ê™àË™óG*¤�R{9 “oBÿ $¿î ,ÅüŠ&ü»:7 Returns true if the value includes readable readiness.Á/\ú\—“oBÿ ^Pü´&üå:7 Returns true if the value includes writable readiness.Á/\¤\Á“oBÿ dQüÚ !ü� 63 Returns true if `Interest` contains AIO readiness.Á/\Ê 4ç “oBÿ jRüö!!ü«!63 Returns true if `Interest` contains LIO readiness.Á/\æ!4ƒ"“oBÿ !pSü—#&üÇ";8 Returns true if `Interest` contains priority readiness.Á/\‡#\¤#“oBÿ "vTäð#“o$%ÍÔÎÔ%\“$4˜$##“oüº$#,½$“o“o“oBÿ## %Uî Uü�%"“o'Ìò'ü¸%'d»%„  „ “o“oBÿ& È%& '$Í%î îUä�&“o) g)ü²&:µ&… † ‡  … “o † €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡‡ çµBÿ( ¹&( )$º&ñÀ&D� $¡ >@¨ $©„$*,¸<¯¢#*-Ø T¸®L*.ô,Ä¡#*/ AtomicBoolÁT·‡a*1²DÓ�*2K°„K*3DurationÁDÄȲ*4ñؾ,*6ÿ¹Ý‰*7Æ,ïi*9ëö[*:Å4û†*;°­ˆ DƒÀ*<±–7,�É*=µ–7Ê*=µ\›Ì$mio_unsupported_force_poll_pollÁüü! Å€ ŒTÅespidfÁ¤oÅnuttxÁœ�ÅfuchsiaÁ¬ªÅhaikuÁœÉÅî¤æÅhurdÁ”„ÅntoÁŒ Å± ”»ÅcygwinÁ¤×ÅhorizonÁ¬õüJÆüFËü ‹ü–UÌèöãá Å€ ßŦ÷ÙÅ·÷ÔÅÈ÷ÌÅÛ÷ÆÅîÄÅø÷¿Åˆø»Å± ¹Å£ø²Åµøª¨¥¢ŸñáÌ èö‚� Å€ €Å¦÷{Å·÷wÅÈ÷pÅÛ÷kÅîjÅø÷fňøcű bÅ£ø\ŵøUTRPNŽ~ÌPèö21 Å€ 0Ŧ÷+Å·÷'ÅÈ÷ ÅÛ÷ÅîÅø÷ňøÅ± Å£ø ŵøþ+Ìèöâá Å€ àŦ÷ÛÅ·÷×ÅÈ÷ÐÅÛ÷ËÅîÊÅø÷ÆÅˆøÃű ÂÅ£ø¼Åµøµ´²°®ÈŒ£¬„ÖÅŠ”ðŵø¬„üï+üë0üÕGüÌRð¬AÅŠ?ŵø=;852¬sÅŠqŵøomjgd>t¥¬„ØÅŠ”òŵø¬†üñ+üí0ü×GüÎRpœ¹\ÒORAD,ç8;,/ # úý|Œ[ü–85 Polls for readiness events on all registered values.ÁÏ�üÓLI `Poll` allows a program to monitor a large number of [`event::Source`]s,Áü OL waiting until one or more become "ready" for some class of operations; e.g.ÁüðNK reading and writing. An event source is considered ready if it is possibleÁü¿FC to immediately perform a corresponding operation; e.g. [`read`] orÁt†  [`write`].Á• �ü™ NK To use `Poll`, an `event::Source` must first be registered with the `Poll`Áüè HE instance using the [`register`] method on its associated `Register`,Áü± KH supplying readiness interest. The readiness interest tells `Poll` whichÁüý LI specific operations on the handle to monitor for readiness. A `Token` isÁüÊ MJ also passed to the [`register`] function. When `Poll` returns a readinessÁü˜ JG event, it will include this token. This associates the event with theÁüã *' event source that generated the event.ÁŽ �ü’ 0- [`event::Source`]: ./event/trait.Source.htmlÁüà 52 [`read`]: ./net/struct.TcpStream.html#method.readÁüù 74 [`write`]: ./net/struct.TcpStream.html#method.writeÁü±63 [`register`]: struct.Registry.html#method.registerÁè�tì # ExamplesÁû�üÿ=: A basic example -- establishing a `TcpStream` connection.Á½�,ý\÷```ÁäÔ # use std::error::Error;Áüñ/, # fn main() -> Result<(), Box> {Áü¡-* use mio::{Events, Poll, Interest, Token};ÁäÏ use mio::net::TcpStream;Áì�üð%" use std::net::{self, SocketAddr};Á–�üš*' // Bind a server socket to connect to.ÁüÅ2/ let addr: SocketAddr = "127.0.0.1:0".parse()?;Áüø/, let server = net::TcpListener::bind(addr)?;Á¨�ü¬MJ // Construct a new `Poll` handle as well as the `Events` we'll store intoÁüú  let mut poll = Poll::new()?;Áü›1. let mut events = Events::with_capacity(1024);ÁÍ�ÌÑ // Connect the streamÁüë?< let mut stream = TcpStream::connect(server.local_addr()?)?;Á«�ü¯&# // Register the stream with `Poll`ÁüÖ^[ poll.registry().register(&mut stream, Token(0), Interest::READABLE | Interest::WRITABLE)?;Áµ�ü¹KH // Wait for the socket to become ready. This has to happen in a loop toÁü… // handle spurious wakeups.ÁT¥ loop {Áü°&# poll.poll(&mut events, None)?;Á×�ôÛ for event in &events {ÁüúA> if event.token() == Token(0) && event.is_writable() {Áü¼OL // The socket connected (probably, it could still be a spuriousÁÔŒ // wakeup)Áô§ return Ok(());ÁlÆ }ÁLÔ }Á,Þ }Á<ä # }Á<ìŠàô�Œø # PortabilityÁŠ�üŽLI Using `Poll` provides a portable interface across supported platforms asÁüÛ>; long as the caller takes the following into consideration:Áš�¼ž ### Spurious eventsÁ¶�üºEB [`Poll::poll`] may return readiness events even if the associatedÁü€EB event source is not actually ready. Given the same code, this mayÁüÆNK happen more on some platforms than others. It is important to never assumeÁü•JG that, just because a readiness event was received, that the associatedÁüà# operation will succeed as well.Á„�üˆLI If operation fails with [`WouldBlock`], then the caller should not treatÁüÕNK this as an error, but instead should wait until another readiness event isÁl¤ received.Á²�Ô¶ ### Draining readinessÁÑ�üÕKH Once a readiness event is received, the corresponding operation must beÁü¡ NK performed repeatedly until it returns [`WouldBlock`]. Unless this is done,Áüð NK there is no guarantee that another readiness event will be delivered, evenÁü¿!52 if further data is received for the event source.Áõ!�üù!2/ [`WouldBlock`]: std::io::ErrorKind::WouldBlockÁ¬"�ä°" ### Readiness operationsÁÍ"�üÑ"JG The only readiness operations that are guaranteed to be present on allÁüœ#NK supported platforms are [`readable`] and [`writable`]. All other readinessÁüë#HE operations may have false negatives and as such should be consideredÁü´$JG **hints**. This means that if a socket is registered with [`readable`]Áüÿ$MJ interest and either an error or close is received, a readiness event willÁüÍ%GD be generated for the socket, but it **may** only include `readable`Áü•&GD readiness. Also note that, given the potential for spurious events,ÁüÝ&NK receiving a readiness event with `read_closed`, `write_closed`, or `error`Áü¬'JG doesn't actually mean that a `read` on the socket will return a resultÁü÷'! matching the readiness event.Á™(�ü�(PM In other words, portable programs that explicitly check for [`read_closed`],Áüî(EB [`write_closed`], or [`error`] readiness should be doing so as anÁü´)MJ **optimization** and always be able to handle an error or close situationÁü‚*.+ when performing the actual read operation.Á±*�üµ*>; [`readable`]: ./event/struct.Event.html#method.is_readableÁüô*>; [`writable`]: ./event/struct.Event.html#method.is_writableÁü³+85 [`error`]: ./event/struct.Event.html#method.is_errorÁüì+DA [`read_closed`]: ./event/struct.Event.html#method.is_read_closedÁü±,FC [`write_closed`]: ./event/struct.Event.html#method.is_write_closedÁø,�Üü, ### Registering handlesÁ˜-�üœ-HE Unless otherwise noted, it should be assumed that types implementingÁüå-MJ [`event::Source`] will never become ready unless they are registered withÁ\³. `Poll`.Á¿.�„Ã. For example:ÁÔ.�,”/\Ž/¾‹äë/Í‹œˆ0 # use std::net;Áüœ0/ó‹üÌ0%" use mio::{Poll, Interest, Token};Áäò0âŒì�1 use std::net::SocketAddr;Áä­1 use std::time::Duration;Á¤Ê1 use std::thread;Áß1�üã152 let address: SocketAddr = "127.0.0.1:0".parse()?;Áü™241 let listener = net::TcpListener::bind(address)?;ÁüÎ2?< let mut sock = TcpStream::connect(listener.local_addr()?)?;ÁŽ3�ü’3*' thread::sleep(Duration::from_secs(1));Á½3�äÁ3 let poll = Poll::new()?;ÁÞ3�üâ3NK // The connect is not guaranteed to have started until it is registered atÁŒ±4 // this pointÁüÃ4\Y poll.registry().register(&mut sock, Token(0), Interest::READABLE | Interest::WRITABLE)?;Á„ 5 # Ok(())Á<±5þ–<¹5ŠàÁ5�¼Å5 ### Dropping `Poll`ÁÝ5�üá5NK When the `Poll` instance is dropped it may cancel in-flight operations forÁü°6OL the registered [event sources], meaning that no further events for them mayÁü€7PM be received. It also means operations on the registered event sources may noÁüÑ7MJ longer work. It is up to the user to keep the `Poll` instance alive whileÁüŸ8,) registered event sources are being used.ÁÌ8�üÐ8.+ [event sources]: ./event/trait.Source.htmlÁÿ8�üƒ9&# ### Accessing raw fd/socket/handleÁª9�ü®9HE Mio makes it possible for many types to be converted into a raw fileÁü÷9NK descriptor (fd, Unix), socket (Windows) or handle (Windows). This makes itÁüÆ:JG possible to support more operations on the type than Mio supports, forÁü‘;LI example it makes [mio-aio] possible. However accessing the raw fd is notÁÔÞ; without it's pitfalls.Áù;�üý;MJ Specifically performing I/O operations outside of Mio on these types (viaÁüËA> guarantee cross-platform behaviour if it can control the I/O.Áû>�üÿ>1. [mio-aio]: https://github.com/asomers/mio-aioÁ±?�üµ?KH *The following is **not** guaranteed, just a description of the currentÁü�@RO situation!* Mio is allowed to change the following without it being consideredÁüÔ@OL a breaking change, don't depend on this, it's just here to inform the user.Áü¤AOL Currently the kqueue and epoll implementation support direct I/O operationsÁüôAHE on the fd without Mio's knowledge. Windows however needs **all** I/OÁü½BHE operations to go through Mio otherwise it is not able to update it'sÁü†C63 internal state properly and won't generate events.Á½C�üÁC1. ### Polling without registering event sourcesÁóC�÷C�üûCK�ÂüÇDGD situation!* Mio is allowed to change the following without it beingÁü�EPM considered a breaking change, don't depend on this, it's just here to informÁüàEMJ the user. On platforms that use epoll, kqueue or IOCP (see implementationÁü®FLI notes below) polling without previously registering [event sources] willÁüûFMJ result in sleeping forever, only a process signal will be able to wake upÁ|ÉG the thread.ÁÙG�üÝGIF On WASM/WASI this is different as it doesn't support process signals,Áü§HJG furthermore the WASI specification doesn't specify a behaviour in thisÁüòHHE situation, thus it's up to the implementation what to do here. As anÁü»IMJ example, the wasmtime runtime will return `EINVAL` in this situation, butÁü‰JHE different runtimes may return different results. If you have furtherÁüÒJOL insights or thoughts about this situation (and/or how Mio should handle it)Áü¢K2/ please add you comment to [pull request#1580].ÁÕK�üÙK)& [event sources]: crate::event::SourceÁüƒLB? [pull request#1580]: https://github.com/tokio-rs/mio/pull/1580ÁÆL�ÔÊL # Implementation notesÁåL�üéLFC `Poll` is backed by the selector provided by the operating system.Á°M�ü´M! | OS | Selector |ÁüÖM! |---------------|-----------|ÁüøM! | Android | [epoll] |ÁüšN! | DragonFly BSD | [kqueue] |Áü¼N! | FreeBSD | [kqueue] |ÁüÞN! | iOS | [kqueue] |Áü€O! | illumos | [epoll] |Áü¢O! | Linux | [epoll] |ÁüÄO! | NetBSD | [kqueue] |ÁüæO! | OpenBSD | [kqueue] |ÁüˆP%" | Solaris | [event ports] |Áü®P! | Windows | [IOCP] |ÁüÐP! | macOS | [kqueue] |ÁòP�üöPJG On all supported platforms, socket operations are handled by using theÁüÁQKH system selector. Platform specific extensions (e.g. [`SourceFd`]) allowÁü�RIF accessing other features provided by individual system selectors. ForÁü×RPM example, Linux's [`signalfd`] feature can be used by registering the FD withÁä¨S `Poll` via [`SourceFd`].ÁÅS�üÉSNK On all platforms except windows, a call to [`Poll::poll`] is mostly just aÁü˜TOL direct call to the system selector. However, [IOCP] uses a completion modelÁüèTPM instead of a readiness model. In this case, `Poll` must adapt the completionÁü¹UGD model Mio's API. While non-trivial, the bridge layer is still quiteÁü�VPM efficient. The most expensive part being calls to `read` and `write` requireÁüÒVLI data to be copied into an intermediate buffer before it is passed to theÁ\ŸW kernel.Á«W�ü¯W?< [epoll]: https://man7.org/linux/man-pages/man7/epoll.7.htmlÁüïWWT [event ports]: https://docs.oracle.com/cd/E88353_01/html/E37843/port-create-3c.htmlÁüÇXHE [kqueue]: https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2Áü�YVS [IOCP]: https://docs.microsoft.com/en-us/windows/win32/fileio/i-o-completion-portsÁüçYGD [`signalfd`]: https://man7.org/linux/man-pages/man2/signalfd.2.htmlÁü¯Z+( [`SourceFd`]: unix/struct.SourceFd.htmlÁüÛZ0- [`Poll::poll`]: struct.Poll.html#method.pollÁ$—[Àpãg·‘A&"]?”¢[D¢[*>>ûpœÖ[ä¹[ Registers I/O resources.ÁDá[ûp\!,NÙhOAB¼ð[Dð[*@@ÊqÔ¥]¬„Ø\ÅŠ”ò\ŵø¬†]üñ\+üí\0ü×\GüÎ\RL¥]*@@„K„KK‡Kí ä7ˆKphantomÁä7‰K«ä7ƒ¢3à6ú�ÿ`ÿ`V�a¬â`½68ŸœRt¿|LÄ]ÀpÐDEü¦l#üÑk63 Returns a `Registry` which can be used to registerÁ¬Œl `event::Source`s.ÁD­lˆ  ˆ Àp ˆ ûpBÿC ¶lC D$·lü…ŽXìîl Wait for readiness eventsÁ�m�ü˜mKH Blocks the current thread and waits for readiness events for any of theÁüèmKH [`event::Source`]s that have been registered with this `Poll` instance.Áü¸nIF The function will block until either at least one readiness event hasÁü†oLI been received or `timeout` has elapsed. A `timeout` of `None` means thatÁü×o@= `poll` will block until a readiness event has been received.Áœp�ü¤pMJ The supplied `events` will be cleared and newly received readiness eventsÁüöpKH will be pushed onto the end. At most `events.capacity()` events will beÁüÆqIF returned. If there are further pending readiness events, they will beÁü”r(% returned on the next call to `poll`.ÁÁr�üÉrIF A single call to `poll` may result in multiple readiness events beingÁü—sLI returned for a single event source. For example, if a TCP socket becomesÁüèsIF both readable and writable, it may be possible for a single readinessÁü¶tJG event to be returned with both [`readable`] and [`writable`] readinessÁü…uIF **OR** two separate events may be returned, one with [`readable`] setÁüÓu" and one with [`writable`] set.Áúu�ü‚vB? Note that the `timeout` will be rounded up to the system clockÁüÉvEB granularity (usually 1ms), and kernel scheduling delays mean thatÁü“wEB the blocking interval may be overrun by a small amount. A timeoutÁüÝw;8 of [`Duration::ZERO`] is not affected by this rounding.Á�x�ü¥xIF See the [struct] level documentation for a higher level discussion ofÁdóx polling.Á„y�üŒy0ÀˆüÁyB? [`readable`]: struct.Interest.html#associatedconstant.READABLEÁüˆzB? [`writable`]: struct.Interest.html#associatedconstant.WRITABLEÁôÏz [struct]: struct.Poll.htmlÁüòz41 [`iter`]: ./event/struct.Events.html#method.iterÁ«{�\³{ # NotesÁÃ{�üË{JG This returns any errors without attempting to retry, previous versionsÁüš|HE of Mio would automatically retry the poll call if it was interruptedÁôç| (if `EINTR` was returned).ÁŠ}�ü’}C@ Currently if the `timeout` elapses without any readiness eventsÁüÚ}HE triggering this will return `Ok(())`. However we're not guaranteeingÁü§~-* this behaviour as this depends on the OS.ÁÙ~�tá~ÅŠô~�üü~=銾�,‚€\ü¾‹äá€Í‹ü‚�/ó‹ü¶�2/ # // WASI does not yet support multithreading:Áüí�30 # if cfg!(target_os = "wasi") { return Ok(()) }Áü¥‚-¬ŒäׂâŒø‚�ü€ƒ,) use std::net::{TcpListener, SocketAddr};Á¤±ƒȱʃ�üÒƒ*Ï�ü�„2ƒŽü¸„*' let server = TcpListener::bind(addr)?;Áüç„,) let addr = server.local_addr()?.clone();Á˜…�ü …*' // Spawn a thread to accept the socketÁÜÏ… thread::spawn(move || {Áüï…  let _ = server.accept();Á<”† });Á †�ü¨†M„�üú† Û�üŸ‡1…�Õ‡�Ì݇Ë�üû‡/, let mut stream = TcpStream::connect(addr)?;Á¯ˆ�ü·ˆ&Ñì∠poll.registry().register(Á¤„‰ &mut stream,ÁŒ�‰ Token(0),Áü³‰2/ Interest::READABLE | Interest::WRITABLE)?;Áê‰�üò‰Kç’üм“TæŠä“üõŠ&ø“ ‹�ô¨‹³”üË‹AÛ”ü‘ŒO¦•ÔåŒþ•ô„�¡–l§�È–L¹�Þ–,Ç�ð–<Ñ�þ–<Ý�Šàé��|ñ� [struct]: #Á$ŒŽ‰ Š  ‰ Àp Š ®{řǙș­É™Ê™àË™óG*¤�R{9 ȲȲŽõɲsecsÁ²�ʲnanosÁ²�u"ù(ùÐŒ²®BÿC ‘ŽC E$–ލ4œŽtimeoutÁ<±Ž¬½’Ì$µ�èöüÃ�üÂ�! Å€ Œú�Ŧ÷¤•�Å·÷œ³�ÅÈ÷¬Ð�ÅÛ÷œï�Å‘Åø÷”ª‘ňøŒÆ‘ű ”á‘Å£ø¤ý‘ŵø¬›’üð�Æüì�Ëü¯�‹ü¦�–ÀpG£#GäÙ’LÜ’‹  ‹ ÀpBÿF æ’F G$ç’Ä£“ÀpI gIü“:Å“Œ � Ž  Œ Àp � €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡Ž çµBÿH É“H I$Ê“ñГl²”ûpKMOQSTüÛ³‹üÆ”;8 Register an [`event::Source`] with the `Poll` instance.Á†•�üŽ•JG Once registered, the `Poll` instance will monitor the event source forÁüÝ•KH readiness state changes. When it notices a state change, it will returnÁü­–FC a readiness event for the handle the next time [`poll`] is called.Áø–�ü€—0- See [`Poll`] docs for a high level overview.Áµ—�|½— # ArgumentsÁÑ—�üÙ—JG `source: &mut S: event::Source`: This is the source of events that theÁü¨˜?< `Poll` instance should monitor for readiness state changes.Áì˜�üô˜JG `token: Token`: The caller picks a token to associate with the socket.ÁüÙJG When [`poll`] returns an event for the handle, this token is included.Áü’šDA This allows the caller to map the event to its source. The tokenÁüÛšEB associated with the `event::Source` can be changed at any time byÁÜ¥› calling [`reregister`].ÁÅ›�üÍ›EB See documentation on [`Token`] for an example showing how to pickÁ¬—œ [`Token`] values.Á±œ�ü¹œJG `interest: Interest`: Specifies which operations `Poll` should monitorÁüˆ�JG for readiness. `Poll` will only return readiness events for operationsÁü×� specified by this argument.Áû��üƒžKH If a socket is registered with readable interest and the socket becomesÁüÓž63 writable, no event will be returned from [`poll`].ÁŽŸ�ü–ŸLI The readiness interest for an `event::Source` can be changed at any timeÁôçŸ by calling [`reregister`].ÁŠ �\’ ’ö¢ �üª GD Callers must ensure that if a source being registered with a `Poll`Áüö HE instance was previously registered with that `Poll` instance, then aÁüáEB call to [`deregister`] has already occurred. Consecutive calls toÁü�¢'$ `register` is unspecified behavior.Á¹¢�üÁ¢KH Unless otherwise specified, the caller should assume that once an eventÁü‘£KH source is registered with a `Poll` instance, it is bound to that `Poll`Áüá£IF instance for the lifetime of the event source. This remains true evenÁü¯¤DA if the event source is deregistered from the poll instance usingÁœø¤ [`deregister`].Á�¥�ü˜¥0ÀˆüÍ¥*' [`poll`]: struct.Poll.html#method.pollÁüü¥:7 [`reregister`]: struct.Registry.html#method.reregisterÁü»¦:7 [`deregister`]: struct.Registry.html#method.deregisterÁüú¦  [`Token`]: struct.Token.htmlÁŸ§�t§§ÅŠº§�,þ§\ø§¾‹äݨÍ‹œþ¨—°ü–©/ó‹üÊ©-¬Œäü©âŒì�ªý°ü¿ª'$ use std::time::{Duration, Instant};Áëª�üóª Û�˜«�ü «5ò±üÚ«4±²ü“¬A> let mut socket = TcpStream::connect(listener.local_addr()?)?;ÁÙ¬�üá¬&# // Register the socket with `poll`Á쌭ž€¤®­ &mut socket,ÁŒÇ­ã€üÝ­2ÿ€”®�üœ®1…�üÒ® let start = Instant::now();Áüö®-* let timeout = Duration::from_millis(500);Á¨¯�T°¯ä“ü¿¯&# let elapsed = start.elapsed();Áê¯�üò¯ if elapsed >= timeout {Áü–°# // Connection timed outÁÔ¾° return Ok(());ÁLݰÞ–ë°�üó°*' let remaining = timeout - elapsed;Áü¢±1. poll.poll(&mut events, Some(remaining))?;Áر�ôà±³”üƒ²*' if event.token() == Token(0) {Áü²²?< // Something (probably) happened on the socket.Áôö²¡–l™³È–L«³Þ–,¹³ð–<óþ–<ϳŠàDâ³� �  � ûp � Ô­†x“o²®BÿJ�LL î³JÿÆÔ­4ß´¢Ô­lÏ´ KÔ­$ﳦRWõ\W—¯fW ë³üÏÈ�ü¼¶>; Re-register an [`event::Source`] with the `Poll` instance.Áÿ¶�ü‡·EB Re-registering an event source allows changing the details of theÁüÑ·IF registration. Specifically, it allows updating the associated `token`ÁüŸ¸LI and `interests` specified in previous `register` and `reregister` calls.Áð¸�üø¸KH The `reregister` arguments fully override the previous values. In otherÁüȹLI words, if a socket is registered with [`readable`] interest and the callÁü™ºKH to `reregister` specifies [`writable`], then read interest is no longerÁìéº requested for the handle.Á‹»�ü“»LI The event source must have previously been registered with this instanceÁüä»52 of `Poll`, otherwise the behavior is unspecified.Áž¼�ü¦¼EB See the [`register`] documentation for details about the functionÁüð¼FC arguments and see the [`struct`] docs for a high level overview ofÁd»½Úó̽�tԽŊç½�,«¾\¥¾¾‹䊿Í‹œ«¿—°üÿ/ó‹ü÷¿%°ä¡ÀâŒìÂÀý°äÀ�äìÀƒ´�Á�ü•Á5ò±üÏÁ4±²üˆÂAÑ ÎÂ�üÖÂ;8 // Register the socket with `poll`, requesting readableÁì–Þ€¤¸Ã行ÑÃã€ìçà Interest::READABLE)?;Á‰Ä�ü‘ÄKH // Reregister the socket specifying write interest instead. Even thoughÁüáÄ2/ // the token is the same it must be specified.Áü˜Å poll.registry().reregister(Á¤¼Å行ÕÅã€ìëÅ Interest::WRITABLE)?;Á„�ÆŒ¶<¢Æþ–<®ÆŠàºÆ�üÂÆ0Àˆü÷Æ  [`struct`]: struct.Poll.htmlÁüœÇ6ú‰ü×Ç74 [`readable`]: ./event/struct.Event.html#is_readableÁü“È74 [`writable`]: ./event/struct.Event.html#is_writableÁTÖÈ‘ ’  ‘ ûp ’ Ô­†x“o²®BÿJ�NN äÈJÏ©4ÕÉá©lÅÉ MÔ­$åȦRXõ\X—¯fX áÈü€Üjü¶Ë=: Deregister an [`event::Source`] with the `Poll` instance.ÁøË�ü€ÌLI When an event source is deregistered, the `Poll` instance will no longerÁüÑÌGD monitor it for readiness state changes. Deregistering clears up anyÁü�ÍJG internal resources needed to track the handle. After an explicit callÁüìÍHE to this method completes, it is guaranteed that the token previouslyÁü¹ÎLI registered to this handle will not be returned by a future poll, so longÁüŠÏIF as a happens-before relationship is established between this call andÁlØÏ the poll.ÁêÏ�üòÏLÏ®üÃÐ5¦¯ýÐ�ü…Ñ?< A handle can be passed back to `register` after it has beenÁüÉÑHE deregistered; however, it must be passed back to the **same** `Poll`Áü–Ò41 instance, otherwise the behavior is unspecified.ÁÏÒ�t×ÒÅŠêÒ�,®Ó\¨Ó¾‹ä�ÔÍ‹œ®Ô—°üÆÔ/ó‹üúÔ-¬Œä¬ÕâŒìÍÕý°äïÕ£±�Ö�ü˜Ö Û�½Ö�üÅÖ5ò±üÿÖ4±²ü¸×AÑ þ×�ü†Ø&ª¡ì±Øž€¤ÓØè¡ŒìØã€ì‚Ùƒ´¤Ù�ü¬Ù-* poll.registry().deregister(&mut socket)?;ÁÞÙ�üæÙ1…�œÚ�ü¤ÚGD // Set a timeout because this poll should never receive any events.ÁüðÚ:7 poll.poll(&mut events, Some(Duration::from_secs(1)))?;Áü¯Û assert!(events.is_empty());Á„ÓÛŒ¶<èÛþ–<ôÛŠàT‡Ü“ ”  “ ûp ” Ô­²®BÿJ�PP •ÜJÏ©4ãÜá©lÓÜ OÔ­$–ܦ6Y ’Üü—ß/üÖÝ1. Creates a new independently owned `Registry`.ÁŒÞ�ü”ÞIF Event sources registered with this `Registry` will be registered withÁüâÞ0- the original `Registry` and `Poll` instance.ÁLžß•  • ûpÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwûp„¯BÿJ ¨ßJ Q$©ßTïßQ�R�R�RRQRÊqûpUÿ¾¯üûâ#¬„®âÅŠ”Èâŵø¬ÜâüÇâ+üÃâ0ü­âGü¤âRt‰ã–  – ûpBÿJ ˜ãJ S$™ãüæå/ÅŠ”�夀åÓ“*|–åüüä*üóä5Dôå—  — ûp — ÊqBÿJ ýåJ T$þå䏿ûpV gVüÛæ:Þæ˜ ™ š  ˜ ûp ™ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡š çµBÿU âæU V$ãæñéæ´æêÌ$Þçèöüìçüëç! Å€ Œ£èŦ÷¤¾èÅ·÷œÜèÅÛ÷œùèÅÈ÷¬–éÅéÅø÷”ÓéňøŒïéű ”ŠêÅ£ø¤¦êŵø¬Äêü™èÆü•èËüØç‹üÏç–ûpX…$Xüƒë!,†ë›  › ûp®L®LØ °LÐ%Û#±L_phantomÁÛ#t4bE™› BÿW ŒëW X$�ëÌåîÌ$Ýëèöüëëüêë! Å€ Œ¢ìŦ÷¤½ìÅ·÷œÛìÅÛ÷œøìÅÈ÷¬•íÅíÅø÷”ÒíňøŒîíű ”‰îÅ£ø¤¥îŵø¬Ãîü˜ìÆü”ìËü×ë‹üÎë–ûpZ£#Zä…ïLˆïœ  œ ûpBÿY ’ïY Z$“ï<§ « ÓÉ$µ,¶ÕÙ+Â!þÕ”-Þ!•Õí-½"£ÕŽ ,Ì6àÕ�Œ™#,¨ûÕ�Å4ÌüÕ�Æ,êýÕ�“'DͽÕ�Ù)Dÿ äÕµÙ)åÕµÓ(lª7ÔÕ�ßÓ(ÕÕ�ßL° ,´ ÉÊÔÏ'Ÿy^®^äð'$ó'†xŸyBÿ]] ^Žø'L÷ ŵø¬É ÅŠ”à üÈ +üÄ 0ü» ;,û Þë [_aìD@_b´–7,É_cµ–7Ê_cµÿ¹-‰_d,fhY[HJ<(!T­¬yfhüÜB̾ Create a new `Waker`.Á㦠 ¦ ûp†xÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¬y„¯Bÿe ñe fÝDçõ,ü<�f�g�g�ggfgØr¬yUÿü§$üÁ63 Wake up the [`Poll`] associated with this `Waker`.Áü�ô„ [`Poll`]: struct.Poll.htmlÁ$®§  § ¬y²®Bÿe ³e h$´lƒ ü(% Readiness event types and utilities.Á,‹ j‚œ™#,†â«Å4¤†­Î8$¬æ®á4É¢¯LM,Qiâë [jl–7,Éjmµ–7Êjmµñ#¾,jn,PRCEDT¹àypqrstuvwxyäíôÊ Returns the event's token.Á,ô©  © ày†xBÿo úo p$ûüÿ!ü¾:7 Returns true if the event contains readable readiness.Áý�\…’ö•�ü�B? Out-of-band (OOB) data also triggers readable events. But mostÁüäB? applications don't actually read OOB data, this could leave anÁü«=: application open to a Denial-of-Service (Dos) attack, seeÁü팉 .ÁüþLI However because Mio uses edge-triggers it will not result in an infiniteÁüÏ+( loop as described in the article above.Á\† ª  ª àyBÿo ’ o q$“ üš !üÛ :7 Returns true if the event contains writable readiness.Á\¡ «  « àyBÿo ­ o r$® ô�üö 74 Returns true if the event contains error readiness.Á² �üº KH Error events occur when the socket enters an error state. In this case,ÁüŠ IF the socket will also receive a readable or writable event. Reading orÁüØ 2/ writing to the socket will result in an error.Á� �\— ’ö§ �ü¯ KH Method is available on all platforms, but not all platforms trigger theÁ„ÿ  error event.Á”�üœ<9 The table below shows what flags are checked on what OS.ÁÝ�üå'$ | [OS selector] | Flag(s) checked |Áü‘'$ |---------------|-----------------|Áü½'$ | [epoll] | `EPOLLERR` |ÁüéIF | [kqueue] | `EV_ERROR` and `EV_EOF` with `fflags` set to `0`. |Á·�ü¿;8 [OS selector]: ../struct.Poll.html#implementation-notesÁüÿ?ïÝüÃH™ßD—¬  ¬ àyBÿo  o s$¡üº$üæ=: Returns true if the event contains read closed readiness.Á¨�\°’öÀ�üÈIF Read closed readiness can be expected after any of the following haveÁl– occurred:Áü¨?< * The local stream has shutdown the read half of its socketÁüìIF * The local stream has shutdown both the read half and the write halfÁœº of its socketÁüÒJG * The peer stream has shutdown the write half its socket; this sends aÁü¡=: `FIN` packet that has been received by the local streamÁã�üëHE Method is a best effort implementation. While some platforms may notÁü¸DA return readiness when read half is closed, it is guaranteed thatÁü�# false-positives will not occur.Á©�ü±<ìêò�üú'¾ëü¦'ïëüÒ'$ | [epoll] | `EPOLLHUP`, or |Áüþ2/ | | `EPOLLIN` and `EPOLLRDHUP` |Áüµ'$ | [kqueue] | `EV_EOF` |Áá�üé;°íü©?ïÝüíH™ßtÁ­  ­ àyBÿo Ðo t$Ñü˜&%üœ>; Returns true if the event contains write closed readiness.Áß�\ç’ö÷�üÿEB On [epoll] this is essentially a check for `EPOLLHUP` flag as theÁüÉJG local stream shutting down its write half does not trigger this event.Á˜�ü DA On [kqueue] the local stream shutting down the write half of itsÁüé# socket will trigger this event.Á‘ �ü™ H”óüæ EB return readiness when write half is closed, it is guaranteed thatÁü°!#´ôØ!�üà!<ìê¡"�ü©"'¾ëüÕ"'ïëü�#'£õü­#+( | | only `EPOLLERR`, or |ÁüÝ#1. | | `EPOLLOUT` and `EPOLLERR` |Áü“$'�ö¿$�üÇ$;°íü‡%?ïÝüË%H™ß|Ÿ&®  ® àyBÿo ¯&o u$°&ü«,!üü&:7 Returns true if the event contains priority readiness.Á»'�\Ã'’öÓ'�üÛ'Kò霫( priority event.ÁÃ(�üË(<ìêŒ)�ü”)'¾ëüÀ)'ïëüì)'$ | [epoll] | `EPOLLPRI` |Áü˜*'$ | [kqueue] | *Not supported* |ÁÄ*�üÌ*;°íüŒ+?ïÝüÐ+H™ß\²,¯  ¯ àyBÿo ¾,o v$¿,äÜ2ü‡-52 Returns true if the event contains AIO readiness.ÁÁ-�\É-’öÙ-�üá-LI Method is available on all platforms, but not all platforms support AIO.Á².�üº.<ìêû.�üƒ/'¾ëü¯/'ïëüÛ/'$ | [epoll] | *Not supported* |Áü‡0+( | [kqueue]1 | `EVFILT_AIO` |Á·0�ü¿0?< 1: Only supported on DragonFly BSD, FreeBSD, iOS and macOS.Áƒ1�ü‹1;°íüË1?ïÝü�2H™ß4ã2°  ° àyBÿo ê2o w$ë2ä’5ü®352 Returns true if the event contains LIO readiness.Áè3�\ð3’ö€4�üˆ4KH Method is available on all platforms, but only FreeBSD supports LIO. OnÁüØ452 FreeBSD this method checks the `EVFILT_LIO` flag.Á4™5±  ± àyBÿo  5o x$¡5ü­6B”»6²  ² ÍÜ ² àyBÿo Ù6o y sys_eventÁLÎ6̰;üë8JG When the [alternate] flag is enabled this will print platform specificÁü¶9OL details, for example the fields of the `kevent` structure on platforms thatÁü†:KH use `kqueue(2)`. Note however that the output of this implementation isÁüÒ:.+ **not** consider a part of the stable API.Á�;�ü…;*' [alternate]: fmt::Formatter::alternateÁày{ g{üÐ;8Ó;³ ´ µ  ³ ày ´ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡µ çµBÿz ×;z {$Ø;œ Þ;)˜dÇ@jŒ~~||}õój ¾™�«F�’†Œ¾™�«F�’†} ŒÍÜ��Bÿ)˜xjé���Bÿ|| }ŒÔ@tØ@j||é�üö@$8¶ ¶ žz� g�ü­A8°A· ¸ ¹  · žz ¸ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡¹ çµBÿ€ ´A€ �8$µAœ »ATX4\i†æ™#,₃«ë$[‚„ñ3¾,‚…œ?T,D.Œ„ ü9%" A collection of readiness events.Á_�ücKH `Events` is passed as an argument to [`Poll::poll`] and will be used toÁü¯MJ receive any new readiness events received since the last poll. Usually, aÁüýJG single `Events` instance is created at the same time as a [`Poll`] andÁüÈ*' reused on each call to [`Poll::poll`].Áó�ü÷30 See [`Poll`] for more documentation on polling.Á«�ü¯30 [`Poll::poll`]: ../struct.Poll.html#method.pollÁüã! [`Poll`]: ../struct.Poll.htmlÁ…�t‰ÅŠ˜�,Â\¼¾‹äƒÍ‹ü /ó‹äÐ use mio::{Events, Poll};Áäí£±Š�üŽ1…�üÀ Û�,á #Áüç! # assert!(events.is_empty());Á‰�ü�-* // Register `event::Source`s with `poll`.Á»�ü¿>; poll.poll(&mut events, Some(Duration::from_millis(100)))?;Áþ�ü‚  for event in events.iter() {Áü£96 println!("Got an event for {:?}", event.token());Á,Ýð–„㌶<ôþ–<üŠà4� ®{T‹z,ó‚ø†‡”œ ,œ ‚††…C…CüˆC”¶Ð=‰C¶Ð=ò¹ÚàÅÍÜ¿|\‹®{‰Š‹Œ�Žü¢/ü�EB Return a new `Events` capable of holding up to `capacity` events.Áç�tïÅŠ‚�<ŠŠà¤– use mio::Events;Á¯�ü·-* let events = Events::with_capacity(1024);Áüé(% assert_eq!(1024, events.capacity());Á<–Šàl©Ÿy®{Bÿˆˆ ‰úD·ü–ü³>; Returns the number of `Event` values that `self` can hold.Áö�<þŠà¤Š›�£�ü«-Å�üÝ(ü�<ŠŠàD�¾  ¾ ®{ŸyBÿˆ ¦ˆ Š$§ôÐüá85 Returns `true` if `self` contains no `Event` values.Áž�t¦Åй�<ÁŠà¤Í›�æ�üî-Å�ü ¼Å<ÄŠàD׿  ¿ ®{Bÿˆ àˆ ‹$áôùüš0- Returns an iterator over the `Event` values.ÁÏ�t×ÅŠê�,˜\’¾‹äáÍ‹ü‚/ó‹ä¶˜—ä×£±ø�ü€1…�ü¶ Û�Û�üã$! // Register handles with `poll`.ÁŒ�ü”>û˜×�üß Ï™ü„9ù™,Âð–„ÌŒ¶<áþ–<íŠà$€À  À ®{ææÎ8èÓ‚éê8‚škk_!?âÉÀ Bÿˆ …ˆ Œ$†¼Å%üë:7 Clearing all `Event` values from container explicitly.Áª�\²’öÂ�üÊIF Events are cleared before every `poll`, so it is not required to callÁ”˜  this manually.Á¯ �t· ÅŠÊ �,ø \ò ¾‹äÁ!Í‹üâ!/ó‹ä–"˜—ä·"£±Ø"�üà"1…�ü–# Û�»#�üÃ#$Фì#�üô#>û˜·$�Ä¿$ // Clear all events.ÁœÜ$ events.clear();Áüô$¼Å„˜%Œ¶<­%þ–<¹%Šà,Ì%Á  Á ®{Bÿˆ Ò%ˆ �$×%ü¯&0½&   ®{  §œBÿˆ Á&ˆ Ž$Æ&üƒ'$Œ��¨{‘’“�P�P‘P“ˆ'L®'$³'�� ŒàylÉ'DÎ'��×züè'$Lë'¨{�P¨{Bÿ�� “Œ$õ'ô¬(Œ••×z–—˜™ÅQÆQÊQËQ—˜™±(LÑ($Ö(””œ®üí(($ð(à  à ×zřǙș­É™Ê™àË™óG*¤�R{9 ÅQ×zBÿ” õ(” —Œ$ú(üË*-LÎ*Ä  Ä ×zŸyřǙș­É™Ê™àË™óG*¤�R{9 ŸyBÿ” Ø*” ˜Œ$Ù*¼Ì+,Ï+×zŸyBÿ”” ™Œ$Õ+ÔŽ,®{› g›ü¯,8²,Å Æ Ç  Å ®{ Æ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡Ç çµBÿš ¶,š ›$·,œ ½,Td4hi¢ˆ D Àœž±ìD@œŸ´–7, Éœ µ–7Êœ µÿ¹2‰œ¡,uwacNP<-#„Ÿü7=: An event source that may be registered with [`Registry`].Áu�üy?< Types that implement `event::Source` can be registered withÁü¹IF `Registry`. Users of Mio **should not** use the `event::Source` traitÁüƒNK functions directly. Instead, the equivalent functions on `Registry` shouldÁdÒ be used.Áß�üã&# See [`Registry`] for more details.ÁŠ�üŽ)& [`Registry`]: ../struct.Registry.htmlÁ¸�ü¼" # Implementing `event::Source`Áß�üãOL Event sources are always backed by system handles, such as sockets or otherÁü³JG system handles. These `event::Source`s will be monitored by the systemÁüþLI selector. An implementation of `Source` will almost always delegate to aÁüËOL lower level handle. Examples of this are [`TcpStream`]s, or the *unix only*ÁŒ› [`SourceFd`].Á­�ü±/, [`TcpStream`]: ../net/struct.TcpStream.htmlÁüá.+ [`SourceFd`]: ../unix/struct.SourceFd.htmlÁ��ü” # Dropping `event::Source`sÁ´�ü¸OL All `event::Source`s, unless otherwise specified, need to be [deregistered]ÁüˆNK before being dropped for them to not leak resources. This goes against theÁü×OL normal drop behaviour of types in Rust which cleanup after themselves, e.g.Áü§ KH a `File` will close itself. However since deregistering needs access toÁüó 96 [`Registry`] this cannot be done while being dropped.Á­ �ü± =: [deregistered]: ../struct.Registry.html#method.deregisterÁï �tó ÅŠ‚ �ü† :7 Implementing `Source` on a struct containing a socket:ÁÁ �,� \û ¾‹üØ )& use mio::{Interest, Registry, Token};ÁÜ‚  use mio::event::Source;Áäž âŒ» �„¿  use std::io;ÁÐ �ÌÔ  # #[allow(dead_code)]ÁÌî  pub struct MySource {ÁÔˆ socket: TcpStream,Á,£ð–©�ô­ impl Source for MySource {ÁüÌVS fn register(&mut self, registry: &Registry, token: Token, interests: Interest)Áì£ -> io::Result<()>ÁLÁ {ÁüË74 // Delegate the `register` call to `socket`Áüƒ<9 self.socket.register(registry, token, interests)ÁLÀÞ–Ê�üÎXU fn reregister(&mut self, registry: &Registry, token: Token, interests: Interest)Áì§×ÅLÅýÅüÏ96 // Delegate the `reregister` call to `socket`Áü‰>; self.socket.reregister(registry, token, interests)ÁLÈÞ–Ò�üÖIF fn deregister(&mut self, registry: &Registry) -> io::Result<()> {Áü 96 // Delegate the `deregister` call to `socket`ÁüÚ,) self.socket.deregister(registry)ÁL‡Þ–,‘ð–<—Šà4©¢¢ÿÆüŸ– ¢ØÌØÌ"£¤¥£¤¥£¤¥üŒˆü¶74 Register `self` with the given `Registry` instance.Áò�üúKH This function should not be called directly. Use [`Registry::register`]ÁüÊKH instead. Implementors should handle registration by delegating the callÁìš to another `Source` type.Á¼�üÄC@ [`Registry::register`]: ../struct.Registry.html#method.registerÁD�È É  È àÌ É ûp†x“o²®Bÿ¢ ¡¢ £àÌ$¦ÝD´õ,Ñ—¯LçüƒŠüš:7 Re-register `self` with the given `Registry` instance.ÁÙ�üá41 This function should not be called directly. UseÁüš@= [`Registry::reregister`] instead. Implementors should handleÁüßKH re-registration by either delegating the call to another `Source` type.Á¯�ü·GD [`Registry::reregister`]: ../struct.Registry.html#method.reregisterÁT†Ê Ë  Ê àÌ Ë ûp†x“o²®Bÿ¢ 𢠤àÌ$ŸÝD­õ,Ê—¯Làüó@ü“96 Deregister `self` from the given `Registry` instance.ÁÑ�üÙ4…Ñü’@= [`Registry::deregister`] instead. Implementors should handleÁü×C@ deregistration by delegating the call to another `Source` type.ÁŸ�ü§GD [`Registry::deregister`]: ../struct.Registry.html#method.deregisterÁTöÌ Í  Ì àÌ Í ûp²®Bÿ¢ �¢ ¥àÌ$†ÝDŒü·7�§§ÿƹ|4碹|4Þø{¨©ª£¤¥ª¨© ¼üõ‡DøÎ Ï  Î ø{ Ï ûp†x“o²®Bÿ¦ Š ¦ ¨¹|$� Ý)sõ2s—¯;süÀ!‰TÃ!Ð Ñ  Ð ø{ Ñ ûp†x“o²®Bÿ¦ ×!¦ ©¹|$Ü!ÝVtõ_t—¯htü�#?T’#Ò Ó  Ò ø{ Ó ûp²®Bÿ¦ �#¦ ª¹|$¢#Ýou”yò>d•ç>ê>Û>Þ>¤»Ó>ló ŒÙ Lß Ƙ”Š ܘ$¦ î˜î˜ÿ˜ÿ˜dÆ ™d˜Åµø¬â ÅŠ”ù üá +üÝ 0üÔ ;4™dŠÌ� Unix only extensions.ÁÌ$±ÓÚÔ·Ô°ü§%$’¸Ù)D�ä½ÕµÙ)å½Õµd¼tÓ Unix pipe.Áê�üö/, See the [`new`] function for documentation.Á$Ę Ê õºò6DÏÅ»Ï64ÙÁ¼„·79)+¤õâ„¡ô¸ # Mio's optional features.ÁÛ�üã:7 This document describes the available features in Mio.Á¢�ÄÑôË## `os-poll` (enabled)Á¼�üÄJG Mio by default provides only a shell implementation that `panic!`s theÁü“EB moment it is actually run. To run it requires OS support, this isÁüÝ0- enabled by activating the `os-poll` feature.Á’�üš96 This makes `Poll`, `Registry` and `Waker` functional.ÁØ�¼†ì€## `os-ext` (enabled)Áî�üöLI `os-ext` enables additional OS specific facilities. These facilities canÁüÇ0- be found in the `unix` and `windows` module.Áü�ä§ü¡"## Network types (enabled)Á–�üžHE The `net` feature enables networking primitives in the `net` module.ÁD©lêäþ # Getting started guide.ÁŸ�ü§)& In this guide we'll do the following:ÁÕ�üÝ96 1. Create a [`Poll`] instance (and learn what it is).Áü› " 2. Register an [event source].Áä  3. Create an event loop.Áã �üë KH At the end you'll have a very small (but quick) TCP server that acceptsÁü»!2/ connections and then drops (disconnects) them.Áò!�üú!$! ## 1. Creating a `Poll` instanceÁ£"�ü«"KH Using Mio starts by creating a [`Poll`] instance, which monitors eventsÁüû"LI from the OS and puts them into [`Events`]. This allows us to execute I/OÁüÌ#2/ operations based on what operations are ready.Áƒ$�ü‹$!ž–ü±$+( [`Events`]: ../event/struct.Events.htmlÁá$�,�%\Š%¾‹ôÚ% # use mio::{Poll, Events};Áüý%(% # fn main() -> std::io::Result<()> {Áüª&52 // `Poll` allows for polling of readiness events.Áää&ƒ´ü…'HE // `Events` is collection of readiness `Event`s and can be filled byÁäÒ' // calling `Poll::poll`.Áüó',) let events = Events::with_capacity(128);Áܤ( # drop((poll, events));ÁdÄ( # Ok(())Á<Õ(þ–<á(Šàí(�üõ(EB For example if we're using a [`TcpListener`], we'll only want toÁü¿)FC attempt to accept an incoming connection *iff* any connections areÁüŠ*JG queued and ready to be accepted. We don't want to waste our time if noÁÔÙ* connections are ready.Áø*�ü€+30 [`TcpListener`]: ../net/struct.TcpListener.htmlÁ¸+�üÀ+" ## 2. Registering event sourceÁç+�üï+LI After we've created a [`Poll`] instance that monitors events from the OSÁüÀ,JG for us, we need to provide it with a source of events. This is done byÁü�-PM registering an [event source]. As the name “event sourceâ€� suggests it isÁüä-KH a source of events which can be polled using a `Poll` instance. On UnixÁü´.DA systems this is usually a file descriptor, or a socket/handle onÁdý. Windows.ÁŽ/�ü–/LI In the example below we'll use a [`TcpListener`] for which we'll receiveÁüç/GD an event (from [`Poll`]) once a connection is ready to be accepted.Á³0�ü»0.+ [event source]: ../event/trait.Source.htmlÁî0�,³1\­1¾‹ü“2  # use mio::net::TcpListener;Áü¸2'$ # use mio::{Poll, Token, Interest};Áüä2(òìô‘3 # let poll = Poll::new()?;Áü´330 # let address = "127.0.0.1:0".parse().unwrap();Áüì374 // Create a `TcpListener`, binding it to `address`.Áü¨430 let mut listener = TcpListener::bind(address)?;Áà4�üè4MJ // Next we register it with `Poll` to receive events for it. The `SERVER`Áüº5NK // `Token` is used to determine that we received an event for the listenerÁ„�6 // later on.Áü¢6# const SERVER: Token = Token(0);ÁüÊ6IF poll.registry().register(&mut listener, SERVER, Interest::READABLE)?;Ád˜7Àï<©7þ–<µ7ŠàÁ7�üÉ7HE Multiple event sources can be [registered] (concurrently), so we canÁü–8'$ monitor multiple sources at a time.ÁÂ8�üÊ896 [registered]: ../struct.Registry.html#method.registerÁˆ9�ü�9! ## 3. Creating the event loopÁ¶9�ü¾9FC After we've created a [`Poll`] instance and registered one or moreÁü‰:LI [event sources] with it, we can [poll] it for events. Polling for eventsÁüÚ:KH is simple, we need a container to store the events: [`Events`] and needÁüª;JG to do something based on the polled events (this part is up to you, weÁüù;KH can't do it all!). If we do this in a loop we've got ourselves an eventÁLÉ< loop.Á×<�üß�,ó>\í>¾‹”Ó? # use std::io;Áôê? # use std::time::Duration;Áü�@ îøü²@/, # use mio::{Poll, Token, Interest, Events};Áüæ@# # fn main() -> io::Result<()> {ÁüŽA" # let mut poll = Poll::new()?;ÁüµA2/ # let mut events = Events::with_capacity(128);ÁüìA3þùü¤B52 # let mut listener = TcpListener::bind(address)?;ÁüÞB%" # const SERVER: Token = Token(0);ÁüˆCKH # poll.registry().register(&mut listener, SERVER, Interest::READABLE)?;ÁäØC // Start our event loop.ÁTùCä“üˆDDA // Poll the OS for events, waiting at most 100 milliseconds.ÁüÑDB? poll.poll(&mut events, Some(Duration::from_millis(100)))?;Á˜E�ô E // Process each event.ÁüÃE$! for event in events.iter() {ÁüìEKH // We can use the token we previously provided to `register` toÁü¼F52 // determine for which type the event is.ÁüöF! match event.token() {ÁüœG  SERVER => loop {ÁüÁGMJ // One or more connections are ready, so we'll attempt toÁü“H/, // accept them (in a loop).ÁüÇH-* match listener.accept() {ÁüùH63 Ok((connection, address)) => {Áü´IKH println!("Got a connection from: {}", address);Áü„J-* # drop(connection);ÁÔ¶J },ÁüÕJMJ // A "would block error" is returned if the operationÁü§KGD // is not ready, so we'll stop trying to acceptÁüóK'$ // connections.ÁüŸLB? Err(ref err) if would_block(err) => break,ÁüæL41 Err(err) => return Err(err),Á¬ŸM }ÁŒ¹M }ÁüÏM$! # _ => unreachable!(),ÁløMÈ–LŠNÞ–´˜N # return Ok(());Á,³Nð–½N�üÅN-* fn would_block(err: &io::Error) -> bool {Áü÷N/, err.kind() == io::ErrorKind::WouldBlockÁ,«Oð–<µOþ–<ÁOŠà,òë–ü/! Interest used in registering.ÁQ�üUMJ Interest are used in [registering] [`event::Source`]s with [`Poll`], theyÁü£OL indicate what readiness should be monitored for. For example if a socket isÁüóLI registered with [readable] interests and the socket becomes writable, noÁüÀ30 event will be returned from a call to [`poll`].Áô�üø74 [registering]: struct.Registry.html#method.registerÁü°0ÀˆôáÇÜü€@= [readable]: struct.Interest.html#associatedconstant.READABLEÁüÁ*ÞœD®“oIÀ…úÓ [Á´�“oBÿë–4´�“oBÿÀÀ ÁL·ÀÀ´� õ“o?H“o?H“oÆù±Æ?H?Hüý ü“o ý“oBÿÅûÅ Æ?Hî ?HºH“oÈÎȺHºHºHºHþ þ“oBÿÇ†Ç ÈºHøHøHøH“oøH“oË†ËøHøHÿ ÿ“o“oBÿÊŠÊ ËøHYI“oͱ²ÍYIYI€ �  € “o � “o˜•BÿÌ‘Ì ÍYIî YIK“oÏîÏKK‚ ƒ  ‚ “o ƒ “o“”BÿÎ�Î ÏKî KüÕh üë] Return a new `Poll` handle.Á“^�üŸ^GD This function will make a syscall to the operating system to createÁüï^GD the system selector. If this syscall fails, `Poll::new` will returnÁœ¿_ with the error.ÁÛ_�üç_UR close-on-exec flag is set on the file descriptors used by the selector to preventÁüÅ`%" leaking it to executed processes.Áó`�üÿ`-* See [struct] level docs for more details.Áµa�ôÁa¡õèa�tôaÅŠ‹b�<—bŠàä§bÍ‹üÌb/ó‹ä„c use mio::{Poll, Events};Áä©c£±Îc�üÚc&# let mut poll = match Poll::new() {Á̉d Ok(poll) => poll,Áü«dHE Err(e) => panic!("failed to create Poll instance; err={:?}", e),Á4üd };Á‹e�ü—e2/ // Create a structure to receive polled eventsÁüÒe1…�Œf�ü˜f<9 // Wait for events, but none will be received because noÁüÝfGD // `event::Source`s have been registered with this `Poll` instance.Áü­g>; poll.poll(&mut events, Some(Duration::from_millis(500)))?;Áüôg¼Å„œhŒ¶<µhþ–<ÅhŠàÓØ ˜'ˆ Ø'‚ ÜhÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÀp„¯BÿCC ÐT�iÐ�Ñ�Ñ�ÑÑÐÑòËÀpUÿ̨ÓØ ˜3ˆ Ø3‚ dµ Â Ù Ì Ø, Ú8!$Û& ß8Ý,á ç ÷, è8 event_typeÁTé& ó8‚õ$ ø, ú8Í$û& ÿ8ª $�$ …, “ ” Æ , • – §+ — ˜ ¦, ™8´4š&  8ª $¢ ¨, ª8»$«& ¯8Ý,±'·, º8flagÁ$»& ¿8Ý,Á$ Ç È, Ê Ë Í$ Ì Î*Ú Ý Ò 84ë, ò8!$ó ÷ ƒ, ø8Ô®Tù% „8$“8ñ˜'›8q,�8 £, §8!$¨ ­ È8 ¿8ñÂ Å ç  Æ8$Ç$ Ë8œ Í& Î Ð8Ñ8ñÕ'Ø8ŠLÚ ã:8ä æ(é8ñì'ï8Ñ4ñ ø º8Ž8’8 written_oneÁ\– ¢8 ,¤% ©, ¿ À ‚, Ú Û æ+ Ü Ý å, Þ8´4ß ç+ �  ‚  ž 8²,ƒ  ˆ  � 8Œ4‰ '� 8 bad_bit_maskÁd‘  Û  ì 8É , Ì 8Í$Í  Ñ  ê   Ò 8$Ó  × 7ó Ø $ Ù  Û , Ü 8»$Ý 'â , å 8ư$æ  ì  Ò 8Ž  ‘ 8’´\’  ž  Á  8í2,Ä  É  Ê  å 8œ Ë $ Ì 7Ž$Î $ Ò 8�LÔ  Ý  Þ  ä , ß 8ư$à - æ % ç 8’´\�  ™ 8 $› % Ÿ 8$à  È  ´ 8í2,î  ó  ô  � 8œ õ $ ö 7|{}Á,ø $ ý 8�Lÿ  ˆ  ‰  � , Š 8ư$‹ - ‘ % ’  ƒ8™ œ8’´\� © ì8í2,Ã È É Ö8œ Ê$ Ë7(empty)ÁLÍ8$î ó ¨8¯� � ’ � ‘% ÓDØÓØ ˜4ˆ Ø4‚ $Ü[ÖŽ¨¶ëþ•£Ù)¸räµÙ)Ér嵎 Xsà�Œ™#Ssû�ÅNsü�ÆIsý�“'Ds½�Ó(sÔ�ßÓ(*sÕ�ߤž<« ³ ¸ ¹ ß, º8 »& ½8Ý,¿ Å Ý, Ç È Ó, É8argÁÊ& Í8²$Ï$ Ô Õ, × Ø Ú$ Ù Û*á ä µ å ´+ ï ð …8²,ñ ö „8 unused_unsafeÁl÷8�8resÁ“ —8"4™   ¸8»$¢'¦, ¨8 © « ¶, ¬ ­ ´, ®8‰¾¯$ ² µ% ¹8Ã8È¿Æ Ê7ó Ì Î ‰8€Ü ß ÿ8‰à'ã8ÿ¹å'ç8Ž®,é'î8 last_os_errorÁlð ý þ8$‹ � ®8¯ž   ¤8È¿¡% ¶T‹ÓØ š˜dË ÓØ ˜5ˆ Ø5‚ /DÏ Óìúûüý½Íÿ¹ ‰Öר $„$ÖÙ¸<%¢#ÖÚØ T.®LÖÛÖL:¤#Öܪ ü5!ÏÅîãÑÅî.-,åÓÅîDCBç¤âÙ,üÂÄ­¯Tþ/Ør�žŸ¡¢£¤üÔIâÆ  Æ Êq†xÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwØr„¯Bÿœ ðœ �ûDæõ,ûüº5„È„áBÿœœ žüÄ +$Ò Ç  Ç Ør²®Bÿœ × œ Ÿ$Ø  ¤Ÿyü¢"l°È  È ØrBÿœ ¾œ ¡$¿ü¶(ÄÉ  É ØrřǙș­É™Ê™àË™óG*¤�R{9 Bÿœ Çœ ¢$Èü—",¥Ê  Ê ØrBÿœ «œ £$¬üé!,ìŽË  Ë Ør²®Bÿœ òœ ¤$ó §Ÿy´‘/Ør§£#§ä®L±Ì  Ì ØrBÿ¦ »¦ §$¼d¶ ÓØ ÑÏÓÚÔ� Ô— /Dº Óäåÿ¹ ‰¨©ô,@¡#¨ªÆ,–i¨¬ˆ D�À¨­±ìD§@¨®´–7,±É¨¯µ–7ʨ¯µ<Ÿ”3Åü !¦,Ž˜šˆŠsu_aüŠ'/Œ±±—s²³´£¤¥³´²�ü¸‡D»Ð Ñ  Ð —s Ñ ûp†x“o²®Bÿ° Ͱ ²Œ$ÒÝDàõ,ý—¯L“ü�‰T�Ò Ó  Ò —s Ó ûp†x“o²®Bÿ° ¤° ³Œ$©ÝD·õ,Ô—¯Lêüæ?TéÔ Õ  Ô —s Õ ûp²®Bÿ° ô° ´Œ$ùÝDÿÄï ÓØ ¨¦ÓÚÔΠÔÈ ‹œ¦,ÓØ ÓÑÓÚÔ½# mio_unsupported_force_waker_pipeÁü’$ èöü�%ÅfreebsdÁ¬ç%ÅiosÁŒ’&ÅmacosÁœ¹&ÅtvosÁ”â&ÅvisionosÁ´Š'ÅwatchosÁ¬¶'üÑ%�üÃ$ªÅ€ ŒÂ(Å dragonflyÁ¼á(ÅÛ÷œ†)Åø÷”§)ÅnetbsdÁ¤Ç)ňøŒé)ÅopenbsdÁ¬ˆ*ÅredoxÁœ«*èöüÐ*ÅŸ ¬ñ*üÏ*8ű ”•+Å£ø¤µ+üã"ñÅî¤â+´á+ÅŠ”…,¤„,üÖ"É üÍ"Ô /”�¹õÀÁÅÿ¹M‰¶·ô,b¡#¶¸ëº$§§B¶ÞIoSliceÁ<»Œ‰¶à IoSliceMutÁTÄü7¶áÔÜ$Ðç¶âìÜ,Ö� ¶ã¨ $ð„$¶å¸<ö¢#¶æØ Tÿ®L¶çÖL‹¤#¶èŒ L–¦#¶éª <¡í#¶êŽv\¾Ñ)¶ìÃsTË­)¶íËu\×Á)¶îÿ9Dü�¶ïÆ,’i¶ñˆ D™À¶ò±ìD£@¶ó´–7,­É¶ôµ–7ʶôµÖ Ì >ë ÓÚÃ�>ñ Ð>ê ø>Õ 0 ø>Ì ; 7ÊqÇÌÚ¬„¿Ĺᦠ ¦ ÊqŸyBÿÆ äÆ Ç$å:—8lÒ/ýŸr¸’ůUþÉÊŸrBÿ:—5ýŸrBÿÈÈ ÉX?øýÈÈÈ?“8ŸrÌ gÌø?¿8?· ¸ ¹  · Ÿr ¸ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡¹ çµBÿË?ÆË Ì ?Çœ?ͼé6Ó“*x¢Ö Ì ¢ë ÓÚÃ�¢ñ Тê ø¢Õ 0 ø¢Ì ; 9œí6ÖÔÕÿ¹W‰ÍÎô,l¡#Íψ D€ÀÍѱìDŠ@ÍÒ´–7,”ÉÍÓµ–7ÊÍÓµñZ—¯�Õ/*ÔÔ˜º”¿9˜º×ØÜÝÞüØ$昺BÿÖÖ ×ü t,®» ¼  » ˜ºõ¸ ¼ ¹|·¹BÿÖ�Ù‚ÚŽÛÛÙÚ ½Öþƹ| ´þÆõ¸ ·þƆº ºº ‹#õ¸ º ¹|Üøº �#õ¸Ÿ†·¹l†õì$¾œÉ\ÿ¹Ó\€‚|~xzüŒ¥Dš½ ¾  ½ ˜º ¾ ûp†x“o²®BÿÖ ¬Ö‘ó$±ÝD¿õ,Ü—¯LòÐ%�ü¬§Tº¿ À  ¿ ˜º À ûp†x“o²®BÿÖ ÎÖýø$ÓÝDáõ,þ—¯L”Ð%±üÐUTÞÁ   Á ˜º  ûp²®BÿÖ éÖ�þ$îÝDôÐ%‰ ü•7"Ó“*‚ÌÓÚÃ|yvr|™¼Ó:,åØr+¢Dvn{ùßáDññŽààá»#]¤Ørã gã#]#]à Ä Å  à Ør Ä €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1ȡŠçµBÿâ£Ëâ ã#]œ#]‰—üºHE Adapter for [`RawFd`] providing an [`event::Source`] implementation.Áƒ�ü‡EB `SourceFd` enables registering any type with an FD with [`Poll`].ÁÍ�üÑIF While only implementations for TCP and UDP are provided, Mio supportsÁü›NK registering any FD that can be registered with the underlying OS selector.Áüê-* `SourceFd` provides the necessary bridge.Á˜�üœLI Note that `SourceFd` takes a `&RawFd`. This is because `SourceFd` **doesÁüéHE not** take ownership of the FD. Specifically, it will not manage anyÁü²PM lifecycle related operations, such as closing the FD on drop. It is expectedÁüƒ=: that the `SourceFd` is constructed right before a call toÁüÁ=: [`Registry::register`]. See the examples for more detail.Áÿ�üƒ1. [`event::Source`]: ../event/trait.Source.htmlÁüµ!ž–ü×CßΛ �tŸ ÅŠ® �„²  Basic usage.Áà �,  \š ¾‹ä– Í‹ü³ /ó‹üã %" use mio::{Interest, Poll, Token};Á„‰  #[cfg(unix)]Áäš  use mio::unix::SourceFd;Áô·  #[cfg(target_os = "wasi")]ÁäÖ  use mio::wasi::SourceFd;Áó �ì÷  use std::os::fd::AsRawFd;Áô•  use std::net::TcpListener;Á´ �Ô¸  // Bind a std listenerÁüÓ 52 let listener = TcpListener::bind("127.0.0.1:0")?;Á‰�ä�ƒ´ª�ä® // Register the listenerÁìËž€üé-* &mut SourceFd(&listener.as_raw_fd()),ÁŒ—ã€ì©ƒ´„ÇŒ¶<Øþ–<àŠàè�üìKH Implementing [`event::Source`] for a custom type backed by a [`RawFd`].Á¸�,û\õ¾‹üÕ0- use mio::{event, Interest, Registry, Token};Á„†º”ä—Ó”ô´ø”äÓŸ•ð�Üô use std::os::fd::RawFd;Á„�«Ã¡�Ì¥Ðì¿ pub struct MyIo {Á”Õ fd: RawFd,Á,èð–î�üò! impl event::Source for MyIo {Áü”VøÄìë×ÅL‰ýÅü“C@ SourceFd(&self.fd).register(registry, token, interests)ÁL×Þ–á�üåX°Çì¾×ÅLÜýÅüæEB SourceFd(&self.fd).reregister(registry, token, interests)ÁL¬Þ–¶�üºIÐÉü„30 SourceFd(&self.fd).deregister(registry)ÁL¸Þ–,Âð–<ÈŠàÇ0ÓÚÃXUÞ0Ì0ÓÚÃroã0Ñ0ÓÚÃŒ‰è0ÔêÓÚç¤î0,ŠÓÚÿô0ÓÚÃÙÖ 1ú0ÓÚÃóð1û0ÓÚà  1ý0ÓÚÃ'$1üÌ5.ü¶(% Create a new non-blocking Unix pipe.Áß�üãNK This is a wrapper around Unix's [`pipe(2)`] system call and can be used asÁü²2/ inter-process or thread communication channel.Áå�üéPM This channel may be created before forking the process and then one end usedÁüºPM in each process, e.g. the parent process has the sending end to send commandÁÌ‹ to the child process.Á¥�ü©UR [`pipe(2)`]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/pipe.htmlÁÿ�dƒ # EventsÁ��ü”JG The [`Sender`] can be registered with [`WRITABLE`] interest to receiveÁüßPM [writable events], the [`Receiver`] with [`READABLE`] interest. Once data isÁü°LI written to the `Sender` the `Receiver` will receive an [readable event].Áý�ü�PM In addition to those events, events will also be generated if the other sideÁüÒHE is dropped. To check if the `Sender` is dropped you'll need to checkÁü›KH [`is_read_closed`] on events for the `Receiver`, if it returns true theÁüçMJ `Sender` is dropped. On the `Sender` end check [`is_write_closed`], if itÁüµOL returns true the `Receiver` was dropped. Also see the second example below.Á…�ü‰$! [`WRITABLE`]: Interest::WRITABLEÁü®0- [writable events]: event::Event::is_writableÁüß$! [`READABLE`]: Interest::READABLEÁü„/, [readable event]: event::Event::is_readableÁü´41 [`is_read_closed`]: event::Event::is_read_closedÁüé63 [`is_write_closed`]: event::Event::is_write_closedÁ �œ¤ # DeregisteringÁ¸�ü¼IF Both `Sender` and `Receiver` will deregister themselves when dropped,Áü†EB **iff** the file descriptors are not duplicated (via [`dup(2)`]).ÁÌ�üÐSP [`dup(2)`]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup.htmlÁ¤�t¨ÅŠ·�ü»MJ Simple example that writes data into the sending end and read it from theÁ”‰ receiving end.Áœ�< Šàü¨%" use std::io::{self, Read, Write};ÁÎ�üÒ-* use mio::{Poll, Events, Interest, Token};ÁÄ€  use mio::unix::pipe;Á™ �ü� 52 // Unique tokens for the two ends of the channel.ÁüÓ &# const PIPE_RECV: Token = Token(0);Áüú &# const PIPE_SEND: Token = Token(1);Á¡!�ü¥!#¢‡üÉ!=: // Create our `Poll` instance and the `Events` container.Áü‡" Û�ü¨".+ let mut events = Events::with_capacity(8);Á×"�ÌÛ" // Create a new pipe.Áüõ"2/ let (mut sender, mut receiver) = pipe::new()?;Á¨#�ü¬#)& // Register both ends of the channel.ÁüÖ#LI poll.registry().register(&mut receiver, PIPE_RECV, Interest::READABLE)?;Áü£$JG poll.registry().register(&mut sender, PIPE_SEND, Interest::WRITABLE)?;Áî$�üò$*' const MSG: &[u8; 11] = b"Hello world";Á�%�T¡%ä“ü¬%&ø“Ó%�ü×%$‡Œüü%!É�üž&.+ PIPE_SEND => sender.write(MSG)ÁüÍ&52 .and_then(|n| if n != MSG.len() {Áüƒ'LI // We'll consider a short write an error in thisÁüÐ'KH // example. NOTE: we can't use `write_all` withÁüœ(0- // non-blocking I/O.ÁüÍ(@= Err(io::ErrorKind::WriteZero.into())ÁüŽ)  } else {Áü¯)" Ok(())ÁäÒ) })?,Áôï) PIPE_RECV => {ÁüŽ**' let mut buf = [0; 11];Áü¹*52 let n = receiver.read(&mut buf)?;Áüï*;8 println!("received: {:?}", &buf[0..n]);Áü«+-* assert_eq!(n, MSG.len());ÁüÙ+,) assert_eq!(&buf, &*MSG);Áü†," return Ok(());Á”©, },Áü¼,$! _ => unreachable!(),Álá,È–Lï,Þ–,ù,ð–<ÿ,þ–<‡-Šà�-�ü“-@= Example that receives an event once the `Sender` is dropped.ÁÔ-�<Ø-Šà”à-˜†,ó-ò—üù-/, # use mio::{Poll, Events, Interest, Token};ÁÔ©. # use mio::unix::pipe;Á,Ä.ò—üÊ.(% # const PIPE_RECV: Token = Token(0);Áüó.(% # const PIPE_SEND: Token = Token(1);Á,œ/ò—ü¢/#¢‡üÆ/*' // Same setup as in the example above.Áüñ/ Û�ü’0.§êÁ0�üÅ02�ëø0�üü0LŽìüÉ1Jåì”2�¼˜2 // Drop the sender.ÁŒ°2 drop(sender);ÁÂ2�üÆ2" poll.poll(&mut events, None)?;Áé2�üí2 Ï™ìŽ3 match event.token() {Áü¬341 PIPE_RECV if event.is_read_closed() => {Áüá385 // Detected that the sender was dropped.Áüš4,) println!("Sender dropped!");ÁôÇ4¡–tæ4 },Áüõ4  _ => unreachable!(),ÁL–5Þ–, 5𖬦5 # unreachable!();Á<¼5þ–<Ä5ŠàÓÚÃÓ5ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÝsåu„¯Bÿ õ\è8ÓÚú·>Ýs÷øüµ9Büú863 Set the `Sender` into or out of non-blocking mode.Á|¼9ç  ç Ýs²®Bÿö Ì9ö ÷$Í9½ \Ó9üÛKaüÂ:JG Execute an I/O operation ensuring that the socket receives more eventsÁü‘;&# if it hits a [`WouldBlock`] error.Á¼;�\Ä;’öÔ;�üÜ;FC This method is required to be called for **all** I/O operations toÁü§Í‹,¬>ò—ü¶>/ó‹„ê>«Ãìÿ>ЕÄ¡?âç¾?�üÆ?*' let (sender, receiver) = pipe::new()?;Áõ?�üý?+( // Wait until the sender is writable...Á­@�üµ@B? // Write to the sender using a direct libc call, of course theÁüü@96 // `io::Write` implementation would be easier to use.Á¼ºA let buf = b"hello";ÁôÖA let n = sender.try_io(|| {ÁüùA30 let buf_ptr = &buf as *const _ as *const _;Áü±BQN let res = unsafe { libc::write(sender.as_raw_fd(), buf_ptr, buf.len()) };Á´‡C if res != -1 {Áä¢C Ok(res as usize)Á„ÃC } else {ÁüØCJG // If EAGAIN or EWOULDBLOCK is set by libc::write, the closureÁü§D0- // should return `WouldBlock` error.ÁüÜD+( Err(io::Error::last_os_error())ÁLŒEÞ–DšE })?;Áü§E# eprintln!("write {} bytes", n);ÁÏE�ü×E-* // Wait until the receiver is readable...Á‰F�ü‘FEB // Read from the receiver using a direct libc call, of course theÁüÛF85 // `io::Read` implementation would be easier to use.ÁܘG let mut buf = [0; 512];Áü¸G  let n = receiver.try_io(|| {ÁüÝG30 let buf_ptr = &mut buf as *mut _ as *mut _;Áü•HRO let res = unsafe { libc::read(receiver.as_raw_fd(), buf_ptr, buf.len()) };Á´ìHŠ‹ä‡Iª‹„¨IЋü½IIF // If EAGAIN or EWOULDBLOCK is set by libc::read, the closureÁü‹J0ÀŒüÀJ+ûŒLðJÞ–DþJ¾�ü‹K" eprintln!("read {} bytes", n);Ád²KÀï<ÃKþ–<ÏKŠà4âKè  è ÝsŽÇ®ÇBÿö‚ù�úúù ïKöþÆŽÇ éKþÆ”Ç ìK‹#ŽÇÌ¢L�#ŽÇ®Çl®L øŽÇ”Ç$ðKœdZ\VXÜLø�û�û�ûûø«ÈìîLÓÚÃl"i">Ýsýþÿ£¤¥ÿýþü’M‡D•Mé ê  é Ýs ê ûp†x“o²®Bÿü §Mü ý$¬MÝDºMõ,×M—¯LíMüßN‰TâNë ì  ë Ýs ì ûp†x“o²®Bÿü öNü þ$ûNÝD‰Oõ,¦O—¯L¼Oü°P?T³Pí î  í Ýs î ûp²®Bÿü ¾Pü ÿ$ÃPÝDÉP¬£QÓÚÃ%$"$>Ýs�ƒ…‚ ƒ † ƒ�…ü¿Q4,ÂQï ð  ï Ýs ð êÁ�™Bÿ€ ÈQ€ �$ÍQ”¶ÓQd�R��‚�‚�‚‚�‚¢Ç�™UÿèÁüºRGt½Rñ ò ó  ñ Ýs ò Œ‰Œ‰�‰Åð�‰óö7 Å0ײ÷([Oó �™Bÿ€ ÌR€ ƒ$ÑRbufsÁ$×Rd�Sƒ�„�„�„„ƒ„Éœ  Œ‰Œ‰�‰Åð�‰óö7 Å0ײ÷([OüÒS%,ÕSô  ô Ýs²®Bÿ€ ÛS€ …$àSd“T…�†�†�††…†¢Ç²®Uÿ´¹TÓÚÃC'@'>8õ õ ¦tˆŠŒ‚ ƒ † ŒˆŠüÖT4,ÙTö ÷  ö ¦t ÷ êÁ�™Bÿ‡ ßT‡ ˆ8$äT”¶êTd¦Uˆ�‰�‰�‰‰ˆ‰ÉœלüÑUGtÔUø ù ú  ø ¦t ù Œ‰Œ‰�‰Åð�‰óö7 Å0ײ÷([Oú �™Bÿ‡ ãU‡ Š8$èU†�$îUd´VŠ�‹�‹�‹‹Š‹ÉœèžüéV%,ìVû  û ¦t²®Bÿ‡ òV‡ Œ8$÷VdªWŒ�������Œ�Πü˜X \ÐW’öÜW�üàW74 The underlying pipe is **not** set to non-blocking.ÁÓÚÃ�*Œ*>Ýs�®�ü¿X$$ÂX¹tÝsBÿŽŽ �stdinÁ,ÇXÌøYÓÚÃ++>Ýs‘¥#‘ü˜Z*\¢ZÝsÿ�� ‘Ð%®Z¼¢[ÓÚÃv+s+>Ýs“£#“äÀ[LÃ[ü  ü ÝsBÿ’ Í[’ “$Î[̇\ÓÚÃø+õ+>Ýs•§#•ì§\\ª\ÝsBÿ”” •$¶\ìþ\ÓÚÃg,d,>–u—®—ü¢]$¥]Ýs–uBÿ–– —senderÁ4ª]¤ö]ÓÚÃÞ,Û,>Ýs™…$™ü‘^!,”^ý  ý Ýs®L®LØ °LÐ%Û#±LÁÑÛ#t4bE™ý Bÿ˜ š^˜ ™$›^ìÙ^ÓÚâ-Ÿ->Ýs›®›äý^$€_–uÝsBÿšš ›Ð%…_l•aÓÚÃ..>åu�žüæaBü©a85 Set the `Receiver` into or out of non-blocking mode.Á|ía�  � åu²®Bÿœ ýaœ �$þa½ \„büŒtaüóbJ¯‚üÂc&„ƒíc�\õc’ö…d�ü�dF݃üØdL®„ü©e%……Óe�üÛe-Â…�f�t•fÅŠ¨f�<°fŠàä¼fÍ‹,Ýfò—üçf/ó‹„›g«Ãì°gЕÄÒgâçïg�ü÷g*’‡¦h�ü®h+Ô‡Þh�üæhB—ˆü­i9䈼ëi§‰ô‡jȉüªj3ñ‰üâjQ¯Š´¸kŠ‹äÓkª‹„ôkЋü‰lJë‹üØl0ÀŒü�m+ûŒL½mÞ–DËm¾�üØm#Ñ�€n�üˆn-ŒŽºn�üÂnEÑŽüŒo8¡�ÜÉoã�üéo ‰�üŽp3´�üÆpRò�´�qŠ‹ä¸qª‹„ÙqЋüîqIù‘ü¼r0ÀŒüñr+ûŒL¡sÞ–D¯s¾�ü¼s"‡“dãsÀï<ôsþ–<€tŠà4“t‚  ‚ åuŽÇ®ÇBÿœ‚Ÿ� Ÿ   tœ¹• štÊ• �tÛ•ÌÓtî•lßt žŽÇ”Ç$¡tœþf79<>�už�¡�¡�¡¡ž“ÎüŸuÓÚÃS3P3>åu£¤¥£¤¥¥£¤üÅu‡DÈuƒ „  ƒ åu „ ûp†x“o²®Bÿ¢ Úu¢ £$ßuÝDíuõ,Šv—¯L vü’w‰T•w… †  … åu † ûp†x“o²®Bÿ¢ ©w¢ ¤$®wÝD¼wõ,Ùw—¯Lïwüãx?Tæx‡ ˆ  ‡ åu ˆ ûp²®Bÿ¢ ñx¢ ¥$öxÝDüx´ÖyÓÚà 5 5>åu§©èé§©üóy7$öy‰ Š  ‰ åu Š êÁ�™Bÿ¦ ûy¦ §$€z”¶†zdÆz§�¨�¨�¨¨§¨Éœ êÁüðzMlóz‹ Œ �  ‹ åu Œ ü7ü7ý7âðÿ7óö7 ŽEøD²�<� �™Bÿ¦ �{¦ ©$†{†�$Œ{dÙ{©�ª�ª�ªª©ªÉœ  ü7ü7ý7âðÿ7óö7 ŽEøD²�<¼‹|ÓÚÃU7R7>8Ž Ž ®v¬®è鮬ü©|7$¬|� �  � ®v � êÁ�™Bÿ« ±|« ¬8$¶|”¶¼|dü|¬�­�­�­­¬­Éœ©¾ü¦}Ml©}‘ ’ “  ‘ ®v ’ ü7ü7ý7âðÿ7óö7 ŽEøD²�<“ �™Bÿ« ·}« ®8$¼}†�$Â}d�~®�¯�¯�¯¯®¯Éœ¶Àü‰#\Á~’öÍ~�üÑ~7ø¥ÓÚé9¦9>åu±®±ü³($¶ÁvåuBÿ°° ±stdoutÁ4»ü¼�#\ô€’ö€��ü„�7ø¥ÓÚÃO:L:>åu³®³üæ�($é�„wåuBÿ²² ³stderrÁ4î�ܧƒÓÚÃÊ:Ç:>åuµ§#µìɃ\̃åuBÿ´´ µ$؃Ì „ÓÚÃ=;:;>åu·£#·äÀ„LÄ”  ” åuBÿ¶ Í„¶ ·$΄܇…ÓÚÃÄ;Á;>åu¹¥#¹ü©…,\³…åuÿ¸¸ ¹Ð%¿…ü·†ÓÚÃ:<7<>–u»®»ü݆#$à†åu–uBÿºº »Ÿ D冴·‡ÓÚï<¬<>åu½…$½üÔ‡!,ׇ•  • åu®L®LØ °LÐ%Û#±LÁÑÛ#t4bE™• Bÿ¼ ݇¼ ½$Þ‡üœˆÓÚÃy=v=>åu¿®¿äˆ$ň–uåuBÿ¾¾ ¿Ð%ʈüŸŠBÓÚÃî=ë=Å€ ŒÇ‰Å� ¬Ú‰ÅŸ ¬ñ‰Å± ”ˆŠüƉUü‰Zü¹‰e|¢Š¶²®Bÿ ÀÐ%²Š½ \½ŠŒ¶8üÉ7  Sending end of an Unix pipe.Áê7�üî763 See [`new`] for documentation, including examples.ÁÓÚà ? ?·4Á8ÝsÈ7£#Õ×æÂ¬Î8,Î8¶ÁÁ©Äka¹ÝsÄ gÄkakaä å æ  ä Ýs å €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡æ çµBÿú®8à Äkaœkaœá`üò_" Receiving end of an Unix pipe.Á•`�ü™`6÷ÎÓÚÀ@}@¸Dì`åu_âÃŒ”òðƬû`,û`¶ÅÅ©ÄeºåuÈ gÈeeþ ÿ €  þ åu ÿ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡€ çµBÿÇ»Ù`Ç ÈeœeÛ—ü85 Associates readiness events with [`event::Source`]s.Á9�ü=EB `Token` is a wrapper around `usize` and is used as an argument toÁüƒ85 [`Registry::register`] and [`Registry::reregister`].Á¼�üÀ3˜•ô�üø0Àˆô©ÇÜüÈ@= [`Registry::register`]: struct.Registry.html#method.registerÁü‰DA [`Registry::reregister`]: struct.Registry.html#method.reregisterÁÎ�lÒ # ExampleÁà�üäMJ Using `Token` to track which socket generated the event. In this example,Áü²EB `HashMap` is used, but usually something like [`slab`] is better.Áø�üü+( [`slab`]: https://crates.io/crates/slabÁ¨�,è\⾋ä¿Í‹üÜ/ó‹üŒ2Ðúü¿3�ûüó-* use mio::{Events, Interest, Poll, Token};Áô¡ use mio::net::TcpListener;ÁÀ�¤ÄȱôÙ use std::io::{self, Read};Áüø" use std::collections::HashMap;Á› �üŸ JG // After this number of sockets is accepted, the server will shutdown.Áüê " const MAX_SOCKETS: usize = 32;Á� �ü‘ NK // Pick a token that will not be used by any other socket and use that oneÁÄà  // for the listener.Áüù (% const LISTENER: Token = Token(1024);Á¢ �ü¦ ! // Used to store the sockets.ÁüÈ %" let mut sockets = HashMap::new();Áî �üò ;8 // This is used to generate a unique token for a socketÁü® " let mut next_socket_index = 0;ÁÑ �ÔÕ  // The `Poll` instanceÁüð Û�‘ �œ•  // Tcp listenerÁü© B? let mut listener = TcpListener::bind("127.0.0.1:0".parse()?)?;Áì �äð °—ü�KH poll.registry().register(&mut listener, LISTENER, Interest::READABLE)?;ÁÙ�üÝJG // Spawn a thread that will connect a bunch of sockets then close themÁü¨&# let addr = listener.local_addr()?;ÁÜÏ’þüë  use std::net::TcpStream;ÁŒ�ü�NK // +1 here is to connect an extra socket to signal the socket to closeÁüß%" for _ in 0..(MAX_SOCKETS+1) {Áü…+( // Connect then drop the socketÁü±63 let _ = TcpStream::connect(addr).unwrap();ÁLèÞ–<òâþú�¤þ // Event storageÁü“1…�Å�üÉ74 // Read buffer, this will never actually get filledÁÜ� let mut buf = [0; 256];Á��Ô¡ // The main event loopÁT¼ä“ÔÇ // Wait for eventsÁüâ&ø“‰�ô�³”ü¬!É�ìÎ LISTENER => {ÁüìIF // Perform operations in a loop until `WouldBlock` isÁü¶# // encountered.ÁÔÚ loop {Áüõ1. match listener.accept() {Áü§41 Ok((mut socket, _)) => {ÁüÜ63 // Shutdown the serverÁü“EB if next_socket_index == MAX_SOCKETS {ÁüÙ2/ return Ok(());ÁüŒ! }Á®�ü²?< // Get the token for the socketÁüòEB let token = Token(next_socket_index);Áü¸74 next_socket_index += 1;Áð�üôB? // Register the new socket w/ pollÁü·b_ poll.registry().register(&mut socket, token, Interest::READABLE)?;Áš�üž30 // Store the socketÁüÒ>; sockets.insert(token, socket);Áì‘ }Áü¯TQ Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {Áü„NK // Socket is not ready anymore, stop acceptingÁüÓ&# break;Áìú•òü˜KH e => panic!("err={:?}", e), // Unexpected errorÁÌä }Á¬þ¶”Œ”Ô”Ô¦ token => {ÁüÁ/, // Always operate in a loopÁÔñÉêüŒ OL match sockets.get_mut(&token).unwrap().read(&mut buf) {ÁüÜ &# Ok(0) => {Áüƒ!KH // Socket is closed, remove it from the mapÁüÏ!74 sockets.remove(&token);Áü‡"&òóì®"•òüÌ"HE // Data is not actually sent in this exampleÁü•#41 Ok(_) => unreachable!(),ÁüÊ#T¼òüŸ$LI // Socket is not ready anymore, stop readingÁüì$&òóì“%•òü±%K¯ôÌý%ƒõ¬—&¶”Œ­&Ô”l¿&È–LÍ&Þ–,×&ð–<Ý&þ–<å&Šà,¼'†xúÛt ‰PÊËŸy†xBÿÛ—3Ÿy†xBÿÉÉ ÊLÂ'ÉÉŸy ¾ö&»†xògògòg¼†xòg¼†xφÏògòg–  – †x†xBÿοü&Î ÏògUh½†xÑ gÑUhUh— ˜ ™  — †x ˜ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡™ çµBÿÐÀƒ'Ð ÑUhœUh¦i¾†x¦i¾†xÔù±Ô¦i¦iš ›  š †x › †xBÿÓÁŠ'Ó Ô¦iî ¦ij¿†xÖÎÖjjjjœ  œ †xBÿÕ•'Õ ÖjWjÀ†xر²ØWjWj� ž  � †x ž †x˜•Bÿ×Ù'× ØWjî WjokÁ†xÚîÚokokŸ    Ÿ †x   †x“”BÿÙÄ¥'Ù Úokî ok l†xÜühÜ l l¡ ¢  ¡ †x ¢ þØBÿÛÿÝÝŪ'ÛþÆþØ lƒiþØ l ÜþØ lƒ l l l„€ü21. Waker allows cross-thread waking of [`Poll`].Ád�ühIF When created it will cause events with [`readable`] readiness and theÁü²IF provided `token` if [`wake`] is called, possibly from another thread.Áü�ô€ÇÜüŸ>áªüÞ+( [`wake`]: struct.Waker.html#method.wakeÁŠ�\Ž’öš�üžNK `Waker` events are only guaranteed to be delivered while the `Waker` valueÁlí is alive.Áû�üÿNK Only a single `Waker` can be active per [`Poll`], if multiple threads needÁüÎIF access to the `Waker` it can be shared via for example an `Arc`. WhatÁü˜GD happens if multiple `Waker`s are registered with the same `Poll` isÁ„à unspecified.Áñ�ÔõñÐ��ü”JG On platforms that support kqueue this will use the `EVFILT_USER` eventÁüßNK filter, see [implementation notes of `Poll`] to see what platforms supportÁü®'$ kqueue. On Linux it uses [eventfd].ÁÖ�üÚKH [implementation notes of `Poll`]: struct.Poll.html#implementation-notesÁü¦C@ [eventfd]: https://man7.org/linux/man-pages/man2/eventfd.2.htmlÁê�tîÅŠý�ü� 1. Wake a [`Poll`] instance from another thread.Á³ �,Ý \× ¾‹üž ;8 # fn main() -> Result<(), Box> {Á¤Ú ȱäï £±¼Œ  use std::sync::Arc;Á¤ �ü¨ *' use mio::{Events, Token, Poll, Waker};ÁÓ �ü× (% const WAKE_TOKEN: Token = Token(10);Á€ �ü„ Û�ü¥ .+ let mut events = Events::with_capacity(2);ÁÔ �üØ C@ let waker = Arc::new(Waker::new(poll.registry(), WAKE_TOKEN)?);Áœ �ü  GD // We need to keep the Waker alive, so we'll create a clone for theÁôè  // thread we create below.Áü‡ let waker1 = waker.clone();Áü§(% let handle = thread::spawn(move || {ÁüÐ+( // Working hard, or hardly working?Áüü2/ thread::sleep(Duration::from_millis(500));Á¯�ü³85 // Now we'll wake the queue on the other thread.Áüì/, waker1.wake().expect("unable to wake");Á<œâþ¤�ü¨FC // On our current thread we'll poll for events, without a timeout.Áüï"ùû’�ü–OL // After about 500 milliseconds we should be awoken by the other thread andÁÔæ // get a single event.Áü�  assert!(!events.is_empty());Áü¢41 let waker_event = events.iter().next().unwrap();Áü×'$ assert!(waker_event.is_readable());Áüÿ0- assert_eq!(waker_event.token(), WAKE_TOKEN);Áì° # handle.join().unwrap();Á„ÎŒ¶<ßþ–<çŠà,‹¬yqS ÆÊR½|ߌ—,—_ÞÞØr�lìyá gá�l�l£ ¤ ¥  £ ¬y ¤ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡¥ çµBÿàÆøà á�lœ�l„Œ´) A readiness event.Á@�üDKH `Event` is a readiness state paired with a [`Token`]. It is returned byÁœ� [`Poll::poll`].Á¤�ü¨?< For more documentation on polling and events, see [`Poll`].Áè�üì3á•ü !ž–üÂ# [`Token`]: ../struct.Token.htmlÁ,—àyWJ%üõ³EÀ㌣,£jââÍÜ3nÄàyå†å3n3n¨  ¨ àyàyBÿäÇïä å3nœËij  [`Events`] iterator.ÁÌ �üÐ @= This struct is created by the [`iter`] method on [`Events`].Á‘ �ü• " [`Events`]: struct.Events.htmlÁü¸ ,) [`iter`]: struct.Events.html#method.iterÁå �té ÅŠø �,¢ \œ ¾‹äã Í‹ü€ /ó‹ä° ˜—äÍ £±ê �üî 1…�ü  Û�Á �üÅ $Фê �üî >û˜­�ü± Ï™üÒ9ù™,Œð–„’Œ¶<£þ–<«Šà$ÖŒçç×zškk_!?âÉèéÛŒå,傿æ¨{Tüü‚ææŸyFoÅŒëë×zì gìgiFoFoº » ¼  º ×z » €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡¼ çµBÿêȼê ìŒFoœFofqÆŒîî×zï†ïMPfqfq½  ½ ×z×zBÿíÉÃí ïŒfql¨ Ó“*xÊÖ Ì Êë ÓÚÃ�Êñ ÐÊê øÊÕ 0 øÊÌ ; L¬ �¤s, Ü"ðòDerefMutÁD é"ðó¸; packet (or the packet has the same size as the buffer).ÁüÜ.+ * Windows returns an `WSAEMSGSIZE` error.Á‹�ü�OL Mio does not change the value (either ok or error) returned by the OS, it'sÁüßQN up to the user to handle this. How to deal with these differences is still upÁü±  for debate, specifically inÁüÑ LI . The best advice we canÁüž >; give is to always call receive with a large enough buffer.ÁÓ“*xÌ  ¸Ìš Ñ ©Çœœ>\û ÆÅæÂALˆ „ÆÃ«FL¡ ß›ÖLdä µùæºPdò ÿú�¬ST€ ºû÷<Þ â ¨ªçœ>\& ÆæÂALV „Ãd D ©Æ“*$ ù ª¬æŽT ý˜ª­¨ $Z „$ª¯¸<` ¢#ª°Ø Ti ®Lª±ÖLu ¤#ª²Œ L€ ¦#ª³ª <‹ í#ª´ô,” ¡#ªµñ´ ¾,ª·ÿ¹¹ ‰ª¸ÿ9DÕ �ª¹ÂALï „ªºÆÃç,lö ‘ª»¾,$Ó Žª½Ù,4Ù �ª¾ª,dá �ª¿Æ,ü iªÁëƒ [ªÂˆ Dˆ ÀªÃ±ìD’ @ªÄ´–7,œ ɪŵ–7ʪŵD õ æé\L Ì$, ÅŠ”2 Ô+ ü"% ùÌ"ÅŠ! ÌBÅŠA@?"ÌbÅŠa`_.̂Ŋ�€:)̢Ŋ¡ ŸF4ÌÂÅŠÁÀ¿Q?ÌâÅŠáàß\® NQ>AÔà 3¬ã %ôå Ì$‰ Å ÅŠ”± ¸÷µ ŒÉ œÈ ü°, üƒ[ üúf X|Á ÅŠ”“ ¸÷µ Œ§ ü’' üŽ, ü…7 xÅŠ1¸÷µ /-*'œŠÅŠX¸÷µ VTQN®œÅЏ÷µ }{xuÀ,ô ²µ¤§–™ƒ†qt´¹ ü¥, ) A structure representing a socket serverÁÒ �tÖ ÅŠå �,� \‰ ¾‹äÐ Í‹üí/ ó‹ü� - ðÚôË ¦Ûäê £±‡ �ü‹ F C let mut listener = TcpListener::bind("127.0.0.1:34255".parse()?)?;ÁÒ �üÖ Û�ü÷ 0 - let mut events = Events::with_capacity(128);Á¨ �ü¬ & # // Register the socket with `Poll`ÁüÓ K H poll.registry().register(&mut listener, Token(0), Interest::READABLE)?;ÁŸ �ü£ > û˜â �üæ 1 . // There may be a socket ready to be acceptedÁ„˜ Œ¶<© þ–<± Šà\Ä Ÿ~eÄk¸ÇüÖ ! ,Ö ªÆÆ��ÿ9ƒƒð„Óð…§:ð׊æ5VÃe „ü Ÿ~ÉÊËÎÏÐÑüò8 ü“J G Convenience method to bind a new TCP listener to the specified addressÁüâ  to receive new connections.Á† �üŽ0 - This function will take the following steps:Áà �üË  1. Create a new TCP socket.Áüï; 8 2. Set the `SO_REUSEADDR` option on the socket on Unix.Áü¯0 - 3. Bind the socket to the specified address.ÁüäM J 4. Calls `listen` on the socket to prepare it to receive new connections.ÁÅŠ”Ä ¸÷µ ŒØ üÃ' ü¿, ü¶7 $ù Ö¥ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwŸ~„¯BÿÈÈ ÉùŽ$þ ü²: üÛC @ Creates a new `TcpListener` from a standard `net::TcpListener`.Á£ �ü«H E This function is intended to be used to wrap a TCP listener from theÁüøJ G standard library in the Mio equivalent. The conversion assumes nothingÁüÇF C about the underlying listener; it is left up to the user to set itÁÜ’  into non-blocking mode.ÁD¹  Ÿ~BÿÈÈ Ê‰/D ü½#; ôÆ  Accepts a new `TcpStream`.Áé �üñ 3 0 This may return an `Err(e)` where `e.kind()` isÁü©!L I `io::ErrorKind::WouldBlock`. This means a stream may be ready at a laterÁüú!I F point and one should wait for an event before calling `accept` again.ÁÈ" �üÐ"H E If an accepted stream is returned, the remote address of the peer isÁÜ�#  returned along with it.Á4Ä# ë  ë Ÿ~ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÜÖ¥„¯BÿÈ Ë# È Ë$Ì# <”$ Ë�Ì�Ì�ÌÌËÌ  ýì Uÿ„Æ$ Ë�Í�Í�ÍÍËÍó¶Ìí UÿüÍ%2 ü’%6 3 Returns the local socket address of this listener.ÁTÔ% ì  ì Ÿ~Ä®BÿÈ ß% È Î$à% üß'1 ü­&: 7 Sets the value for the `IP_TTL` option on this socket.Áì& �üô&L I This value sets the time-to-live field that is used in every packet sentÁ¬Å'  from this socket.Á<æ' í  í Ÿ~²®BÿÈ î' È Ï$ï' ‡?õ' üô)$ ü¾(: 7 Gets the value of the `IP_TTL` option for this socket.Áý( �ü…)B ? For more information about this option, see [`set_ttl`][link].ÁÌ) �ÜÔ)  [link]: #method.set_ttlÁû) î  î Ÿ~ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw„¯BÿÈ ÿ) È Ð$€* üµ,9 ü¿*: 7 Get the value of the `SO_ERROR` option on this socket.Áþ* �ü†+J G This will retrieve the stored error in the underlying socket, clearingÁüÕ+L I the field in the process. This can be useful for checking errors betweenÁT¦,  calls.ÁT¼, ï  ï Ÿ~ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwřǙș­É™Ê™àË™óG*¤�R{9 „¯„¯BÿÈ Ç, È Ñ$È, üš-" Ÿ~ÓÔÕ£¤¥ÕÓÔüÃ-‡ DÆ- ð ñ  ð Ÿ~ ñ ûp†x“o²®BÿÒ Ø- Ò Ó$Ý- ÝDë- õ,ˆ. —¯Lž. ü�/‰ T“/ ò ó  ò Ÿ~ ó ûp†x“o²®BÿÒ §/ Ò Ô$¬/ ÝDº/ õ,×/ —¯Lí/ üá0? Tä0 ô õ  ô Ÿ~ õ ûp²®BÿÒ ï0 Ò Õ$ô0 ÝDú0 üÔ1 Ÿ~× g×üú18 ý1 ö ÷ ø  ö Ÿ~ ÷ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡ø çµBÿÖ �2 Ö ×$‚2 œ ˆ2 ô”3 Ì$â2 Åî¤è2 ÅŠ”þ2 üá20 üØ2; Ÿ~Ù§#Ùì¹3 \¼3 Ÿ~BÿØØ Ù$È3 äÌ4 Ì$š4 Å4 ÅŠ”¶4 ü™40 ü�4; Ÿ~Û£#Ûäï4 Lò4 ù  ù Ÿ~BÿÚ ü4 Ú Û$ý4 ôò5 Ì$À5 Åî¤Æ5 ÅŠ”Ü5 ü¿50 ü¶5; Ÿ~Ý¥#ÝüÆ7/ ü—6* ' Converts a `RawFd` to a `TcpListener`.ÁÆ6 �\Î6 ’öÞ6 �üæ6@ = The caller is responsible for ensuring that the socket is inÁ´«7  non-blocking mode.Á\Ð7 Ÿ~ÿÜÜ ÝÐ%Ü7 ü÷8" Ì$Å8 Åî¤Ë8 ÅŠ”á8 üÄ80 ü»8; –uß®ßü 9* $£9 Ÿ~–uBÿÞÞ ß tcp_listenerÁd¨9 ÌÁ: Ì$�: Å: ÅŠ”«: üŽ:0 ü…:; Ÿ~á…$áüá:! ,ä: ú  ú Ÿ~®L®LØ °LÐ%Û#±LÁÑÛ#t4bE™ú Bÿà ê: à á$ë: üå;" Ì$³; Å; ÅŠ”Ï; ü²;0 ü©;; Ÿ~ã®ãä½= üŽ<* 〠½< �\Å< ’öÕ< �üÝ<@ ¼� ´¢= …‚ $À= –uŸ~Bÿââ ãÐ%Å= ü®H+  å®åüàH& $ãH Ÿ~ Bÿää å‰/DèH Ü ¶T4 48 ©„ñ ¾,çèÿ¹$ ‰çêÅð<" Œ‰çëâðT+ ü7çìÔÜ$7 ççíìÜ,= � çî“*$T ù çðShutdownÁDZ ™DçñæŽTd ý˜çò¨ $© „$çô¸<¯ ¢#çõØ T¸ ®LçöÖLÄ ¤#ç÷Œ LÏ ¦#çøª <Ú í#çùô,ã ¡#çúÿ9D� �çûÊ,<è �çýª,dñ �çþÆ,Œ i瀈 D“ Àç�±ìD� @ç‚´–7,§ É烵–7Ê烵D  < þ ïòßâÐÓÁÄDI ¶N  £‘”\› Ì${ ÅŠ”� Ôz üq% ¦Ì#ÅŠ" ñÌCÅŠB@?μÌcÅŠb`_ÙÇ̃Ŋ‚€äỌ̀Ŋ¢ ŸïÝÌÃÅŠÂÀ¿úèÌãÅŠâàßÔþ ÷|Ö ÅŠ”¨ ¸÷µ Œ¼ ü§' ü£, üš7 ÅŠ1¸÷µ /-*';)ÅŠX¸÷µ VTQNM,„ ?B14! ¤­ ü°I F A non-blocking TCP stream between a local socket and a remote socket.Áú �üþ8 5 The socket will be closed when the value is dropped.Á· �t» ÅŠÊ �,ô \î ¾‹üµ. + # use std::net::{TcpListener, SocketAddr};Áää Í‹,� ò—ü‡ / ó‹ü· 5 ò±üí / , let listener = TcpListener::bind(address)?;Áü� - ðÚäË âŒäè £±… �ü‰ A > let mut stream = TcpStream::connect(listener.local_addr()?)?;ÁË �üÏ Û�üð 0 òÛ ¡ �ü¥ & ¸Ü üÌ I F poll.registry().register(&mut stream, Token(0), Interest::WRITABLE)?;Á– �üš > û˜Ù �üÝ . + // The socket might be ready at this pointÁ„Œ Œ¶<� þ–<¥ ŠàL¸ Ü+.ûòö 㬅üÈ ,È ç„„œ†tì ܇ˆ‰Š‹Œ�Ž��‘“üó9 ü�C @ Create a new TCP stream and issue a non-blocking connect to theÁ´É  specified address.Áä �\ì ’öü �ü„K H The returned `TcpStream` may not be connected (and thus usable), unlikeÁüÔ@ = the API found in `std::net::TcpStream`. Because Mio issues aÁü™J G *non-blocking* connect it will not block the thread and instead returnÁüè  an unconnected `TcpStream`.ÁŒ �ü”J G Ensuring the returned stream is connected is surprisingly complex whenÁüãI F considering cross-platform support. Doing this properly should followÁü±; 8 the steps below, an example implementation can be foundÁüñ€ } [here](https://github.com/Thomasdezeeuw/heph/blob/0c4f1ab3eaf08bea1d65776528bfd6114c9f8374/src/net/tcp/stream.rs#L560-L622).Áö �üþ!  1. Call `TcpStream::connect`Áü¤D A 2. Register the returned stream with at least [write interest].Áüí$ ! 3. Wait for a (writable) event.Áü–C @ 4. Check `TcpStream::take_error`. If it returns an error, thenÁüÞG D something went wrong. If it returns `Ok(None)`, then proceed toÁ|ª step 5.Áü¾J G 5. Check `TcpStream::peer_addr`. If it returns `libc::EINPROGRESS` orÁü�K H `ErrorKind::NotConnected` it means the stream is not yet connected,ÁüÝJ G go back to step 3. If it returns an address it means the stream isÁü¬G D connected, go to step 6. If another error is returned somethingÁœø  went wrong.Áü�# 6. Now the stream can be used.Á¸ �üÀF C This may return a `WouldBlock` in which case the socket connectionÁü‹L I cannot be completed immediately, it usually means there are insufficientÁüÜ!  entries in the routing cache.Á‚ �üŠ( % [write interest]: Interest::WRITABLEÁÅŠ”Å ¸÷µ ŒÙ üÄ' üÀ, ü·7 <ú Ö¥ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÜ„¯Bÿ†† ‡ùŽ$‚ ü£$4 üƒ ? < Creates a new `TcpStream` from a standard `net::TcpStream`.ÁÇ �üÏ F C This function is intended to be used to wrap a TCP stream from theÁüš!J ¸æ üé!G D about the underlying stream; it is left up to the user to set it inÁ´µ" …‚ Ð" �TØ"  # NoteÁç" �üï"C @ The TCP stream here will not have `connect` called on it, so itÁü·#H E should already be connected via some other means (be it manually, orÁÔ„$  the standard library).ÁDª$ Œ�ÜBÿ†† ˆƒ04³$ üû%1 ü­%I F Returns the socket address of the remote peer of this TCP connection.ÁL‚& û  û ÜÄ®Bÿ† Œ& † ‰$�& ü¦'2 üÙ&H E Returns the socket address of the local half of this TCP connection.ÁT­' ü  ü ÜÄ®Bÿ† ¸' † Š$¹' ü’*7 ü†(B ? Shuts down the read, write, or both halves of this connection.ÁÍ( �üÕ(H E This function will cause all pending and future I/O on the specifiedÁü¢)E B portions to return immediately with an appropriate value (see theÁüì)!  documentation of `Shutdown`).ÁD™* ý  ý Ü™DšD›DÔÜœD�DìÜžDŸDBothÁ•IÒ) «©²®Bÿ† ¢* † ‹$£* howÁ©* ü‚0: üø*> ; Sets the value of the `TCP_NODELAY` option on this socket.Á»+ �üÃ+E B If set, this option disables the Nagle algorithm. This means thatÁü�,I F segments are always sent as soon as possible, even if there is only aÁüÛ,I F small amount of data. When not set, data is buffered until there is aÁü©-K H sufficient amount to send out, thereby avoiding the frequent sending ofÁ”ù-  small packets.Á�. �\˜. ’ö¨. �ü°.L I On Windows make sure the stream is connected before calling this method,Áü�/C @ by receiving an (writable) event. Trying to set `nodelay` on anÁüÉ/4 1 unconnected `TcpStream` is unspecified behavior.Á\‰0 þ  þ ܲ®Bÿ† •0 † Œ$–0 ¬B<œ0 ü¦4) üò0> ; Gets the value of the `TCP_NODELAY` option on this socket.Áµ1 �ü½1F C For more information about this option, see [`set_nodelay`][link].Áˆ2 �ü�2  [link]: #method.set_nodelayÁ´2 �\¼2 ’öÌ2 �üÔ2L ùµ ü¥3C @ by receiving an (writable) event. Trying to get `nodelay` on anÁüí34 œ· <­4 ÿ  ÿ ÜÕ¼Bÿ† µ4 † �$¶4 üš81 üú4: ëï ¹5 �üÁ5L »ð ¬’6 �ñ ¬6 �\´6 ’öÄ6 �üÌ6L ùµ ü�7? < by receiving an (writable) event. Trying to set `ttl` on anÁüá74 œ· <¡8 €  € ܲ®Bÿ† ©8 † Ž$ª8 ‡?°8 ü�<$ üù8: �ò ¸9 �üÀ9B Ýò ‡: �\�: ’öŸ: �ü§:L ùµ üø:? < by receiving an (writable) event. Trying to get `ttl` on anÁü¼;4 œ· õ; �Üý; ´ó ¤< �  � Üúô Bÿ† ¨< † �$©< üÞ>9 üè<: ÿô §= �ü¯=J Ïõ üþ=L £ö TÏ> øö Tå> ‚  ‚ Ü­ø Bÿ† ð> † �$ñ> üžB7 üÅ?F C Receives data on the socket from the remote address to which it isÁü�@E B connected, without removing that data from the queue. On success,ÁüÚ@' $ returns the number of bytes peeked.Á†A �üŽAJ G Successive calls return the same data. This is accomplished by passingÁüÝA< 9 `MSG_PEEK` as a flag to the underlying recv system call.Á$¥B ƒ „  ƒ Ü „ êÁ�™Bÿ† ªB † ‘$«B ”¶±B <€D ‘�’�’�’’‘’…‡�™Uÿ©¾ü®Sa ü¤DJ ¯‚üóD& „ƒžE �\¦E ’ö¶E �ü¾EF ݃ü‰FL ®„üÚF% ……„G �üŒG- Â…¾G �tÆG ÅŠÙG �\øG ŒòG ```no_runÁä¶H Í‹,×H ò—üáH/ ó‹„•I «ÃüªI) & #[cfg(any(unix, target_os = "wasi"))]ÁìØI ЕœúI  #[cfg(windows)]Áü’J* ' use std::os::windows::io::AsRawSocket;ÁäÁJ âŒâJ �üêJ4 1 let address = "127.0.0.1:8080".parse().unwrap();Áü£K. + let stream = TcpStream::connect(address)?;ÁÖK �üÞK+ ( // Wait until the stream is readable...ÁŽL �ü–LC @ // Read from the stream using a direct libc call, of course theÁüÞL8 ¡�Ü›M ã�ô»M  let n = stream.try_io(|| {ÁüÞM3 ´�¤–N  #[cfg(unix)]Áü¯NS P let res = unsafe { libc::recv(stream.as_raw_fd(), buf_ptr, buf.len(), 0) };Á¼‡O  #[cfg(windows)]Áü£O— ” let res = unsafe { libc::recvfrom(stream.as_raw_socket() as usize, buf_ptr, buf.len() as i32, 0, std::ptr::null_mut(), std::ptr::null_mut()) };Á´¿P Š‹äÚP ª‹„ûP Ћü�QI F // If EAGAIN or EWOULDBLOCK is set by libc::recv, the closureÁüÞQ0 ÀŒü“R+ ûŒLÃR Þ–DÑR ¾�üÞR" ‡“d…S Àï<–S þ–<¢S Šà4µS …  … ÜŽÇ®ÇBÿ†‚”�••” ÂS †¹• ¼S Ê• ¿S Û•ÌõS î•l�T “ŽÇ”Ç$ÃS œ¦ƒ79<>¯T “�–�–�––“¹‡¼ÁT ܘšè阚üßT7 $âT † ‡  † Ü ‡ êÁ�™Bÿ— çT — ˜$ìT ”¶òT \²U ˜�™�™�™™˜™îÆ ©¾üÚUM lÝU ˆ ‰ Š  ˆ Ü ‰ ü7ü7ý7âðÿ7óö7 ŽEøD²�<Š �™Bÿ— ëU — š$ðU †�$öU \ÃV š�›�›�››š›îÆ ¶ÀÜóV 8‹ ‹ ‘€�Ÿèé�Ÿü•W7 $˜W Œ �  Œ ‘€ � êÁ�™Bÿœ �W œ �8$¢W ”¶¨W \èW ��ž�ž�žž�žîÆ ©¾ü�XM l“X Ž � �  Ž ‘€ � ü7ü7ý7âðÿ7óö7 ŽEøD²�<� �™Bÿœ ¡X œ Ÿ8$¦X †�$¬X \ùX Ÿ� � �  Ÿ îÆ ¶ÀÄ©Y Ü¢¤¦‚ ƒ † ¤¢¦üÈY4 ,ËY ‘ ’  ‘ Ü ’ êÁ�™Bÿ¡ ÑY ¡ ¢$ÖY ”¶ÜY \˜Z ¢�£�£�££¢£îÆ לüÁZG tÄZ “ ” •  “ Ü ” Œ‰Œ‰�‰Åð�‰óö7 Å0ײ÷([O• �™Bÿ¡ ÓZ ¡ ¤$ØZ †�$ÞZ \¤[ ¤�¥�¥�¥¥¤¥îÆ èžü×[% ,Ú[ –  – ܲ®Bÿ¡ à[ ¡ ¦$å[ \˜\ ¦�§�§�§§¦§…‡²®Uÿä¼\ 8— — ‘€©«­‚ ƒ † ©­«üß\4 ,â\ ˜ ™  ˜ ‘€ ™ êÁ�™Bÿ¨ è\ ¨ ©8$í\ ”¶ó\ \¯] ©�ª�ª�ªª©ªîÆ לüØ]G tÛ] š › œ  š ‘€ › Œ‰Œ‰�‰Åð�‰óö7 Å0ײ÷([Oœ �™Bÿ¨ ê] ¨ «8$ï] †�$õ] \»^ «�¬�¬�¬¬«¬îÆ èžüî^% ,ñ^ �  � ‘€²®Bÿ¨ ÷^ ¨ ­8$ü^ \¯_ ­�®�®�®®­®òà üÓ_ ܰ±²£¤¥°±²üú_‡ Dý_ ž Ÿ  ž Ü Ÿ ûp†x“o²®Bÿ¯ �` ¯ °$”` ÝD¢` õ,¿` —¯LÕ` üÇa‰ TÊa   ¡    Ü ¡ ûp†x“o²®Bÿ¯ Þa ¯ ±$ãa ÝDña õ,Žb —¯L¤b ü˜c? T›c ¢ £  ¢ Ü £ ûp²®Bÿ¯ ¦c ¯ ²$«c ÝD±c ì‹d Ü´ g´ü¯d8 ²d ¤ ¥ ¦  ¤ Ü ¥ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡¦ çµBÿ³ ¶d ³ ´$·d œ ½d äÉe Ì$—e Åî¤�e ÅŠ”³e ü–e0 ü�e; ܶ§#¶ììe \ïe ÜBÿµµ ¶$ûe Ôÿf Ì$Íf Åî¤Óf ÅŠ”éf üÌf0 üÃf; ܸ£#¸ä g L£g §  § ÜBÿ· ­g · ¸$®g ä£h Ì$ñg Åî¤÷g ÅŠ”�h üðg0 üçg; ܺ¥#ºüói- üÆh( % Converts a `RawFd` to a `TcpStream`.Áóh �\ûh ’ö‹i �ü“i@ ¼� ´Øi …‚ \ýi Üÿ¹¹ ºÐ%‰j ü k Ì$îj Åî¤ôj ÅŠ”Šk üíj0 üäj; –u¼®¼üÇk& $Êk Ü–uBÿ»» ¼ tcp_streamÁTÏk ¼âl Ì$°l Ål ÅŠ”Ìl ü¯l0 ü¦l; ܾ…$¾ü€m! ,ƒm ¨  ¨ Ü®L®LØ °LÐ%Û#±LÁÑÛ#t4bE™¨ Bÿ½ ‰m ½ ¾$Šm ü„n Ì$Òm Åî¤Øm ÅŠ”îm üÑm0 üÈm; ÜÀ®ÀäØo ü«n( Úí Øn �\àn ’öðn �üøn@ ¼� ´½o …‚ $Ûo –uÜBÿ¿¿ ÀÐ%ào ü«z' Œ�®ÂüÙz" $Üz ÜŒ�BÿÁÁ ƒ04áz ¼H ÌQLï uRxReRhR<Í ÅŠ”£ ¸÷µ Œ· ü¢ 'üž ,ü• 7Ñ ¨ß…£Dƒ ¨—ÇÉ¢£D� ¶—ÇÊæŽT— ý˜Ç˨ $Ü „$Ç͸<â ¢#ÇÎØ Të ®LÇÏÖL÷ ¤#ÇÐŒ L‚ ¦#ÇѪ <� í#ÇÒô,– ¡#ÇÓñ¶ ¾,ÇÕÿ¹» ‰ÇÖ“*¿ ù Ç×ÿ9DÜ �ÇØÆ,ò iÇÚëù [ÇÛˆ Dþ ÀÇܱìDˆ @ÇÝ´–7,’ ÉÇÞµ–7ÊÇÞµDø ¸»§ª–™\Î Ì$® ÅŠ”´ Ô­ ü¤% ­Ì&ÅŠ$" ʸÌFÅŠDB@ÕÃÌfÅŠdb`àÎ̆Ŋ„‚€ëÙ̦Ŋ¤¢ öäÌÆÅŠÄÂÀïÌæÅŠäâà ° þîñßâÔÊ Ô,ê ÆÉ¸»ª­—š…ˆ¤¡ ü›$ ! A User Datagram Protocol socket.ÁÀ �üÄP M This is an implementation of a bound UDP socket. This supports both IPv4 andÁü• P M IPv6 addresses, and there is no corresponding notion of a server because UDPÁÜæ  is a datagram protocol.Á‚ �t† ÅŠ• �,Ï \É ¾‹äÅ Í‹,â ò—üè / 󋼘  // An Echo program:Áü° !  // SENDER -> sends a message.ÁüÒ 9 6 // ECHOER -> listens and prints the message received.ÁŒ �ä�  use mio::net::UdpSocket;Áü­ - ðÚäÛ £±ø �üü # const SENDER: Token = Token(0);Áü # const ECHOER: Token = Token(1);ÁÄ �üÈ_ \ // This operation will fail if the address is in use, so we select different ports for eachÁt¨ // socket.Áü·E B let mut sender_socket = UdpSocket::bind("127.0.0.1:0".parse()?)?;ÁüýE B let mut echoer_socket = UdpSocket::bind("127.0.0.1:0".parse()?)?;Áà �üÇ` ] // If we do not use connect here, SENDER and ECHOER would need to call send_to and recv_fromÁ¤¨  // respectively.Áü½8 5 sender_socket.connect(echoer_socket.local_addr()?)?;Áö �üúb _ // We need a Poll to check if SENDER is ready to be written into, and if ECHOER is ready to beÁŒÝ  // read from.Áüï Û�� �ü”^ [ // We register our sockets here so that we can check if they are ready to be written/read.ÁüóN K poll.registry().register(&mut sender_socket, SENDER, Interest::WRITABLE)?;ÁüÂN K poll.registry().register(&mut echoer_socket, ECHOER, Interest::READABLE)?;Á‘ �ì•  let msg_to_send = [9; 9];Áä³  let mut buffer = [0; 9];ÁÐ �üÔ0 òÛ T… ä“ü�B ˆ‹üÓ$ ‡Œüø! É�üš: 7 // Our SENDER is ready to be written into.ÁÜÕ  SENDER => {ÁüñG D let bytes_sent = sender_socket.send(&msg_to_send)?;Áü¹. + assert_eq!(bytes_sent, 9);ÁüèQ N println!("sent {:?} -> {:?} bytes", msg_to_send, bytes_sent);Á”º ùõüÍ7 4 // Our ECHOER is ready to be read from.ÁÜ…  ECHOER => {Áü¡D A let num_recv = echoer_socket.recv(&mut buffer)?;ÁüæD A println!("echo {:?} -> {:?}", buffer, num_recv);Áü«$ ! buffer = [0; 9];ÁüÐG D # _ = buffer; // Silence unused assignment warning.Áü˜$ ! # return Ok(());ÁŒ½ Ô”üÏ# _ => unreachable!()Áló È–L� Þ–,‹ ð–<‘ þ–<™ ŠàL¬ È�VÄ"DHK‰àü¼ ,¼ Çßß²Štà È�âãäåæèêìîðòóôõö÷øùúûüýþÿ€�‚ƒüÁ%6 üõ0 - Creates a UDP socket from the given address.Áª �t² ÅŠÅ �,ƒ \ý ¾‹ä� Í‹,¢ ò—ü¬ / ó‹äà ®ÿ �! �ü‰!* ' // We must bind it to an open address.Áü¸!@ = let socket = match UdpSocket::bind("127.0.0.1:0".parse()?) {Áüý!% " Ok(new_socket) => new_socket,Á´§"  Err(fail) => {ÁüÂ"U R // We panic! here, but you could try to bind it again on another address.Áüœ#8 5 panic!("Failed to bind socket. {:?}", fail);ÁLÙ# Þ–4ç# á¨ò# �üú#W T // Our socket was created, but we should not use it before checking it's readiness.ÁüÖ$: 7 # drop(socket); // Silence unused variable warning.Á|•% # Ok(())Á<©% þ–<µ% Šà$È% Ö¥ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÈ�„¯Bÿáá âùŽ$Í% üˆ)4 ü»&? < Creates a new `UdpSocket` from a standard `net::UdpSocket`.Áÿ& �ü‡'F C This function is intended to be used to wrap a UDP socket from theÁüÒ'J ¸æ ü¡(G D about the underlying socket; it is left up to the user to set it inÁ´í( …‚ D�) ЂÈ�Bÿáá 㺲4˜) ü 12 ü’*A > Returns the socket address that this socket was created from.ÁØ* �tà* ÅŠó* �,¥- \Ÿ- ¾‹äÚ. Í‹,û. ò—ü…// ó‹ä¹/ ®ÿ Ú/ �üâ/& # let addr = "127.0.0.1:0".parse()?;Áü�0( % let socket = UdpSocket::bind(addr)?;Áüº05 2 assert_eq!(socket.local_addr()?.ip(), addr.ip());Á|ô0 Û— <ˆ1 þ–<”1 ŠàT§1 ©  © È�Ä®Bÿá ²1 á ä$³1 üÍ71 ü€2O L Returns the socket address of the remote peer this socket was connected to.ÁÔ2 �tÜ2 ÅŠï2 �,­3 \§3 ¾‹ä«4 Í‹,Ì4 ò—üÖ4/ ó‹äŠ5 ®ÿ «5 �ü³5& ½� üÞ5/ , let peer_addr = "127.0.0.1:11100".parse()?;Áü’6( í� ü¿6  socket.connect(peer_addr)?;Áüã69 6 assert_eq!(socket.peer_addr()?.ip(), peer_addr.ip());Á|¡7 Û— <µ7 þ–<Á7 ŠàLÔ7 ª  ª È�Ä®Bÿá Þ7 á å$ß7 üÇ>J ü«8J G Sends data on the socket to the given address. On success, returns theÁäú8  number of bytes written.Á›9 �ü£9I F Address type can be any implementor of `ToSocketAddrs` trait. See itsÁüñ9( % documentation for concrete examples.Áž: �t¦: ÅŠ¹: �lÁ: ```no_runÁäÓ: Í‹üô:/ ó‹ä¨; ®ÿ É; �üÑ;: 7 let socket = UdpSocket::bind("127.0.0.1:0".parse()?)?;Á�< �ü˜ ò—|›> Û— <¯> þ–<»> Šà<Î> « ¬  « È� ¬ êÁÖ¥�™Bÿá Ö> á æ$×> ”¶Ý> ´4é> <­? æ�ç�ç�ççæçœ‹�™UÿèÁ Ö¥üãHJ üÜ?J G Receives data from the socket. On success, returns the number of bytesÁü«@3 0 read and the address from whence the data came.Áã@ �\ë@ ’öû@ �üƒAK H On Windows, if the data is larger than the buffer specified, the bufferÁüÓAN K is filled with the first part of the data, and recv_from returns the errorÁü¦B0 - WSAEMSGSIZE(10040). The excess data is lost.ÁüÛBC @ Make sure to always use a sufficiently large buffer to hold theÁü£CD A maximum UDP packet size, which can be up to 65536 bytes in size.ÁìC �tôC ÅŠ‡D �l�D ˜¦ ä¡D Í‹,ÂD ò—üÌD/ ó‹ä€E ®ÿ ¡E �ü©E: 㦠èE �üðEH E // We must check if the socket is readable before calling recv_from,Áü½F/ ƒ¨ ñF �ÌùF  let mut buf = [0; 9];Áü—G< 9 let (num_recv, from_addr) = socket.recv_from(&mut buf)?;ÁüØGP M println!("Received {:?} -> {:?} bytes from {:?}", buf, num_recv, from_addr);Á,­H ò—|·H Û— <ËH þ–<×H ŠàLêH ­ ®  ­ È� ® êÁÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwŸyÖ¥„¯Bÿá ôH á è$õH ”¶ûH <ÉI è�é�é�ééè霋ºµ Uÿ©¾ü«SJ üòIL I Receives data from the socket, without removing it from the input queue.ÁüÃJL I On success, returns the number of bytes read and the address from whenceÁ””K  the data came.Á«K �\³K ’öÃK �üËKK •­ ü›LN K is filled with the first part of the data, and peek_from returns the errorÁüîL0 ® ü£MC ü® üëMD ɯ ´N �t¼N ÅŠÏN �l×N ˜¦ äéN Í‹,ŠO ò—ü”O/ ó‹äÈO ®ÿ éO �üñO: 㦠°P �ü¸PH ¤± ü…Q/ ƒ¨ ¹Q �ÌÁQ �² üßQ< 9 let (num_recv, from_addr) = socket.peek_from(&mut buf)?;Áü RP ø² ,õR ò—|ÿR Û— <“S þ–<ŸS ŠàL²S ¯ °  ¯ È� ° êÁºµ Bÿá ¼S á ê$½S ”¶ÃS <‘T ê�ë�ë�ëëêë‘· ©¾üÃU3 üºTW T Sends data on the socket to the address previously bound via connect(). On success,Áü–U( % returns the number of bytes written.Á$ÊU ± ²  ± È� ² êÁ�™Bÿá ÏU á ì$ÐU ”¶ÖU <’V ì�í�í�ííìí¶¬ לü·Z7 ü¶VV S Receives data from the socket previously bound with connect(). On success, returnsÁì‘W  the number of bytes read.Á³W �\»W ’öËW �üÓWK •­ ü£XI F is filled with the first part of the data, and recv returns the errorÁüñX0 ® ü¦YC ü® üîYD ɯ $¾Z ³ ´  ³ È� ´ êÁ�™Bÿá ÃZ á î$ÄZ ”¶ÊZ <Š[ î�ï�ï�ïïîﶬ ©¾ü¹_7 ü®[L ²¶ üÿ[1 . On success, returns the number of bytes read.Áµ\ �\½\ ’öÍ\ �üÕ\K •­ ü¥]I F is filled with the first part of the data, and peek returns the errorÁüó]0 ® ü¨^C ü® üð^D ɯ $À_ µ ¶  µ È� ¶ êÁ�™Bÿá Å_ á ð$Æ_ ”¶Ì_ <Œ` ð�ñ�ñ�ññðñ¶¬ ©¾ü«c9 ü°`H E Connects the UDP socket setting the default destination for `send()`Áüý`L I and limiting packets that are read via `recv` from the address specifiedÁtÎa in `addr`.Ááa �üéaF í£ ü´bL ½¤ ü…c! “¥ <²c ·  · È�Ö¥²®Bÿá ºc á ò$»c ùŽ$Ác ü·k7 ü“d@ = Sets the value of the `SO_BROADCAST` option for this socket.ÁØd �üàdG D When enabled, this socket is allowed to send packets to a broadcastÁd¬e address.Á½e �tÅe ÅŠØe �,–f \�f ¾‹ä”g Í‹,µg ò—ü¿g/ ó‹üóg- * # // WASI does not yet support broadcast.Áü¥h3 �ûäÝh ®ÿ þh �ü†iD A let broadcast_socket = UdpSocket::bind("127.0.0.1:0".parse()?)?;ÁüÏi/ , if broadcast_socket.broadcast()? == false {Áüƒj. + broadcast_socket.set_broadcast(true)?;Á,¶j ð–Àj �üÈj4 1 assert_eq!(broadcast_socket.broadcast()?, true);Á,�k ò—|‹k Û— <Ÿk þ–<«k Šàl¾k ¸  ¸ È�²®Bÿá Ìk á ó$Ík Ù Ók üór+ ü¡l@ = Gets the value of the `SO_BROADCAST` option for this socket.Áæl �üîl/ , For more information about this option, seeÁä¢m  [`set_broadcast`][link].ÁÃm �üËm!  [link]: #method.set_broadcastÁñm �tùm ÅŠŒn �,Ên \Än ¾‹äÈo Í‹,éo ò—üóo/ ó‹ü§p- ÕÌ üÙp3 �ûä‘q ®ÿ ²q �üºqD ³Í üƒr5 2 assert_eq!(broadcast_socket.broadcast()?, false);Á,½r ò—|Çr Û— <Ûr þ–<çr ŠàLúr ¹  ¹ È�Õ¼Bÿá „s á ô$…s ü¬u? üËsE B Sets the value of the `IP_MULTICAST_LOOP` option for this socket.Á•t �ü�tJ G If enabled, multicast packets will be looped back to the local socket.Áüìt; 8 Note that this may not have any affect on IPv6 sockets.Á¬³u º  º È�²®Bÿá Éu á õ$Êu Ù Ðu ü‹x3 ü¦vE B Gets the value of the `IP_MULTICAST_LOOP` option for this socket.Áðv �üøv/ ³Ñ ü¬w$ ! [`set_multicast_loop_v4`][link].ÁÕw �üÝw) & [link]: #method.set_multicast_loop_v4ÁŒ’x »  » È�Õ¼Bÿá ¤x á ö$¥x üé{> üóxD A Sets the value of the `IP_MULTICAST_TTL` option for this socket.Á¼y �üÄyF C Indicates the time-to-live value of outgoing multicast packets forÁü�zJ G this socket. The default value is 1 which means that multicast packetsÁüÞz> ; don't leave the local network unless explicitly requested.Á¡{ �ü©{; áÖ ¤ð{ ¼  ¼ È�²®Bÿá …| á ÷$†| ‡?Œ| üÄ~1 üâ|D A Gets the value of the `IP_MULTICAST_TTL` option for this socket.Á«} �ü³}/ ³Ñ üç}# [`set_multicast_ttl_v4`][link].Á�~ �ü—~( % [link]: #method.set_multicast_ttl_v4Á„Ë~ ½  ½ È�úô Bÿá Ü~ á ø$Ý~ üŽ�? ü©G D Sets the value of the `IPV6_MULTICAST_LOOP` option for this socket.Áõ �üýL I Controls whether this socket sees the multicast packets it sends itself.Áü΀; 8 Note that this may not have any affect on IPv4 sockets.Á¬•� ¾  ¾ È�²®Bÿá «� á ù$¬� Ù ²� üïƒ3 üˆ‚G D Gets the value of the `IPV6_MULTICAST_LOOP` option for this socket.ÁÔ‚ �üÜ‚/ ³Ñ ü�ƒ$ ! [`set_multicast_loop_v6`][link].Á¹ƒ �üÁƒ) & [link]: #method.set_multicast_loop_v6ÁŒöƒ ¿  ¿ È�Õ¼Bÿá ˆ„ á ú$‰„ üÚŠ1 üׄ: ëï –… �üž…L »ð ¬ï… �ñ ‰† �t‘† ÅŠ¤† �,↠\܆ ¾‹äà‡ Í‹,�ˆ ò—ü‹ˆ/ ó‹俈 ®ÿ àˆ �üèˆ: 㦠䧉  if socket.ttl()? < 255 {Áìȉ  socket.set_ttl(255)?;Á,ê‰ ð–ô‰ �üü‰# assert_eq!(socket.ttl()?, 255);Á,¤Š ò—|®Š Û— <Š þ–<Ί Šà<አÀ  À È�²®Bÿá éŠ á û$êŠ ‡?ðŠ ü‘‘$ ü¹‹: �ò ø‹ �ü€ŒB Ýò ÇŒ �ÜÏŒ ´ó ïŒ �t÷Œ ÅŠŠ� �,È� \Â� ¾‹äÆŽ Í‹,çŽ ò—üñŽ/ ó‹ä¥� ®ÿ Æ� �üÎ�: 㦠Ì��  socket.set_ttl(255)?;Á«� �ü³�# Ûç ,Û� ò—|å� Û— <ù� þ–<…‘ Šà˜‘ Á  Á È�úô Bÿá œ‘ á ü$�‘ ü´•] üÜ‘: 7 Executes an operation of the `IP_ADD_MEMBERSHIP` type.Á›’ �ü£’J G This function specifies a new multicast group for this socket to join.Áüò’I F The address must be a valid multicast address, and `interface` is theÁüÀ“H E address of the local interface with which the system should join theÁü�”F C multicast group. If it's equal to `INADDR_ANY` then an appropriateÁüØ”& # interface is chosen by the system.ÁŒ»•  à Ä   È� à ¨—¨—…£©—octetsÁôTSŵ{» Ä Óñ ²®Bÿá Í• á ý$Ε  multiaddrÁLÔ•  interfaceÁLê• üÀ™W üÚ–< 9 Executes an operation of the `IPV6_ADD_MEMBERSHIP` type.Á›— �ü£—J  í üò—I õí üÀ˜J G index of the interface to join/leave (or 0 to indicate any interface).ÁŒÇ™ Å Æ  Å È� Æ ¶—¶—¢£·—êð ôTcÇ,3@ü²®Bÿá Ù™ á þ$Ú™ ¿ñ Là™ Ññ Lö™ üäœ^ üàš; 8 Executes an operation of the `IP_DROP_MEMBERSHIP` type.Á › �ü¨›/ ³Ñ üÜ›  [`join_multicast_v4`][link].Á�œ �ü‰œ% " [link]: #method.join_multicast_v4Á”ëœ Ç È É  Ç È� È Óñ É Óñ ²®Bÿá þœ á ÿ$ÿœ ¿ñ L…� Ññ L›� ü’ X üŒž= : Executes an operation of the `IPV6_DROP_MEMBERSHIP` type.ÁΞ �üÖž/ ³Ñ üŠŸ  [`join_multicast_v6`][link].Á¯Ÿ �ü·Ÿ% " [link]: #method.join_multicast_v6Á”™  Ê Ë  Ê È� Ë êô ²®Bÿá ¬  á €$­  ¿ñ L³  Ññ LÉ  ü§¢) ü´¡= : Get the value of the `IPV6_V6ONLY` option on this socket.Á<®¢ Ì  Ì È�Õ¼Bÿá ¶¢ á �$·¢ üû¤9 ü…£: ÿô Ä£ �üÌ£J Ïõ ü›¤L £ö Tì¤ øö T‚¥ Í  Í È�­ø Bÿá �¥ á ‚$Ž¥ üã´a üâ¥J ¯‚ü±¦& „ƒܦ �\ä¦ ’öô¦ �üü¦F ݃üǧL ®„ü˜¨% ……¨ �üʨ- Â…ü¨ �t„© ÅŠ—© �\¶© Œ°© »Ç äô© Í‹,•ª ò—üŸª/ ó‹„Óª «Ãüèª) †È ì–« Еœ¸« ÅÈ üЫ* âÈ äÿ« ®ÿ  ¬ �ü¨¬4 ¯É üá¬* ' let dgram = UdpSocket::bind(address)?;Á�­ �ü˜­* ' // Wait until the dgram is readable...ÁÇ­ �üÏ­B ? // Read from the dgram using a direct libc call, of course theÁü–®8 ¡�ÜÓ® ã�ìó®  let n = dgram.try_io(|| {Áü•¯3 ´�¤Í¯ ŽÌ üæ¯R O let res = unsafe { libc::recv(dgram.as_raw_fd(), buf_ptr, buf.len(), 0) };Á¼½° ˆÍ üÙ°– “ let res = unsafe { libc::recvfrom(dgram.as_raw_socket() as usize, buf_ptr, buf.len() as i32, 0, std::ptr::null_mut(), std::ptr::null_mut()) };Á´ô± Š‹ä�² ª‹„°² ЋüŲI óÎ ü“³0 ÀŒüȳ+ ûŒLø³ Þ–D†´ ¾�ü“´" ‡“dº´ Àï<Ë´ þ–<×´ Šà4ê´ Î  Î È�ŽÇ®ÇBÿá‚„�……„ ÷´ ṕ ñ´ Ê• ô´ Û•̪µ î•l¶µ ƒŽÇ”Ç$ø´ œÅ…<>@Bäµ ƒ�†�†�††ƒÒ‹üöµ È�ˆ‰Š£¤¥‰Šˆü�¶‡ D ¶ Ï Ð  Ï È� Ð ûp†x“o²®Bÿ‡ ²¶ ‡ ˆ$·¶ ÝDŶ õ,â¶ —¯Lø¶ üê·‰ Tí· Ñ Ò  Ñ È� Ò ûp†x“o²®Bÿ‡ �¸ ‡ ‰$†¸ ÝD”¸ õ,±¸ —¯LǸ ü»¹? T¾¹ Ó Ô  Ó È� Ô ûp²®Bÿ‡ ɹ ‡ Š$ι ÝDÔ¹ 쮺 È�Œ gŒüÒº8 Õº Õ Ö ×  Õ È� Ö €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡× çµBÿ‹ Ùº ‹ Œ$Úº œ ຠäì» Ì$º» Åî¤À» ÅŠ”Ö» ü¹»0 ü°»; È�ާ#Žì�¼ \’¼ È�Bÿ�� Ž$ž¼ Ô¢½ Ì$ð¼ Åî¤ö¼ ÅŠ”Œ½ üï¼0 üæ¼; È��£#�äý Lƽ Ø  Ø È�Bÿ� н � �$ѽ 䯾 Ì$”¾ Å¾ ÅŠ”°¾ ü“¾0 üо; È�’¥#’ü–À- üé¾( % Converts a `RawFd` to a `UdpSocket`.Á–¿ �\ž¿ ’ö®¿ �ü¶¿@ ¼� ´û¿ …‚ \ À È�ÿ‘‘ ’Ð%¬À üÃÁ Ì$‘Á ÅÁ ÅŠ”­Á ü�Á0 ü‡Á; –u”®”üêÁ& $íÁ È�–uBÿ““ ” udp_socketÁTòÁ ¼…à Ì$Ó Åî¤Ù Ŋ”ï üÒÂ0 üÉÂ; È�–…$–ü£Ã! ,¦Ã Ù  Ù È�®L®LØ °LÐ%Û#±LÁÑÛ#t4bE™Ù Bÿ• ¬Ã • –$­Ã ü§Ä Ì$õà Åî¤ûà Ŋ”‘Ä üôÃ0 üëÃ; È�˜®˜äûÅ üÎÄ( è� ûÄ �\ƒÅ ’ö“Å �ü›Å@ ¼� ´àÅ …‚ $þÅ –uÈ�Bÿ—— ˜Ð%ƒÆ üÎÐ' Ђš®šüüÐ" $ÿÐ È�ЂBÿ™™ šº²4„Ñ ¤– ÅŠ”ä ¸÷µ Œø üã 'üß ,üÖ 7´£<º Ì$³ d­ ¾ ¨�çžÖLd&!µæºPd[!ÿ�¬STŒ!º÷d!D!œµ¯‰ D™D�ž¨ $*„$� ¸<0¢#�¡Ø T9®L�¢ÖLE¤#�£Œ LP¦#�¤ª <[í#�¥ô,d¡#�¦“*$…æE�¨æŽT‹ÚK�©­Ä$§ù'�ªñ·¾,�¬ÿ¹¼‰�­ÿ9DØ��®Æ,îi�°ëõ[�±ˆ DúÀ�²±ìD„@�³´–7,ŽÉ�´µ–7Ê�´µ”¬\ž¡�“‚…twfiX[JM”p?/2|œ#±ÔÆú,æëíÛÝËͶ¸¢¤¼³Ü— A Unix datagram socket.Ád¾�ƒú;:-Ñì)x¶üÑ",Ñ�µµΕŒø�ƒ¸º»¼¾¿ÁÂÃÅÇÊÌÍÎüÐ@ü�;8 Creates a Unix datagram socket bound to the given path.Á$×ÞŽä‘Bÿ·Œ¹¹·þÆÞŽ Ü£ÞŽù'ù'­Äú'ÓÒ%uÂHnìŽ M\ß ¸ÞŽª ‰SUüÈBüúIF Creates a new `UnixDatagram` bound to the specified socket `address`.ÁLÏÚ  Ú Ü�ä‘Bÿ· â·¡‘Ÿ<Ùü» :üãEB Creates a new `UnixDatagram` from a standard `net::UnixDatagram`.Á­�üµIF This function is intended to be used to wrap a Unix datagram from theÁüƒJ¸æ üÒIF about the underlying datagram; it is left up to the user to set it inÁ´  …‚ D îƒ�ƒBÿ·· »º²4Ë ü€ @üÎ 1. Connects the socket to the specified address.Á„ �üŒ Fí£ ü× $! cannot be completed immediately.Á<‡ Û  Û �ƒÞ޲®Bÿ·Œ½½ Ÿ ·èŸ � ùŸ \’  ¼ÞŽ$  ª w‹#%ü¹ ,üï EB Creates a Unix Datagram socket which is not bound to any address.Á<À ä‘Bÿ·· ¾üê9üµ0- Create an unnamed pair of connected sockets.Á$ñÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw�ƒ�ƒ„¯Bÿ·· ¿¤Í¿�À�À�ÀÀ¿À‚Äž© Uÿü¤2üø'$ Returns the address of this socket.ÁT«Ü  Ü �ƒ��Bÿ· ¶· Á$·üÿ1ü„.+ Returns the address of this socket's peer.Á·�ü¿;8 The `connect` method will connect the socket to a peer.ÁL†Ý  Ý �ƒ��Bÿ· �· Â$‘üôJüÝ" Receives data from the socket.Á„�üŒEB On success, returns the number of bytes read and the address fromÁÌÖ whence the data came.ÁLûÞ ß  Þ �ƒ ß êÁÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwŸyÜ�„¯Bÿ· …· Ã$†”¶Œ<ÚÃ�Ä�Ä�ÄÄÃÄ‘™ô® Uÿ©¾üè7üƒ"—¬ ª�ü²1°Ä $ïà á  à �ƒ á êÁ�™Bÿ· ô· Å$õ”¶û<»Å�Æ�Æ�ÆÆÅÆŒ™©¾üÛOüß63 Sends data on the socket to the specified address.Áš�ü¢41 On success, returns the number of bytes written.Á<ââ ã  â �ƒ ã êÁÞŽ�™Bÿ·ŒÈÈ ú·èŸ êùŸ \í ÇÞŽ$û”¶�ª �+-<ÆÇ�É�É�ÉÉÇ šü‹3üó2/ Sends data on the socket to the socket's peer.Áª�ü²HE The peer address may be set by the `connect` method, and this methodÁüÿFC will return an error if the socket has not already been connected.ÁÊ�üÒ4«² $’ä å  ä �ƒ å êÁ�™Bÿ· —· Ê$˜”¶ž<ÚÊ�Ë�Ë�ËËÊËŒ™לü²9üþ/, Returns the value of the `SO_ERROR` option.ÁT¹æ  æ �ƒ­ø Bÿ· Ä· Ì$Åüª 7ü™A> Shut down the read, write, or both halves of this connection.Áß�üçDA This function will cause all pending and future I/O calls on theÁü°FC specified portions to immediately return with an appropriate valueÁüû*' (see the documentation of `Shutdown`).ÁD± ç  ç �ƒ’² ²®Bÿ· º · Í$» ‚² Á ü¡3aü�!J¯‚üß!&„ƒŠ"�\’"’ö¢"�üª"F݃üõ"L®„üÆ#%……ð#�üø#-Â…ª$�t²$ÅŠÅ$�,é$\ã$¾‹äË%Í‹,ì%ò—üö%/󋄪&«Ãì¿&Еüá& use mio::net::UnixDatagram;Á…'�ü�'1. let (dgram1, dgram2) = UnixDatagram::pair()?;ÁÃ'�üË'*' // Wait until the dgram is writable...Áú'�ü‚(A> // Write to the dgram using a direct libc call, of course theÁüÈ(9䈼†)§‰ô¢) let n = dgram1.try_io(|| {ÁüÅ)3ñ‰üý)SP let res = unsafe { libc::send(dgram1.as_raw_fd(), buf_ptr, buf.len(), 0) };Á´Õ*Š‹äð*ª‹„‘+Ћü¦+IF // If EAGAIN or EWOULDBLOCK is set by libc::send, the closureÁüô+0ÀŒü©,+ûŒLÙ,Þ–Dç,¾�üô,#Ñ�œ-�ü¤-*üÿ Ó-�üÛ-B¾€ ü¢.8¡�Üß.ã�ôÿ. let n = dgram2.try_io(|| {Áü¢/3´�üÚ/SP let res = unsafe { libc::recv(dgram2.as_raw_fd(), buf_ptr, buf.len(), 0) };Á´²0Š‹äÍ0ª‹„î0Ћüƒ1IóÎ üÑ10ÀŒü†2+ûŒL¶2Þ–DÄ2¾�üÑ2"‡“dø2Àï<‰3þ–<•3Šà4¨3è  è �ƒŽÇ®ÇBÿ·‚Ï�ÐÐÏ µ3·¹• ¯3Ê• ²3Û•Ìè3î•lô3 ÎŽÇ”Ç$¶3œ2�79<>¢4Î�Ñ�Ñ�ÑÑÎÇžü´4#�ƒÓÔÕ£¤¥ÔÓÕüÞ4‡Dá4é ê  é �ƒ ê ûp†x“o²®BÿÒ ó4Ò Ó$ø4ÝD†5õ,£5—¯L¹5ü«6‰T®6ë ì  ë �ƒ ì ûp†x“o²®BÿÒ Â6Ò Ô$Ç6ÝDÕ6õ,ò6—¯Lˆ7üü7?Tÿ7í î  í �ƒ î ûp²®BÿÒ Š8Ò Õ$�8ÝD•8üï8 �ƒ× g×ü–98™9ï ð ñ  ï �ƒ ð €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡ñ çµBÿÖ �9Ö ×$ž9œ ¤9üô9�ƒÙ§#Ùìš:\�:�ƒBÿØØ Ù$©:ìñ:�ƒÛ£#Ûä•;L˜;ò  ò �ƒBÿÚ ¢;Ú Û$£;üÜ;�ƒÝ¥#Ýü²=0ü‚<+( Converts a `RawFd` to a `UnixDatagram`.Á²<�\º<’öÊ<�üÒ<@¼� ´—=…‚ \¼=�ƒÿÜÜ ÝÐ%È=ü©>-îƒß®ßüÝ>'$à>�ƒîƒBÿÞÞ ß .Då>ü­A#–uá®áü×A,$ÚA�ƒ–uBÿàà á unix_datagramÁlßAÔ¿B�ƒã…$ãüàB!,ãBó  ó �ƒ®L®LØ °LÐ%Û#±LÁÑÛ#t4bE™ó Bÿâ éBâ ã$êBü¨C#�ƒå®åäÒC$ÕC–u�ƒBÿää åÐ%ÚCä!jd5!D9!œÿ¨ $„$çé¸<¢#çêØ T!®LçëÖL-¤#çìŒ L8¦#çíª Creates a new `UnixStream` from a standard `net::UnixStream`.Áú �ü‚ GD This function is intended to be used to wrap a Unix stream from theÁüÎ J¸æ ü� Gó¨ ´é …‚ „ �TŒ Ü© › �ü£ DA The Unix stream here will not have `connect` called on it, so itÁüì Hɪ Ô¹ š« Dß ª‡—†Bÿ¼¼ Àƒ04è üè5üå1. Creates an unnamed pair of connected sockets.Á›�ü£@= Returns two `UnixStream`s which are connected to each other.Á$ïÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw—†—†„¯Bÿ¼¼ Á¤ÅÁ�Â�Â�ÂÂÁÂ�Χ€ Uÿü†2ü½DA Returns the socket address of the local half of this connection.ÁT�„  „ —†��Bÿ¼ ˜¼ Ã$™ü°1üæEB Returns the socket address of the remote half of this connection.ÁL·…  … —†��Bÿ¼ Á¼ Ä$ÂüÂ9üŽ/°¸ TɆ  † —†­ø Bÿ¼ Ô¼ Å$Õü»7ü©BÍ® ð�üøD•º üÁF㺠üŒ*³» D‡  ‡ —†’² ²®Bÿ¼ ˼ Æ$Ì‚² Òü¸*aü¡J¯‚üð&„ƒ›�\£’ö³�ü»F݃ü†L®„ü×%……��ü‰-Â…»�tÃÅŠÖ�,ú\ô¾‹äÜÍ‹,ýò—ü‡/ó‹„»«ÃìÐЕìò use mio::net::UnixStream;Á”�üœ1. let (stream1, stream2) = UnixStream::pair()?;ÁÒ�üÚ+( // Wait until the stream is writable...ÁŠ�ü’B? // Write to the stream using a direct libc call, of course theÁüÙ9䈼— §‰ü³  let n = stream1.try_io(|| {Áü× 3ñ‰ü�!TQ let res = unsafe { libc::send(stream1.as_raw_fd(), buf_ptr, buf.len(), 0) };Á´è!Š‹äƒ"ª‹„¤"Ћü¹"IŸÂ ü‡#0ÀŒü¼#+ûŒLì#Þ–Dú#¾�ü‡$#Ñ�¯$�ü·$+±Ê ç$�üï$CòÊ ü·%8¡�Üô%ã�ü”& let n = stream2.try_io(|| {Áü¸&3´�üð&TQ let res = unsafe { libc::recv(stream2.as_raw_fd(), buf_ptr, buf.len(), 0) };Á´É'Š‹ää'ª‹„…(Ћüš(IóÎ üè(0ÀŒü�)+ûŒLÍ)Þ–DÛ)¾�üè)"‡“d�*Àï< *þ–<¬*Šà4¿*ˆ  ˆ —†ŽÇ®ÇBÿ¼‚È�ÉÈÉ Ì*¼¹• Æ*Ê• É*Û•Ìÿ*î•l‹+ ÇŽÇ”Ç$Í*œð•79<>¹+Ç�Ê�Ê�ÊÊÇ‚¬ÄË+—†ÌÎèéÌÎüê+7$í+‰ Š  ‰ —† Š êÁ�™BÿË ò+Ë Ì$÷+”¶ý+\½,Ì�Í�Í�ÍÍÌÍΫ�™Uÿ©¾üå,Mlè,‹ Œ �  ‹ —† Œ ü7ü7ý7âðÿ7óö7 ŽEøD²�<� �™BÿË ö,Ë Î$û,†�$�-\Î-Î�Ï�Ï�ÏÏÎϧ“ ¶Àäþ-8Ž Ž Ì†ÑÓèéÓÑü¡.7$¤.� �  � ̆ � êÁ�™BÿÐ ©.Ð Ñ8$®.”¶´.\ô.Ñ�Ò�Ò�ÒÒÑÒ§“ ©¾üœ/MlŸ/‘ ’ “  ‘ ̆ ’ ü7ü7ý7âðÿ7óö7 ŽEøD²�<“ �™BÿÐ ­/Ð Ó8$²/†�$¸/\…0Ó�Ô�Ô�ÔÔÓÔ§“ ¶À̵0—†ÖØÚ‚ ƒ † ØÖÚüÕ04,Ø0” •  ” —† • êÁ�™BÿÕ Þ0Õ Ö$ã0”¶é0\¥1Ö�×�×�××Ö×§“ לüÎ1GtÑ1– — ˜  – —† — Œ‰Œ‰�‰Åð�‰óö7 Å0ײ÷([O˜ �™BÿÕ à1Õ Ø$å1†�$ë1\±2Ø�Ù�Ù�ÙÙØÙ§“ èžüä2%,ç2™  ™ —†²®BÿÕ í2Õ Ú$ò2\¥3Ú�Û�Û�ÛÛÚÛΫ²®UÿìÉ38š š ̆Ýßá‚ ƒ † áßÝüí34,ð3› œ  › ̆ œ êÁ�™BÿÜ ö3Ü Ý8$û3”¶�4\½4Ý�Þ�Þ�ÞÞÝÞ§“ לüæ4Gté4� ž Ÿ  � ̆ ž Œ‰Œ‰�‰Åð�‰óö7 Å0ײ÷([OŸ �™BÿÜ ø4Ü ß8$ý4†�$ƒ5\É5ß�à�à�ààßà§“ èžüü5%,ÿ5     ̆²®BÿÜ …6Ü á8$Š6\½6á�â�â�ââáâ�Ÿ üá6!—†ä忣¤¥äåæü‰7‡DŒ7¡ ¢  ¡ —† ¢ ûp†x“o²®Bÿã ž7ã ä$£7ÝD±7õ,Î7—¯Lä7üÖ8‰TÙ8£ ¤  £ —† ¤ ûp†x“o²®Bÿã í8ã å$ò8ÝD€9õ,�9—¯L³9ü§:?Tª:¥ ¦  ¥ —† ¦ ûp²®Bÿã µ:ã æ$º:ÝDÀ:ôš;—†è gèü¿;8Â;§ ¨ ©  § —† ¨ €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡© çµBÿç Æ;ç è$Ç;œ Í;ì�<—†ê§#êìÁ<\Ä<—†Bÿéé ê$Ð<ܘ=—†ì£#ìäº=L½=ª  ª —†Bÿë Ç=ë ì$È=ì�>—†î¥#îüÓ?.ü¥>)& Converts a `RawFd` to a `UnixStream`.ÁÓ>�\Û>’öë>�üó>@¼� ´¸?…‚ \Ý?—†ÿíí îÐ%é?üÆ@)ª‡ð®ðüö@#$ù@—†ª‡Bÿïï ðƒ04þ@ü¼C!–uò®òüäC($çC—†–uBÿññ ò unix_streamÁ\ìCÄÆD—†ô…$ôüåD!,èD«  « —†®L®LØ °LÐ%Û#±LÁÑÛ#t4bE™« Bÿó îDó ô$ïDü­E!—†ö®öäÕE$ØE–u—†Bÿõõ öÐ%ÝEÄ~!LLØ Ì$É dà ðÌððÌ%#ððÌ75ðÒŽ“dÒŽ“dc�“dÿ�“d�“d�“d‘“d‘“d ¹“dÕ¹“d Å&“dÙ&“d6ó“d”“d ¤Ž“dó“dº“d Õ““dé““dE“d ý³“d�“d óÈ“d`#“d ¤Ü“d %“d&“d—&“d^'“d îæ“d‚ç“dö(“d<*“d�“d�“dnY“dn¥“d<¦“d ® “dr§“d²œ“dЛ“dÀš“d•¨“d©“dLª“dšª“d誓d6«“d„«“dÒ«“d ¬“dl¬“d¹¬“d`¬“dÜ-“d è-“d ¬“d ß.“d㙓d?Гd?ä“d ÿ“d­—“d Γd¦–“d É“d'–“d ë“d­•“d þ“df”“dm”“d#]“dè©“dX©“dü¨“dj¨“d¨“dϧ“dY§“du‰“d|‰“d²^“dº¥“d ê“d>¥“d Á“dǤ“d ‰“d…“d¸„“dœ�“d@�“d뀓d‘€“dÞ“d»|“d'z“dMw“d«v“dþt“dÃs“dss“dh2“do2“dka“d0Z“d Q“d�O“d ÄM“d(O“d “O“d¸N“d ÓP“dN“d ØQ“dM“d ÝR“dçR“d'L“d ÈT“dK“d ïT“dJ“d ôU“dþU“dgI“dFG“d£E“dª1“d±1“de“d‹D“d¬@“dk?“d ÷u“dö>“d Æw“d†>“d †y“dë=“d ‹z“dì<“d ’{“d£{“d ™|“d¿;“d Á|“d½:“d È}“dÙ}“d$8“dw6“d{“d»“d“dUh“d5“d<“d°“d5“d<“d»“d“d1“d8“d4“d;“d�l“du-“d�.“dW “d-0“dç2“dz3“d=7“d£;“d?“dÀ@“dûB“dAD“d�D“dãF“d á;“dõ;“d—A“d“H“d ¾A“dÒA“d{ “d‚ “dFo“dÿ“dMP“dTQ“ddS“dÓU“d2V“dÿW“d¢X“dµY“d À,“dÔ,“dòg“d ¾“dj“d ·“dÚk“d –“dÁl“d § “dEm“d ô!“dÄm“d ²#“d “ “d­“d.“d’“d{“d ˆ “d“d Ì “d”“d ‰ “dœ“d ·0 “dË0 “d=ý“dCý“ds€“dÍÿ“d ‰6 “dmÿ“d ý: “d ÿ“d ú@ “d–þ“d`è“dç“dîå“dzä“d‡â“dðá“d õ- “dzá“d Ä/ “d á“d „1 “dFà“d ‹2 “dŸ2 “d)ß“dfÜ“d¥È“dÈ“dHÆ“d/ÓdrÁ“dcÀ“dB¿“d±¾“dÛ¼“d ¶B “dß¶“dÁµ“d ÷T “dÆ´“d üU “d�V “d‚W “d᳓d ­W “dݲ“d ²X “dÃX “dd áY “dï°“d äZ “dîZ “dK°“dÌ\ “dM¯“d ø\ “dE®“d û] “d…^ “d˜­“d ¬“d ¬` “d*¬“d ûa “d¹«“d »c “d÷ª“d Àd “dÔd “dÚ©“di§“d˜�“d�Ž“d‹“d â> “dÉ…“d €I “d;‚“d ÈS “dꀓd ÛU “dö~“d ÏZ “d?}“d Ñ_ “d›{“dx“d(v“dät“d·s“dr“dÜp“d‘o“dWn“djl“dÀj“dEh“d ß• “d õ• “dÔf“d ë™ “d‡e“d �� “d ¦� “dPd“d ¾  “d©c“dc“dD^“d ]“d ϶ “d�\“d ž¸ “d\“d Þ¹ “dL[“d 㺠“d÷º “dZ“d�W“d*Q“dæN“d‰L“d±K“dPJ“d ‘“d`I“d €“dH“d †“d)F“d £“dDE“dÉC“d]>“d-=“d �5“d¶<“d ß6“dD<“d Ÿ8“d;“d §9“d»9“d½:“do8“d‚3“d)1“dÌ0“do0“dÖ/“d ®“d_/“d ý“dí.“d ½“d(.“d Å“dÙ“df-“d+“d¤%“dá!“dC!“dæ “dP “d$“d“d ‚,“dþ“d ‡-“d˜-“d�.“d“d ¹.“d“d ¾/“dÏ/“d$“d î0“d$“d ñ1“dû1“d“dÙ3“d�“d †4“dy“d ‰5“d“5“dÌ“dÒ“d »7“d[“d Š9“dé“d Ê:“d%“d Ð;“dä;“dd“d “dCJíÆÖœùöœeoˆ†œÈ†á·�¼../mio/struct.Poll.htmlÁüí../mio/event/struct.Events.htmlÁonGitHubÁ4https://github.com/tokio-rs/mio/tree/master/examplesÁ»>Åí¾ÅÇ ëÇ ü�È Å†»œÈ ü¿íÅÇ ëÇ �È ÅœÈ »readableÁÆ registeringÁstruct.Registry.htmlÁ event::SourceÁÀ ./event/trait.Source.htmlÁstruct.Poll.htmlÁ»ËÉ struct.Interest.htmlÁÆÝÉ íÉ †Ê �Ê »Ê ËÉ »À ÛÊ ÆÝÉ íÉ †Ê �Ê À »Ê ÛÊ »“ read_closedÁÛÊ •5"https://github.com/asomers/mio-aioÁpull request#1580Á)https://github.com/tokio-rs/mio/pull/1580ÁŽõȲýDuration::ZEROÁ./event/struct.Events.htmlÁÀ �Ê »Ê –7ËÉ writableÁÛÊ •5mio-aioÁýË ¤Ì ýÏ5https://man7.org/linux/man-pages/man2/signalfd.2.htmlÁùÌ †Ê �Ê »Ê ËÉ –7•5 event sourcesÁßÍ ýË ýÏunix/struct.SourceFd.htmlÁ�Î ùÌ íÉ †Ê �Ê –7Éå./event/struct.Event.htmlÁãÎ ßÍ signalfdÁÏJhttps://docs.microsoft.com/en-us/windows/win32/fileio/i-o-completion-portsÁ‹Ï �Î íÉ †Ê ¢åstd::ioÁÖÏ ãÎ std::io::ErrorKind::WouldBlockÁIOCPÁ’Ð ‹Ï €Ð íÉ WouldBlockÁåstd::io::ErrorKindÁƒÑ ÖÏ Poll::pollÁ›Ñ Dhttps://docs.oracle.com/cd/E88353_01/html/E37843/port-create-3c.htmlÁ¾Ñ ’Ð €Ð Ù)ßÑ ‰óÑ ƒÑ ‰./net/struct.TcpStream.htmlÁ–Ò ›Ñ –ˆ event portsÁ«Ò ¾Ñ è Ù)‰ßÑ óÑ û‡§Ó –Ò :https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2ÁÆÙÓ «Ò è‰Ù)kqueueÁ§Ó §Ô ÙÓ Æèí2—2https://man7.org/linux/man-pages/man7/epoll.7.htmlÁŠÕ §Ô Æi» write_closedÁí2epollÁÀÕ ŠÕ struct.Token.htmlÁ»âË •Ö í2ºÌ «Ö ÀÕ ŽõŒÍ ÅÖ À »>ÛÊ ÇÍ âË •Ö ¤Ì ºÌ «Ö ŽõŒÍ À ÅÖ »Ê ËÉ ÇÍ ../event/trait.Source.htmlÁ»../struct.Poll.htmlÁì†Ê Registry::registerÁ../struct.Registry.htmlÁô»Æ†Ê ¢÷× ›Ø ¾Ø ô¡#ì@ÕØ »÷× Æì†Ê ›Ø ¾Ø ôÕØ ÆiNreadable eventÁevent::Event::is_readableÁevent::Event::is_read_closedÁÏ6pipe(2)ÁDhttps://pubs.opengroup.org/onlinepubs/9699919799/functions/pipe.htmlÁInterest::WRITABLEÁ�ßÑ ˜ io::ErrorKind::WouldBlockÁ io::ErrorKindÁÆInterest::READABLEÁòÙ …Ú ò6Ï6ÉÚ ÕÚ �Chttps://pubs.opengroup.org/onlinepubs/9699919799/functions/dup.htmlÁ˜  õÅÛ ãÛ û‡¦ event::EventÁÆúÛ òÙ ò6Ï6ÁÉÚ ˆ dup(2)Á¸Ü ˜ ÅÛ –ˆ¦event::Event::is_writableÁÆiúÛ ¡Ý ò6ň event::Event::is_write_closedÁÝÝ ¸Ü ÿ¹¦writable eventsÁ„Þ ¬¡Ý â‘£Ú ÆÞ ˆ ÀÝÝ ÿ¹ßÑ žÛ ÿÞ ¬„Þ ‘…Ú £Ú ÆÞ ßÑ ÿ¹‰ÕÚ žÛ ÿÞ ¬�‘ãÛ !slabÁÆhttps://crates.io/crates/slabÁì†Ê íÉ ¾Ø �Ê »Ê Registry::reregisterÁ»Æ½à Ëà íÉ ì†Ê �Ê ¾Ø »Ê »�á Æ½à Ëà ì†Ê �Ê ¾Ø íÉ »Ê �á »»ÖÏ eventfdÁstruct.Waker.htmlÁimplementation notes of PollÁ4https://man7.org/linux/man-pages/man2/eventfd.2.htmlÁ»Ê ËÉ »ÖÏ »¸â ûâ Äâ Úâ »Ê ¸â »ËÉ ÖÏ »Äâ ûâ Úâ »Ê ËÉ »*–Ò fmt::FormatterÁñ../struct.Token.htmlÁ›Ø  OS selectorÁ«Ö –7ÀÕ ŠÕ alternateÁ»–Ò §Ô fmt::Formatter::alternateÁ´ä €gñ¾,Ìä ›Ø ëä «Ö –7ÀÕ ŠÕ §Ô »’å ±å –Ò ´ä ñÌä ëä «Ö –7É›Ø ÀÕ ŠÕ §Ô ’å ±å »»›Ø �struct.Events.htmlÁ»Å–Ò ›Ø �ņ»–Ò ‹ç ›Ø ‹ç �Å–Ò ../unix/struct.SourceFd.htmlÁ deregisteredÁÂARegistry::deregisterÁÙ)ì@¾Ø ÕØ �á ../net/struct.TcpStream.htmlÁõç ÂA–è ¬è Ù)ì¾Ø ÕØ åè �á õç –è ÂA¬è Ù)ì¾Ø ÕØ �á åè ¬è ú(ýIoSource::do_ioÁßÑ ì@ÿ¹ÿ9ÅÛ ãÛ ¬è ýú(‰ê ÿ9�ÿ¹ßÑ ìÅÛ ãÛ û‡¬è ýú(‰ê ßÑ ÿ¹‰ìÅÛ –ˆÿ9ãÛ  «F›Ø ÖLµportability guidelinesÁ«Fßë ›Ø «FßÖL›Ø ÖLßë ø>��ø>ø>�$ÿ¹‰™Bˆ ßÑ žÛ ÿ¹�hereÁihttps://github.com/Thomasdezeeuw/heph/blob/0c4f1ab3eaf08bea1d65776528bfd6114c9f8374/src/net/tcp/stream.rsÁwrite interestÁø>ÅÛ ãÛ ™Bˆ Àÿ¹ßÑ �÷ì €í žÛ ø>ÅÛ îí ãÛ û‡™Bˆ ßÑ ÷ì ÅÛ –ˆžÛ �€í ø>îí ãÛ $¼H†HàG¶IßÑ ÿ¹�ÅÛ ø>ÏIðHãÛ ¼H¶IàG†Hÿ¹ßÑ �ÅÛ ø>ÏIðHãÛ û‡¼H†HàG¶IßÑ ÿ¹‰ÅÛ –ˆÏI�ðHø>ãÛ  ÅÛ ãÛ ßÑ ÿ¹ÅÛ ßÑ ãÛ û‡ÿ¹‰ÅÛ –ˆßÑ ãÛ ÿ¹ ÅÛ ãÛ ßÑ ÿ¹ÅÛ ßÑ ãÛ û‡ÿ¹‰ÅÛ –ˆßÑ ãÛ ÿ¹˜  õ˜ ˜ $»ãÎ ../event/struct.Events.htmlÁ../net/struct.TcpListener.htmlÁ registeredÁÅ÷× ›Ø À œ>ÕØ » event sourceÁÌò ìò ãÎ �ó Å÷× ›Ø œ>ÕØ À »Äó Ìò ãÎ ìò �ó Å÷× ›Ø ÕØ À œ>Äó …ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6„$¢#…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6ç� „$¢#¤#¦#…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6¢…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6Ü"é"¢#…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6ç� „$¢#¤#¦#…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6„$¢#¤#¦#…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6„$¢#¤#¦#…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6ç� „$¢#¤#¦#…ù öÌí÷±¯²ŠP³¯ÿ ¦£¬©€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈǵì6SelectoridepWakerfdSourceFdSenderinnerReceiverTokenIterpos SelectorId Øÿ çÿ ðÿ ùÿ …€Ž€�€ª€¶€Å€Ñ€Ü€æ€k©`m›�Yè˜f«à?Õƒä”=P~±áÛGôBˆtf±©rÝ}÷yN)ßùž^ò\r—rtH¤æ.ª¯RL{,1–�bJÓm¢ÐÃõñYûh'M;�ï€u2ßD/×P¸ð‰‹*ºßLƒ±ösv!„¢°üõ/ï?~c³LŠu›¬M Q|¦²èx¡Žë‘ Zɇ¡7Nœ7FžýèóýlQ=ð×¼0™$·ÆzÜ6€SfC^!'—sÄX¿šByýÞJ4 fÅ©ºî,�È`"M2囨5FUø+.¡O«ú•n÷®2ð’Ęq·KÕDl+¦…¤ò-hqïŸlÅ&É—ÙƒˆŒ§M[†JgZ2ÑÆKÌb¢lc^=5ägÿR\›9¯¯Ö*äN™áD羱Œ›‡þ¡lç÷&Ú`T 9o¥eâ¡T½5®rƒÆ©áZÀ�âÝ6T\¾€È«€�áþ5-‰€øEròÓ)Ðϧ{nÒs®,L ÏõÓ¶*ÆßoÛ˜·Ê�LÝ’QÖd®JfÐc|'<¿žvÕzâ¡ÿù˜”Í­JÜ Þz»= �·ó±,Lë^;Q“zð.2šGßò¥åáépCÉ“ !ï!ó(tÔeâ7}˜µ� á©žî™B¢¼oùSpP{h†+�Ø•LÒ0,¸·BÍbxMhìÜGrf´”~ÞLî™ûnk;jø�@ï:° ´‚­ >‡1ym! o©5e¶¼�´Âk–­Œ»}©{7õ‚tTãØUMWQš+sDî;»ÎTŒ…7ÿülxê ƒ«ä½PxÕÅ�‡£jÒõ©tßßv5”å}J’‰þÊàyûëûy燛ÔJ‚l¹“#.F×YŒ}w†#Ò+…<•äÎmŠŸ4ÕRó£J8½ÐSi‹þ9ÊÆ‹`:N�¨êmPCß< «°Fzk�OæQÏ,Ì­{’R!ìIN¤fÿ±Ê˜pé RøöaÕ^°DZälbR:nywëÅ–Èè‚O£ú´ºþ‹³KÔœ ªLµ�”Y®”Ǹ{圉óïße{<—¬èÕ^Ô ˆÀ©©v. ·òK4Òcá[•‡$’ët²áúQüÞÌ.«¿ZóH;ÎP?Š(nÖÙNRÿo@‹·Z?9^˜ªÁ3&´À‚¢lx™½#%(H¾°ò,ÊF<©Äåá ô:‘{ý\¦Ñ¤8|l‘?j’6ò�Ë(—qÇ'F$aLë“ó&ÿÑ껹£h7ååD»~°dʲöÊ[}aàc¢¨K ;ÍÆ¦6ï,šõnWÐà…h�LVx•}}§ KO¤n‰Ý½W1ä[{ᎯÐò¾íûèxšŽúùé-f…T¾ô�W¶�Ü'fí.Ãu c.§Ñ«SK XjØqª`]|™7Šxã[¶%AÒò¾ç€½|N|sŸó»k,‘µP·òÒ^&¤{NÔÙäÖÌ<ºu7eiÑ5½�5!Â9NÌwDødÞà°¹÷Zms)îTïÁŸ'Yjœ”sY¤DrV3qŠØ‹8XNóUQWG ôÚ«764½ô97{VƒtnÞ£)ùgx�}ûʬ�qO/ôlçMç7R9?/'T5°È™\Ÿ?åûe,5÷†B@Ùo!’Ȳ¢kªtù÷=Ï7p€$¤¹œzïC@Q”4H¾3?nsEÊÛó Š›XҔѲÊ�ðHÜ‘°ð ïHhË–üˆQêŠ7DO߃2Ü3Î\Έði:†SŽõû�Õ=ÖXY“F÷n‚ ˪ÓÓà`3ì¼:fäÃâ×÷ÛFv�Å?a�4þ3°e´ÚJõƒ_¼y»ú±m ~§ŽÑ´ò¯Duô6úJ5'DßÝrˆFòX[v¡Ìº»Jè<‘á Ö7jXŸUÔ¥¤äâS¨˜ù𬑇€ú˜ØÃ7�ž€èƒçê :“¼g±�/uMã²Ö’Ù¿y�“³1€ö!_­ÛÛÑ:s¨‘ã¿L]›ú±­ ñIõ+mL¾@ `Û³²œ}ƒj¶¼[l—vÐ3ü,öPkÄêÛþ0ûiy`Õ(!®¸Žx8¯µŸ±1*þc.áPý.¨+ñ˜çøx‰;ă£2=YI †; ó˜ ñÌ›ŽBÀÛsQWŸ^€%5Ìò.*¨´N€–û c`›ÒÍ õ53€þµõ·Ä8Àˆh¦¥+LUPÌ›¶,fÍ[Ö¦¯Íl£Ó¡i çI¼¹Ä Wú‹m‡§9Þ{µ�Ø…¬­Bœ]Òƒü >bvòí¸ï¾?îl±–@„ñd{S·ÑT¾°�O†�2^ÇÄölTM FØiUVè DrŠá·ÀùŠn%1Ëoj7ÏšµÞ %±Tå@V•sy¹æ´Îµ8JöI%ûiïõ¼è‘5S# ¬oî'XèR͹Z@»“Q�ªV}ÊPJB3ìåû�_õ.Ò5ueÛ¹"VÇ0Üé&?ŠZ`§!3; è©þÜ ³d%•µ ÃGÕ%–Sà†Hö®{£<¹†Ú w^Ôø©ÅÜØ”1ª°JLÂp 5ÙŠÝÖdî­!�KŒ‹rÿö¢hœ¢ºÑHnè(0L6¯ÂØ®*8Ým>1=P�mÜ­G=Rj ƒ%vÙ�ÇÑèt•%�Âç™ýý›„×ùÖÓ¾3°L¿’¤uŠéÅ$$ÆøØ(–å~ Á×S&¦Y'`&^é×k7qóWºŠéâPQä?Þ#â¿6èhpL�jæÏ¡¦õŠ�qm'Eþä Ç¨‰M)ôID§tÉá~œä(ìUá²ûhîkñ´]²ûN`U|ý\”ð6] ße_Õ|tsõ;uqзË"ª- Sþ�*ë#½k(BQGëìù‚ÊÅr زoÛÌ8ž{;Âcu•+ëc*NÍíúg*/©€d 5í'R3‚Z‹œOÕL4@GU^WÛ[UÖt¡ ÕM×ÿiÓ‡'WÖh—£gƒL|`>´+…WTF RŸHRºlŸ öb`‚ð9Ù*“Þí%dMX‡Äê‰3*N¡ìn20ž¯JÖ98§üh±‡à%6˜÷¼†ôPæ‘›m»H’îál%)ؘh‰ý¡_uÏÜÏäÛ3i• 3Ž•ËÅ›ì›ÎS]�Jnç¿NÓŸù7ÁF#‰f/Œô=uT…â÷ë¶P*À¤ ¢Ø„áh©ðW§t™JºH6ª�åšgú«o¯B êRIT&©GÓYÓ邎ʶjŠÝ1@³û¿OÚ\?:´0QE'‹/„-Fúô…Ú]tîn°–è`±Eº×f7ˆ›¼m,lš".KhxuM’µÉ fMŠ‚IYm{.´º·–&t48"ºÁ�2ùÔØCOé–GÒ�Eb{RŒ%t¸s{WÆ“0Rµ¯i« Q:Ý’‚¨DÒ¢ÊÐJ­_,„í"¿ÞµÍ`L -?œ‰tË+K²öŽô—tB3—’E�{[»'Ù¡Íb]b0UT~M) CßÉ`ų‚Ô!A)˜�­²ö~~�—®¬= NkqàvœDz*k9M<£òQ2õPM%ka�.,–“èòŸ�“\ Ê&ÐíV°™ ^¤{ô²ŠrœbØMÓSªëÏ6Œ•œ_O$è…L�ëgû7u<¬œæU$—æ‹"kA�IzÝúKU9{dv[]èÆÁ¸Ó©/]ñÝæ¬¤ ø [ (·‚ǽ^¡&�>^·™]—ùF¶Èì ÎhȈ ŠÀúßP?Çdü¢e@7 ÊE‚;8_’!RLHÎX³‹äŽÑ?]I,ºÞýÃÝ^I90‹ºt-çëìÈ–}ê° …¸àæfÂë”CÒ¹"—Vâ*É’5îóÔS3¡z=�Q× ÖI´r9@oƇçB&¾MÅô:€—ÙûS"½âÍÁÛÎ]ÂÊÎÑe`Y_›6ƒÌWnlXs£)à�a(êòc{fÒä͈ƆUúR4 ÎGÀâ«Ñ5G>p¾è��Œcà]›HÔ½ñëHÕïUþ‚ ÂkÌ^ÆÀÑS~Q]VShÊmMª*æ଴¨­)‹M)á8oö>s›`0ˆ™k¦~�‹�gʲ³�·ßâJzËöO¹’Ûõj£xèþúì°i …oò}ÍàdΣ² ø<¿Šø�m›a[‰|ûz•\ï�*Ä”¦Ñ(tý{™ï|,Þ4ùÒ†”À¶© Ã.5hÛ(<Ùoû©ü5ǶU�ºq'ÄHåvÓéB ¶å�DR lžiKw˜oT0—×y‚4—%'’ 8t F4*61¯Üí°\¸»?&Ùò-!Ýxƒõ‘6LE‚@«’E¾8D‹æ³À›`í�^†öÅÐ�ë3¨Ð×C¬Ýц÷øÿ»-ßò‹ckx×SD~¾ÁÄvU KÆ—ÄÍÏ0ÙPˆY¤ïPoDš!g4t/˰þw¶.üàkIQjy0Æ»wml˰½_uç¡”ÕÜ>œG™4þa#«–­�?œgफ़VÜÔDe6E% # +þ+]FX�rH�X<ÞC&ÁøÕrÛƒú;s%ŸQLµ5Òæ&ðpµ@ü¯/º©w‡“¢^æ™-uö>e×q§šÍí} ,/�rÉø}3±Êö¡¬:Qæõ+j·\×{«Ð4UoØ*ܵ©½6×Z¥…æèݱp.«+R�¢“4\F�Jm1eÒ»ýkᢵ‚AáMË’‘tC)·ì8Îó•¯H“ÔÇ @€·S¿›Š F½#üÉ…»r±;qƽ)ãѾp ³ …‹]½â]>ÆfÍY<&�dQOdùRW±…‰ß³àÌ÷è0 5þHÚËùz‹*+²¸º*%¥™–ÃÆî«±¼�óÊ õ¨šÄà îïÇÓŽàX½�çqÿðž ÚVIÁ¢ÊbÐ{¥odA[ÜïyÍ]�ÔÕsñ½]Ì÷Ü%‡B 0(ÿëNø·ôG`pµ#Ý …e„"¢t8Aj]Ì�nT6¥!%Ý–ì £GPìã,³ÑTÖ¯ÉÔÂWW¯~‡ [ˆ6¨['wì;ZÌÜ)RýqsÚ×&o7©ü@¡Ò=H§—¤Æ–K,3šTè#ÓÛsN÷ëõkÔæ÷U„(ŽÎÌWbAk(ü韩Y“�K±÷Çùac™ÒåÐÆÇÈ£˜ë¡€Œr�;×$€nšòÓ„2°_{u¢§U¶~r£ÔsÅ» ›4nH~MÑ�ꟊèY Ÿó¦uÞð±’†zÞVv@ÕÐY¿Î:¥¿6¶±V´ßpO �^xge@íržq�i4,¨ð˜ëYK’�7 ð .µ]ÌFðŸ(K4´@"èÞx †™‘! òo”¼]Ù/2ºÉkø0Âë¦ d '›Â$‚ J»�Ö¡T§JT.7s™6”ñ®—p¼âÌèí >Ž9È5…¢TŸØ@Ië øMû.¯M*É\c“=}Í3?¼GÐþ�½ƒ'Åi ”è\Žüêœ2´KùMã[Iøo= xm#1N°XTÐýH—q´`ó|>`Ý…±¥IF!Ì*¹NMk¾Ý•Þò€Y{$Ò SOa¸ÜÌ•é.+WûV)ØÌ¤í²³0o‰�Øë„@_ã0´Yg\e8lso碉 �ï~Ô)(øÿbòÍšÆDÿª_°ó7» „é™ó&¨R£ÿ­ü¼Ö²ð~¿×Ò 0â Xï�{K´îR"§„§–cDÙù& Ìç%”åúØaDê\0¤‚€ p%¡Ýže·âB‘ÇMd!tŒÎN¦my„åû)ڭᓳ ï9%º*5âIäà|hÊu [Yp=Ùl0½Ùþ£çAðê +ìͬZìùâ Ut‹ºÏ.N[RZOÙTX?DËOÚR%ûÍ×pR9Øçƨ@ ùY ìøòƇôûŽÞoáo»;Ès�WE‰‹ˆe@� Dó7ôYë5Ý� 3«»ï‘¨Ê8ŠêY¾Æ)^öbœ&Ƚ®– *5û4BC=ÿÑF;†µ.ùÙ^Tg;™\ºó¸+²Oò¤¦f,ÚHMDÛQûkBDÑqqœä¥2KèçVèuµ Ò&pä Mæl­>ŸÅEÑ Q–;ë>Y]’¡VsÁ>žÙ\†`-™EŠ^¼²÷Ž7ä‡:Qdþ*òÕ»“c4ø0+B,Ô®·‘ >È\¿O§w÷â¼éfÃ'ÊxN¹§±*Ò[RS5~¾ñ1®a_ªŸ²‰%ëûê*<é˜#G¹'ÅÖŸ_mãÒ.„Ðp©Š{ùÅ5]ljáû8þ™hÐ×ÓCU�…2T:0ùWKýZ÷—ÒR°…d¹”_LZòãU"ÜÁu= „^ôÕ Š=W\WÊ&�·W÷å–lx+Ûì¥ojvÀˆ'ñþ�Ó´5¨³¤{…ådåø›÷ΈðìëãN£’y$ÔY1L_nuÒ%L@¸»6=óÓ(i·×èªá2Þæ4�¼kÔÜäA®zÕc.cOïË2½ÞçjkÍ6Rdݸ¤ÓÀŽüRïªõé²TWƒhç1'óB4t.on2…zþtN;ý–ŸyC ðS–¹±)K¾¢èY<6·Oxbeg4t^@¯ßJ맸ha~’vfõ=£’|ÈdRï<ô®ôX„=›k,&#}ówk¿Fƒ.xëóž°Á{8'¢£×©ýW?fëãûÂõÆ@‚t3O7ÅLë^,«ÐÉ"?yΈ˜Ž!©zëþ±‚Bö¾eðŒ •ùƒ@Ütú?xj5 —ÿ6×ÒŠ¢5A{&á½Æw“†Há·b¢Ö°ò”6¡êF$ÎÈâ"æbúDZàæwÜÀËrü¨.¸ M‹uŒžÙˆvæ8ذR[ ‡+²u5£"‹_îJÙ9Î0ÕzC¹ÀÏl#$µT"&¸äoØH²¼oÞK”¡sS ÙzZ!R>ŸÒ�øRÔˆšBUw… ‚®fÁ‰`p\ùÿ§œ™™D¢ôDÆ4˜´Q,®/ÿHt …ëvóU‹úL+t¢7_˜=„D¨Ø~2 æôí<øþ¦aU(µ>å‹ gpNe4 2U©É¶}c/ùú‚{—GLT{w)UIžC‹îYÜìD­˜Ì–§÷èN*Z‘Ú­D#Ù<˜ˆî=Üô)8ßÌ4€„­ê3#%©_Ú“÷ õ¥H$gÈò™±�¶Šá‰ªOc[? ¶/UÝoârÛD‘�sßCö±t³£ |DΛ¾ï4Ü"ô˜»Ý­…÷g�¥ìJ=tÏuzц˴²$áÙÍ„ˆÍ¡Æq é'Ì©®ëW:b¥I˜‘Py§Nf/p°ÁÞébwuŒè[p;¸ô+PïBUØœq¥óŽÜ3G¡Ž.áÚ† 4@çîpgf.Hc q!M¬–LýÐ.ÃéªCõ—hÃéÛåx ?�¯ù“ òMÍæ¢—É'ù߇™v‹_˜ÎêážnL£�„êÞÿЮ81 š¦Î�¶%Ù…K•;† ÔGáÐHuFx@t«œbN9zaC•&N�E­¿…á7HÔYºî|!Ñn,&„~8ÏÂ'‘ êžÕVHâÅXµשE.õ›Í„ä_LÞ Ì9‚¥îýJ ÁE ¨Ò,Jß8 vç+Áqi4y|nû_Ê;®ˆ„¬9(óef¦£òˆŠ)o½ïú°È J·½¡mC¾p­ˆL”ÿ6 ªòÐM¬ȷ†ÖqàŸÛ€g‹Á~ÒH‚õÍæblo:o›| ÜÝï�ìïáªå4_ênnni pf‘Út’Cå—(;‚a:>i2ƒB ®!ˆÐÛ Xü2pɧ{ûP‘#—29ÄÚF}¶ÚMoþ!î· 5OthÄ$ ’³×«º,5~ÔÔŽ É_mîM )]mX“S®an•ÑÇJQ>ê»2Z˜¹^ÜüG¦·ïmføtF„Sߘ÷ÄHø†6Ÿj‚àGJ‰ÕgÚ•¡pJH$JÖŸ6€—�6’Ä饪g�êB¡Ý^Ù¤˜|¹jÃËAv+Ž.Ò®híDF$<0Bï€P.‰IùS?X¦^ªYãû�ýgZd›=¬œæ‘_Ž6Iâ°]L¿€ ʶºBÿ«t+]ºP¹ŸG �/>­©¦÷!Þóƒ<ÿØ'.�ªJ�‡A ²ÜZ ’Ç$8ó,èÇaÉe-9h[V…óFb §µÓÞS€“ßY�dnX2B‡ðJgX#‚+&ÕXBâ4yŽÑTi—¶éE9æ»2²·%”Ï´ð6Z�]æÐrIü+ ÁŠx¾\O¸{½is\Tö�KƒaÿR#¹ ÒòD�`7jzþÌŠOEPWÙPá€c”å ØTLÍô�A™%@ßþy<öÖÿuçzÌgC²wüÒpqÝÅV+SñË $Õ¬??'¤u'àûu™|/+¸�bŠHómŠÄÐ-qcJ / ylJ=u±×ܹCÞˆbWv:ЫSZ�ÌöÀºèÂ,PÝÃ[òã÷º"\à %«¤¬þ 8_YZ‹^ï­aF"ã|l·ÕËú¾\éùX¡hrm€ïâçL2‚Ì3*Órg’S¸Z€ÑDε0ótQ_Ö4ê¢×××ÁoŸÕˆ«Ä@†8nå¢X×å µoŸÜ^ÉàÚ†¼g.˜¨ºÓ¨neCÅb±VŠ€õQOâ=/äÂËä‘€¡ÖS_�[¼w9ø¾*VrÊ=ÖÐÐVs41ô¬28Eg%ê‰è^¢–ºï`ÙÛÙRñè¤i×Ð]ºó�½ þóN¥€ føCº5«’¦GO%Áµv¼°viÊSsâAup²òÑ:™€V<›Ö@»öºpÐK’B²™míÃôúE÷�U‰{‡%¶à S£ÝióoœvA¸~ýÙ6y²‚‰¬–ØtqìGkØË€^;¢—-NBí¸‡:«ƒ¤�*îÕœ�ó¶S¨'W}â?… éø7æ¦{’z lx�ʉ¨†Ý]©³"¼q1¹XÝÇ­ˆŸ] ÷š8çTnmoYÒìh–ó !ß`�4¨*pˆíˆ…O”xš ö£á­º)JŸ��TT–Øß\G¦{fÉ+³´`½�iE$šYTùFó$3ë5bž<¤æý©{lÜAñòÉv'  ó,vÇæ8 üõMË \L‘ˆqdd÷¡›Â^t¸gó.-e©š<@Åž¾{0�Uù�eÁÿ„ –G k[HuYt‹LxenÏN-Õøy”ƒ´Ðš,_³UÁݪ§‰¥æ¶uKa~þi57ÊV"P–�ѽì5á9Ûœ6¹ì> ‰xku–�Dt ˜]»Úà–å´¿q»sö„Wäý0ŒV¿®ÔQ þ„#~ÕrôÒÊô•ÎëOoð-ÁÎ=;”§éò^{@Hq ïiC8CcV¹�ìBtÖãΜ¬*é�î›Èæð‘¡q`cºØý3ê+*¾*éé%úñi3J&]c<¾‡ H¿lX:z~äZ‘IxFĈó`ѹHÒnÅ„&I«Êšx�@b5‚Cø>` ¿W[Ò]Š>D ,ÂËÚ�M¢Û'Óô,ÎÝG¥Ú„øé ‡¦&tv¼,;A� ԋΗ¨g{�q*%Vçb¯—a>ùf—•–r³ãÈž‰×ï5/UM·{409ä°ýnÌîØìœ(l@âLï¬LâÈEx¨2Ù7[ÿ@Ç#4�½«à<~ïQC‹VÎìzñeG;ö§¸ýžSJdBÒö#7„� .Ž·Jûô�©ƒz|žŸ�°wxb0ªrekÝüÐ`ò.BgðÒÝ%°Z°[ÆmɈ ”T‰ä`A5ÀÙïK­¿k„"Äßs·ÅÒj›}4EäÒríü|˜+^iá˜ÂÝRäužÍlÓØ—ÙP”ÝD,•ÕÈÕù×ÔÐÌì“ìdÕ:õé`<æÑ £â¥ý‘½ÎжçýZd®`ø“JÛÕQ9˜J9ÿ=ì,J4å°3e³@„Ÿ®¯a%î†ß6Ûs õÛJS6ô5¤¶u\®n¸õÀï–¯Å\/Ô|§ ”Cúqµt÷LÍ�5�„×Sb0¢Ìõ‹>Œ{ !ÅñœÔŠX^�ûãÊS3Ž�«s�/H ¹�ÊZžYpA$±ôß‹ƒo5”³aÔrÔ¾¡Ø�ÜÆ%¤~|ŸBç—Wæ»´Ev¨ ÃàÍ`•b'¸le“7�>î håjÇ.FÝXâ�£ëCñ’ß$´oŽôÝP,žMH‚Φ:Ê,{%§Ô¹�$?ËSзˆÏ%#½q΂xËHˆ*Ìÿ¸Í×ó:¦Ÿª7oèg¶øv—|Bp5™ºön16„" °šª>Ƙ66¥”�8'Ü>™4ئû™;Ñ~ú�;ä3CTά��³‹,v8ž^™ O¾~곂]7žÁ;6°6¾åQ—””ipC—/�dÇ’~=s¿Ç@] )Z.Lo`ƒÎi¹œÞÝU{¦p‹gçÌ"\èþ‘pÞð�׌¯åz�6·]<指3EŠŽôJ©>ì@ðçÛ §Â"?Ï¥Ž8òâšm’¹­9P¬e•ô„êÃtþEæV áËÓ*ɦlv4�ã:ÉËkgb_—¹V¸*>Fº´�KîЦ —•Ú¥±ôÜ1Në©xˆq¦a>·ŠZîf"6‘ðQ´ÀÇc®šF‡ø÷“§hƒ�§ü¥ Ü‚A7-/AË„“¿GãA@�ªO|•)¯íàW¢q‡�þž«Wæä��‚i~&–$öøTªM½¾�«}²êtõ$\ ê4ÑDò>ìú±‡#½tÅöÈh{!â‚x¤�³„yìÌÖÍhw§ÙØ3�á¢õÓԵÉ/uã:Û-�œñ[⚺¦{s�tÿ§S3ÕmI ×€î�U�v¶=¼ÆÉÞ äð}ûv뢈I†W¶|Û•üí[ljÇ©¡Å–¼;�uÈþÙA]Kµ^ˆä\…öjpñ±õhÚq;áJ8[+â>MÚ¡žóm¯i×,¿X@RlaÓ¼o(½—nÍòË ^ùâøÂx‹rø'€õËÔ�Ó½C+(«õ}ßÉVv‘QLäe6ƒÿ{7wp³8L"Òò~óø›µÁ::Üœ]œÅ, ”yº³!vìFŒ¯Þ´TÖÕ»åT~}Cêœë Èõ2zh©x/Ë»ê}pùEL_•ü»æ”óIo¹{2 ùŠ]<ùM‹¤™Š`ºbþ¯»²šíÄÜj¡DX}¢e‰.NùVÜðÌ™‘Æa@8u¯ ÖY ö=>ù371]ÁC)² àV±Äycò@ªiL) GNyË  t^µüsU™ �hJÆ?°8n3ûåÏ,Ñû{Ëž\ �Ùx=EÔ¯Ü2š¸J½+ô8ZySµ8 ÷a'b7 èL5qÎ'À¸Æ�ÛXåŽ%Vªp¡÷ͶBYõ ®™[ Û%|Í­åÅgŸŠëÅÜ­PbHCBLÀj¤’Àåâ£Ë2*°«Û±+•¹yK_¯ÿìœKå,Ôrˆ/WlP…Lÿ½Ðv€¾ÔÚZŒ+yhÑÓ û¾XçDÕ�#JZLN™@î%0o9ÀE�ê•w_m{áDØ}t¡éë êg±¥Kqªi.:߬V$ ¸Œ}+½}%LéHwßg‹gHŠq#_Çsáá¹2Þ+‘Å«Œ.é“ò‘ˆ/¶7ð#,Ód†ÐØWõ@@D3�Jìêßÿ4AÀ%wY1‹M]Nx àÃ6x0/î«k>!�§ˆeÏ R÷þݱ Ô5ÿùÑ%†á_/Ζ5µ˜X´òUM±QoãV¹iä݉(^U ·s¡‰hÏÊ”:ïKžÅúÛḴ¬F ö€çq õÅà X¬’ 7bà+¼Ö_ui8ûo€õèuÜÅœòFÛõ;7àÓȆ-H¿”¬¹·ðëÀ1ìݨsQˆàX€ñ1ÐáœPÅBÚ—n3—»0ÁK‡Z÷ó¶ç@ç6AQèmËkœ÷‰FLoý›Õ¸SÙ·áL¶P‡±ÿX�88 IÖ~Ñþ1•«†äؚˆЭzOn-Wv7çŒø·cŸ½ž’smþ¤Ô#cùB?A�ó�™òy|3áän½?±]ö9eò�ÿyw­²äœŒß`ö°!ò2 ™Pë­ûÍÃ�~/ôx£V>í£þHnÐCeŸRŽZ6GR8� yŠ«™þÆG¦ê8W�lùÜ é€9Ö êó‘°"ÅðÈŒOòýX‚QnD“Kf´N<åe¸p~÷°{ ^U�öætœÙk³D®h- Ú[îUÆGÞ�.…eý¼×¸óœô¯½üBwap{ÀÃFvNNPS ·Â^üCÍwrº§î²Pd|UÍ› Ã$›K¾,˜åò¦ýÔÔª—2à§zˆNOñäåÞV)S½iÙF,¥QÆ—á’$8^š|�6EëøŠ×®k›×WþJŒj;-á1NÛ¹]|a1% %™Ö³ö–<[Y»’sãI9|£�|ƒüà-fÀÜ5pÌ$gß·-fêµ:ûª¨=F—, Eæ�OR »*&2'ž΀²ù ZÜÐ`¯UäJ$ÞÈòÁjv’O�U«u¶6wáù7G«.§/«±Ž‡Ÿâÿ»+ÚóÔm›ÙßäÀ9ÏkM-Ì�Î>‰ëÞø¿*5v›™"ÓH\ÂY/$D‘.þ+iS¢5ûÙ箉)Ô4íH;489Öþcw‘‘fV‰3N8!BIÙA ¬ž+°µ›[á£oY¥îÝa)ðþ¦ð®¦÷Å— (�* ·Éü;Š‘ÿ�ÍÆs °Ê᪇òª8YZ›¼ð´2SɘPi)P`\S g…”ƒ5»Â4ÈVµiñ¥F'€ãe­ê¦ ¨ý ó†‹%½¥ñ}‚Â{<7ýÌ‚Mt¨|a•¼Ck Ôä]; À¨zPñÅNälË>ã–\Ñoä�•ƒÐ:2ùÀ²[Ü3F0Î�€W`Y.Ø�hø-ËZ_�…šDÆ3ÍÐŒŽ²�Åf_G™9>åÓ†¿po5™?ói飛gNõT2Õtã/[ È/˜�[‚AŽyДU±/‘™«œ™þüðsÆÀ\@ÉQ ü„È{HW½�m©ý>ÜÄäÓšCoJ´Å0¸+~ZЦ”ߨ¢ùµ^2ë[yÛ © ~ÙÇM&ã0B{YÅ{Š3¸¦‚µùÝ� %]¶«Wšpj‰ ô}Ð EÉÿw¤Ðžš“–Íïé *j{Ái“¨M¿vÆ—#! ëöá¬S“!BíØmØÁgüŽ%÷ûC}¨§L ckWº‰-YþCÞ¬©'�ßùëŽû¡hŒ°¼À)mÆÐ–ÂK¤ú&²·U4½#›�اtÞ�0pŒƒQ˜l0xðšl»0g‡^YóEé­þ¯+žA”›Ð°„²Fʲv¸ð$³õîþšQ‹è+øG:úG¡¬ê�.á^Jå/Lµð›¾3 Ól‡�hÿxèˬƒÅŸòÓ|Î*:|é<“z¸ná…™ïJ?º$ÄÝl+¼›üVô§ƒ2è“qókææˆ¸ivL6™W];J½4%Ý|u´?ÕŸ,/ïƒ}‹`Û]T–¨ã?c¤h.ÀV}]j »¥º‡³Ý?{ÜQ õÅäÅùúâÆj=ðH„(’C¦9Œ»˜èã-N¨dªZwÒü?9YAMÁJÔ;y'¨l ¸Û“|çñ¾muƒ='0²š0€¹`boÏ?üÛ Ñ‚cŸÀôÐbÆæÈãP�5a!Û†ÝW‹×[_´À]Ê1ï>‡IÂËv/ûîÅR¥5ÐX²áÍ!i-ä`#Ò?’~¸º^¯[vt3ë¶’á@Ou[¬Ðu©™9 Ù‹0Ònž±—é}Çó·ð|² ÙõÆCpÅI¦Äàã—ùZp/¬ñ‚X!» &½N›LÔgœ$Úb0¸s†é? Í¨!Cû} ¿”9ù\ùÔè®yø,$cÃLãÉgàDµ$ð*àC7 .ªý Š<‡ *¹ãƨ;z �Шlÿ9ÿ^.½0Ná“oÌ|IºmmWä�ÈóñÒ‡tEIúV¦§Ó‚Ýä{Bƒ÷-U·[ –(QgÞÒ9 *×ÛÕ×…D,ðRÒ>m|½6%˜¹È]õáV…íÄèŸÚLæß ;L†´váß’%¯ŽEŸqÍ�N�3Z¢S`à×kˆÊлµs•3v¨<¦’éó‡zsoÄ‘c=p4œ®É«‘MÑ5ź�¶ÕYSñ“‡ðEÇŠS)ˆ#BH8Qz€Èxé$I»ôLÂkJ,uÜ æcôœ©Ô9Í%Ͳá;®~ W‚[f¢Ó9òIÅê:L¼ÁÇÅç™´o¾býfåÛsÝiP¦¨èj—í.^Zñž¤lþ�¦ŸƒŠ&‹­•zÿ †²Á[Bdžþ›–ªzä5ƒZÁ�¤âq 8á>GGòóÔ{¿Ç©e&ïÌ$°‡Ã[Û¯õ@Ñúy¥²€¼Tº—%TF‘¢€Vc¶®žD@•¥¤Gͽª9Ƚ¸>Š.r(5ßã/5G§zB_Ë€æef@'†6æÃ¥ýÞo'΃ô> ˆ ÓZˆínùÜ$ƹSìŸ*€ -ßJ£"ê]ЦåõÈy)~Ï Ý·é<©CÆ¥Àà«›àY¦¦:/á  é[ÕßNU†â?ÛZ´ np“:$¯·$£ó�¢~�±¸»ýªÀa*DŸ[úJ*}TB(wê/msÄfŒá•ÏmÙØúvv³å¬Uì/mÜKÃÚtc�L€@ %`»m¼¦i«ÑÁ'#Š?ÌùÌ–àý>¬ìÆÜÒ»l3Õ„Ž öêj»T�ñù²íÎ�^düÌÄÓØ\þp9窕æ�ßáåÜ¢/kŠU6°Ã0Üô@¯àvHŽ.ÙBÌ�¼àzN ­Ø) -€¾Lò#z<òÝÅ’ª°ë9·E=†2Öˤ·JÀpØT,¨O´u5÷õ�v_vd³`}+u· 2 ' $ºJ%óÓa™7yÇÏv…&°ê)”Ä‹w‘Ã:þ!‚eǨv: ¸ò Ý dd}kU´�‚S·Ú°w¡ÇóócfPU(äòÉ݈£šžŽL¤Œ þmµR‡Ì•pĺKä à†Š=Àì¦S+1\Ëi0u"Ø©­j¬`’lÛ,2[Ç{IÅAµ¼´õDj&nO‡‰8•^î�ÑÆ: ÞÍô±¤œXH|5•så °š§`Q;©šõ½êH;4¯ÅŽ#mfm㓲éé†ûÜ32‘?ä›3¹ÇR&0Ë`°€{–ÈöV•%4×—Ó„šDZ/ÊÙ]…æÅΫo3½º¥Žã´§ýefŸc c±cžc¡c¥c§c©c«c­c¯c°c³cµc·c¹c»c½c¿cÁcï�"­þ¹_ *2,ñ.E/ÃHÞYÏnjoã �“¡š©) ®g³¸uÀ[Ñb ×ܛރ߭ áÛäùTÂgSh‚h„ƒºË   H*þ7H™„žˆž”ž ¡“¢ ¤S¦G¨©ë©½ª­e­j­l­p­v­Š­ž­²­Æ­Ú­ÿ­]®»®Q ¯¥±—µ¶§¶+·¯·7¸Y¸q¸¶¸Ò¸*¹E¹ô¹X»Y¼ø¼¨½X¾ ¿J¿|¿¯¿ô¿û¿þ¿À ÀÀÀÀ À&À-òÀ,ñDñ”ñ¬ñ}ò–òOdóǺ )Ýýc®8ç3¨#&%†% &±&Í&�'u()*U*“+£+½+ú+›,�,¡,¥,ª,°,Æ,•-ñ-´.</˜/š/ž/£/©/Î/E 0ÿ2‘3U7»;?×@CYD¾DSFGÀGØGH¸HI II$I’MìM NqOf PmQ}SíULV‰V©VÃVW]WxWXÁXY$YÕYVZXZ\Z`ZeZkFZ+f*h<jlqlõlxmæmímðmömýmn+n2n5n;nBnIn~no¤o¦oªo®o´oºo�s‡ ‹.ŽHŽZŽlŽŠŽñŽ�{�ª�Ç��5�ž�»�&&‘…–æ–´�žžN¡e¡¢£¨£«£±£·£½£ãɣϣà£ò£¤ ¤¤¤¤!¤'¤.¤1¤7¤>¤†¤ª¤4¥‡¥í¥f¦ɦ2§¤§þ§¨®¨ʨ©Z©m©€©ªªªªdª²ª«N«œ«ê«6¬ƒ¬Ь­í­ô­ ®+¯0¯2¯7¯;¯@¯X¯n¯„¯œ¯¢¯¤¯¨¯®¯Õ¯‡°À°$±x±²d²Ȳä²6³ ´´+´-´1´5´9´@´‡´µšµ ¶8¶ø¹þ¹º¸ºþº*»U»o»Œ»=¼ݼ8½µ½¾b¾þ5¿O¿m¿#ÀÁ ÁÁÁÁÁÁxÁšÁÓÁâÃ.Ä¥ÄÝÄ Å$ÅBÅòTÅ1ÐHÐwÐ/ÑÒÒ#Ò%Ò)Ò-Ò1Ò5Ò;Ò/Ó}ÓâÓmÔÕ-ÕÍÕ8Ö<×AØFØHØLØQØSØXØ]Øu؋أإةحشØòØTÙ²ÙÚwÚÛ€ÛçۭܷܹܾܲÜÃÜÛÜñÜ Ý ÝÝݧÝIÞ;ßSßYß_ßeßgßkßoßußààà à%à'à,à2à9à@àäàá¡áÏâÕâØâÝâãâèâêâïâõâûâýâãããããã!ãÅãmäÏäYå^åcåeåjåpåwå~å"æ¬æÆæeç»çŸèÀèÕèíèéé6éKécé{é“é«éÅéàé÷éê+êFêaêxê’ê¬êÆêâˆêY…#=½   S Ö X Ä  y á ”+~â5©½tÑ_¤ÕE—Ç7}®Aq±Ý}=£ò:½?«çU¶bô< ° !À!"y"Á" #i#š#Ü# $c$•$Ù$ %N%€%&I&�&3'ì'(%(Ö(_)z)˜)H„*L>e>x>¨>Æ>?5?å?ø?@@�@ A*A”A²AB:BçHBØMñMNÀ N.PHPfP¸PSS8SgSTOT¨TPVSVYV_V…V˜VªV½VÀVÆVÍVÔVÖVÚVÞVâVèV=WYWtWŸWÞW$XY[Y¢Y¼Y%ZfZÈZy[ý[€\ð\@]õ]%^@^{^è^U_Á_í_?`}`˜`¶`gaFhxhzj}jƒj‰j«jËjëj k+kKkkkŒk�k•kœk£kªkúk+lRlyl¡l¤lªl°l¶l¼lÃlhoÉoð o‚r6t{vçvLwàwytzm|¡|$}¦}~0~â~.m¹ €X€[�¨�ô�A‚Õ‚!ƒ°ƒ̓ „„,†2†5†;†A†G†M†S†V†\†b†i†Œ†¬†Ì†ì† ‡,‡L‡m‡t‡¥‡Ì‡ô‡÷‡ý‡ˆ ˆ ˆT‹p‹¦"‹µ “õ•œ–B— ™, œç � Ÿ# º ž¢3£ç¨5©]©Ë©'ªÓª.«c«Ø«6¬é¬F­y­ç­C®ó®O¯¢¯°F°»°±б.²ˆ²å²³œ³´Š´§´Yµ¥µäµ0¶‚¶Ï¶‚·Ï·¸f¸ú¸F¹Õ¹ó¹3º:º=ºCºJº?¼B¼H¼N¼U¼{¼›¼»¼Û¼û¼½;½\½_½e½k½r½y½|½‚½ˆ½޽”½›E½fÈ‚ÈéÈœÌñÍÑÏßÑfÕÔÕÁÚ' Û\Þ¸Þºß à»á âãÛã1åRè§êùë$íãî ðhñŸò›ôBöçø^ú¹ûý§ýH3þd´êuÿq�H›Þ1ˆÜ™ì: Ž ' z  2 w ¬  ¼  Å Ë Ñ × Ý ã é ï ò ø ÿ  "&*.4…¡áÙ€àózC¨. {áxÔVÉ%³=>î#=$r$ö$y%ç%&¹&Ö&'3'‡'¥'\(z(½(Ú(()F)Û)ø)8*>*þ+,, ,,,,%,+,.,4,;,B,E,K,R,Y,`,b,f,j,n,r,x,Ü,>-c-&.Í.,0-1�1ó1(2¬2/3�3»3o4Œ4Ì4é4=5[5606s6�6Þ6ü6‘7®7î7ô7: :::: :&:,:2:5:;:A:G:M:S:Y:`:c:j:q:x::‚:‡:‹:�:“:™:ö:;@;V< =¬>Ì?1@Ô@xAÛA€>BñG?HhH×H=IêIEJzJïJMKL]L‘LM\M NiN½N!OaOÖO4PëPIQ£QR5R¹R<S©SÇSzT—T×TôTGUeUV8V{V˜VäVW—W´WôWûWX X2XÞ ��ž­ü¹]*›+0,ì.C/¿HÜY fÍnjos„‹Ó�…¡† ©'®c³û·qÀQÑV×Ü�Þ}ß©á×äõT¼gOh€h„�ºÅ   F*ü7æ ­C¸Â¸6¹'ñŽñ‰ò«é½&e(ô)¯+¼,µ /DFfGðGŒMøMeV*WYf:læ�VŽhŽzŽÿަ�¸�%�¬�’¤ ¨º¨º¯Ô²Y´"»}»Z¾í¾[¿IÁ…ÁÅ3Å×ÏdÐÚÓ$Õy+ ä NÄ5·&�aÑË  h"#‰#ü#ƒ$ù$n%8&æ'(Y)‰)>t>¤>·>&?ô?@Ž@A£A+BÒMN(PWPõRTS:T&WÂW~YHZD["]^Ý_w`§`aoÕoy|~©G€—�0‚ƒ¼ƒM‹| ‹A©G«R­°ñ²–´•µ ¶¾¶¾·U¸6¹â¹_È�ÈÁ~Š ÊÚ| i   ~®J$ô%Æ&#'”'i(É(5)è)Õ,K-2ª3|4Ù4J566ë6ž7ï: ;LH^JjL:O R¶S‡TäTTU'V‡VñV¤W++++++++++    '   '++    '( '             '                 Ý�Žž˜ž ¡—¢¤W¦K¨©ï©Áª­z­Ž­¢­¶­Ê­J®¨®=¯w±#µúµ‚¶·Š·¸]¸‰¸ê¸]¹ú¹ñ0ñoñ˜ñîñ óÔÓBK#™$ä%l&æ&Ž(*[*™+Õ+.,-|.ë.A/ 0È2[37„;å>¡@ÜB"DqDkFG‘GÂGH½HmM–MHO,P4QS²UV�V­VÛVaW�W7XÙX»Y»£»ƒ¼p½оɾ¿7¿†¿nÀ%ÁaÁ²ÁëÁ-úÃFÄãÄ ÅYŦÏÐ3ÐŽÐNÑRÒGÓƒÓæÓqÔEÕåÕPÖT×ÌØ ÙlÙÊÙ,Ú�ÚÿÛ.ݿ݋Þ{ßXàüà/á§á9ãÝãÕä–å:æ°æÞæ}çÓçêÿÞê k î p # ù CM3wí]ßOƉ8üRÕWÿÎT &!‘"9#³#&$®$$%™%b&'Ç'ð'<(:)c)¯)å=*>N>Ý>L?.@Ñ@AAÉAQB³MÜM&N P2P}PÇRS"S~SfTóTîVAW]WˆWöWD´{ZÌñÏÍ!vrvôF#Š$%‘%&î&K'2(’(ò(^)*C*µ,à,Ë-‘.0ð0S1¶1@2Ä2G3Ó3¤45è5H6¨67Æ7ù7Ï:ú:û;Î<�>U?—@;AžA7BIG€HUI’JeK©LtM�NyOLPaQMRÑRTSßS¯T UðUPV°VWÌWC™{ž�ž„ž�ž  ¡�¢¤O¦C¨©ç©¹ª ­b­g­j­n­r­†­š­®­Â­Ö­û­Y®·®L¯ ±’µ¶¢¶&·ª·3¸U¸l¸±¸Í¸&¹@¹ð¹T»V¼õ¼¥½U¾¿G¿y¿«¿ð¿÷¿û¿ÀÀ ÀÀÀÀ#À)À(ñ@ñ�ñ¨ñyò‘òIóµ#Øö—§Ñá’#¢#!%€%&¬&Ç&|'o( )þ)Q*�+Ÿ+¹+ö+˜,›,Ÿ,£,§,¬,Á,‘-ì-°.9/•/˜/œ/ /¥/Ê/@0ú2�3P7¶;?Ó@CTDºDNFþFxG¶G¼GÓGüGµHII IIŽMèM NlObPiQySèUGVV…V¥V¾V WSWYWsWX½XYYÒYSZVZZZ^ZbZgZ%f$h7jûk\lklïlsmãmémímómùmn'n.n2n8n>nEnzno o¤o¨o¬o°o¶os„‹ñ�*ŽCŽWŽiއŽîŽ �x�§�Ä��2�›�¸�!‘�–â–°�šžJ¡a¡Ÿ£¥£¨£®£´£º£À£Æ£Ì£Ý£ï£¤¤ ¤¤¤¤$¤*¤.¤4¤:¤‚¤¥¤/¥ƒ¥è¥b¦Ŧ-§ §ú§¨ª¨ƨ©V©i©|©þ©ª ªª_ª­ªûªI«—«å«1¬~¬ˬz­é­ð­®(¯-¯0¯5¯9¯=¯V¯l¯‚¯˜¯ž¯¢¯¦¯ª¯Я‚°»°±±s± ²_²µ²IJà²2³´ ´'´+´/´3´7´;´{´�´ µ•µ ¶4¶õ¹û¹º–º¥º´ºúº&»Q»l»‰»8¼Ù¼3½±½ ¾^¾À¾÷¾0¿J¿g¿ÀÁÁ ÁÁÁÁÁIÁtÁ•ÁÎÁèÂõÂÃÜÃ)Ä ÄÙÄÅ!Å?ÅïÅèÏ'Ð-ÐEÐpÐtÐ+ÑÒÒ Ò#Ò'Ò+Ò/Ò3Ò7Ò*ÓxÓÞÓiÔÕ(ÕÈÕÖ3Ö8×>ØCØFØJØNØQØVØZØs؉؟أاثدØíØOÙ­ÙÚrÚÛ|Ûã۪ܯܴܷܼÜÀÜÙÜïÜÝ Ý ÝÝ¢ÝEÞ7ßOßUß[ßaßeßißmßqßàààà"à%à*à.à4à;àßàá�áÌâÒâÕâÛâàâåâèâíâñâ÷âûâÿâã ãããããÀãiäËäVå[å`åcåhålåråy忍æÁæ`ç¶çyè†è›è¼èÒèêèéé2éHé`éxé�é¨éÂéÜéôéê(êBê]êuê�ê©êÃêÝêU€Ÿ ¬ ¹  M Ð S À  u Ü �&zÞ0¥¹pÌZ ÐA“Ã2y©=m­Øx…’Ÿí4·:§âQ±^ð7 ¬  !¼!"t"»"#d#•#×#$^$�$Ó$%I%z%&D&‡&/'è'("(Ò([)w)•)E*>H>_>u>¥>Ã>?2?â?õ?@|@š@A'A‘A¯AB7BÔBãBÔMîM N¼N*PEPcP´PùRÿRS5S`SdSTFTLT¤TMVPVVV\V�V•V§V¹V½VÃVÉVÐVÔVØVÜVàVäV,W9WUWpW›WÌWÙWXúXYYWY‘YžY·Y ZTZaZÃZf[s[÷[{\ë\.];]ñ]!^<^v^ã^P_½_é_;`y`•`³`caBhuhwjzj€j†j¨jÈjèjk(kHkhkˆkŒk’k˜kŸk¦kök(lOlvl�l¡l§l­l³l¹l¿lcoÅoëo}r1twvãvGwÛwýxozh|›|}¡}~+~Þ~*iµ€S€V�£�ð�<‚Ђƒ«ƒȃ „„)†/†2†8†>†D†J†P†S†Y†_†e†‰†©†Ɇé† ‡)‡I‡i‡p‡¢‡ɇð‡ô‡ú‡ˆˆ ˆO‹l‹¡‹°“ð•—–=— ™'œâ�ÿž µ š¢ÿ¢ɨÖ¨ã¨1©X©Ç©"ªϪ*«^«Ô«1¬å¬B­t­ã­>®ï®J¯ž¯°A°·°±̱)²„²à²³–³´†´¢´Uµ¡µàµ,¶~¶ʶ}·Ê·¸a¸õ¸B¹йî¹0º6º:º@ºFº;¼?¼E¼K¼Q¼x¼˜¼¸¼ؼø¼½8½X½\½b½h½n½u½y½½…½‹½‘½—½aÈ~ÈäÈ—ÌìÍÌÏÚÑbÕÏÕ½Ú"ÛXÞ³Þ¶ßà·áâ{ãÖã,åMè¢êôëíÞîðbñ™ò•ô<öáøXú³ûý¡ýBþER_®ãnùlŠC–Ù,ƒÖ“æ5 ˆ ! u  , s ¨ ÿ ¹ ¿  È Î Ô Ú à æ ì ï õ û   $(,0€�ÜÇÔ{Ûáîu?£)wÜtÏöQÅ ®8Ð#Ý#ê#8$l$ð$t%â%&´&Ò&'/'‚' 'W(u(¸(Õ($)A)Ö)ô)5*;*û+þ+, ,,,,",(,+,1,7,>,B,H,N,U,\,`,d,h,l,p,t,×,:-^-.!.È.'0(1‹1î1"2¦2*3˜3¶3j4ˆ4È4å485V5 6+6n6‹6Ú6÷6Œ7ª7ë7ñ7:: ::::#:):/:2:8:>:D:J:P:V:\:`:g:m:t:{::…:‰:�:‘:•:ñ:;;;D<Q<=§>È?,@Ï@sAÖA{BÓGàGíG;HcHÓH8IæIAJuJëJHKüKYLŒLüLWM NdN¹NO\OÒO/PçPDQŸQûQ/R³R7S¥SÂSvT“TÓTðTCU`UV3VvV“VàVýV’W°WñW÷W XX/XAXHXOXVX]XdXkXrXyXX…XŒX“X™X X¨X¯X¶X¾XÆXÍXÕXÜXäXëXóXúXYYYYY&Y-Y4Y;YAYHYOYVY]YdYkYrYyY€Y‡YŽY•YœY£YªY±Y¸Y¿YÆYÍYÔYÛYâYéYñYùYZZZZZ#Z*Z1Z8Z?ZFZLZSZZZaZhZoZvZ}Z„Z‹Z‘Z˜ZŸZ¦Z­Z´Z»ZÂZÉZÐZ×ZÞZåZìZóZúZ[[[[[$[+[1[8[?[F[M[T[[[b[i[p[w[~[…[Œ[“[š[¡[¨[¯[¶[½[Ä[Ë[Ò[Ù[à[æ[í[ô[û[\ \\\\%\,\3\:\A\H\O\V\]\d\k\r\y\€\‡\Ž\”\›\¢\©\°\·\¾\Å\Ì\Ó\Ú\á\ç\î\õ\ü\] ]]]]&]-]4];]B]I]P]W]^]e]l]s]z]�]‡]Ž]•]œ]£]ª]±]¸]¿]Æ]Í]Ô]Û]â]é]ð]÷]þ]^ ^^^!^(^/^6^=^D^K^R^Y^`^g^n^u^|^ƒ^‰^�^•^›^¢^¨^¯^µ^¼^Â^È^Î^Ô^Ú^à^æ^í^ó^ú^__ ___!_'_-_3_9_?_E_K_Q_W_]_d_j_p_w_}_„_‹_’_˜_Ÿ_¥_¬_³_¹_À_Æ_Í_Ô_Ú_á_ç_î_ô_û_`````"`(`/`5`<`C`I`O`U`[`a`h`n`u`{`‚`ˆ`�`•`œ`¢`©`¯`µ`»`Á`Ç`Í`Ó`Ù`ß`å`ë`ñ`ù`aaaaa%a+a3a9a?aEaKaSaYaaagaoaua}a…a‹a‘a—a�a£a©a¯a¶a¼aÃaÉaÐaÖaÝaãaéaïaõaüab bbbb#b*b0b6b/š/ž/£/õ/°2C37l;Í>‰@ÄB DYDSFG{GºGÀGHºHI IIiM’M0OPQëRšUíUƒV‰V©VÃVWW]WxWXÁX$Y×YXZ\Z`ZeZ¼e¡g´i�k`lqlõlxmæmðmömým$n+n5n;nBnwnÈneo¦oªo®o´oþr‹À�ô�.ŽŠŽ+�Ç�5�»�þ•ý–Í�žž~¡¢£«£±£·£½£ãÉ£ì£þ£¤¤¤¤!¤'¤1¤7¤N¤ª¤4¥í¥2§¨ʨ©Z©m©‚©ªªªªdª²ª«N«œ«ê«6¬ƒ¬Ь­í­ ®+¯2¯7¯;¯j¯€¯–¯œ¯¤¯¨¯Õ¯‡°À°$±x±²d²ä²\³ ´%´-´1´5´9´´‡´µšµ1¶ö·ø¹þ¹º÷º»:»U»Œ»k¼X½r¾žú¾5¿m¿jÀÁ ÁÁÁÁ!ÁKÁšÁÓÁêÂ÷ÂÃâÃ.ÄÖÄßÄ ÅBÅ¢ÏëÏ+Ð1ÐrÐwÐJÑÒÒ%Ò)Ò-Ò1Ò5Ò;Ò/ÓÓâÓmÔ-ÕÍÕ8ÖQ×AØHØLØSØX؇Ø�إةحشØòØTÙ²ÙÚwÚüۭܹܾܲÜíÜÝ ÝÝݧ݈ÞMßSßYß_ßgßkßoßwßàà à'à,à2à9à@àäàá£áÏâØâÝâãâêâïâõâýâããããã!ãÅãÑäYå^åeåjåpåwå~å"æ¬æÆæeç»ç{è¹èçèÿèé/é]éué�é¥é¿éÙé ê%ê?êZêŒê¦êÀêÚêÒÿÆÒ ¡ ® S Ö X  á +5_ÕEÇ7®q 䇔:½?ç¶< !y" #š# $•$ %€%I&ê&Ã'ì'%(6)_)˜)á=>L>Æ>5?@º@*A²A:B×B¯MØMNP.PfPÃRýRSSbSgSITOTïTSVYV~V¤V¶VÀVÆVÍVÖVÚVÞVâVêV.W=WYW„WÎWÞW$XüX YY“Y¢Y¼YVZfZh[y[ý[€\0]@]%^@^{^è^U_í_R`}`¶`·gHhzh}jƒjÅjåjk%kEkek…k�k•kœk£kókLlslšl¤lªl°l¶l¼l>ohoìqõsÑuŒw¤xÎy�{¡|$}¦}0~.¹�¨�A‚oƒ̓ „„,†5†;†A†G†M†V†\†b†¦†Ɔ憇&‡F‡f‡m‡Ƈí‡÷‡ý‡ˆ ˆ*‹T‹“³•H–î–f˜Ï›“�¦žÏŸf 0¢(¨˨ب]©'ªc«6¬y­C®O¯F°±.²³œ³´§´¥µ0¶A·Ï·f¸”¹ó¹3º=ºCºzºB¼H¼N¼•¼µ¼Õ¼õ¼½5½U½_½e½k½r½|½‚½ˆ½޽”½;ÈfÈÌ­Í|ÏŠÑìÔûÙíÝKßLáãÐäôçRê›ëÏì„î¶ïñFò7ôéõø®ù(û…üNýïýœGTêuÿ�›1TìŽ Î 2 ¥ ¾  ¼ Å Ë Ñ × Ý ã é ò ø ÿ  "&*.Z…&É,œcãB´Ù·µ ^øZ^Ü.#Ò#ß#r$ö$y%&Ö&3'(z(Ú(F)ø)8*@*,, ,,,,%,.,4,;,E,K,R,Y,b,f,j,n,r,±,Ü,³-.y.é/Ø0;1ž1(2¬2/3»3Œ4é4Ð506�6ü6®7î7ö7:::: :&:,:5:;:A:G:M:S:Y:c:j:q:x:‚:‡:‹:�:“:Ë:ö:ã;F<¶<i>=?@#A†AB1GÕGâGhH=IzJMK‘L\MiNaO4PIQ5R¹RXEXLXSXZXaXhXoXvX|X‚X‰X�X–X�X¥X¬X³X»XÃXÊXÒXÙXáXèXðX÷XþXY YYY#Y*Y1Y8Y>YEYLYSYZYaYhYoYvY}Y„Y‹Y’Y™Y Y§Y®YµY¼YÃYÊYÑYØYßYæYîYöYýYZ ZZZ Z'Z.Z5Z\E\L\S\Z\a\h\o\v\}\„\‹\‘\˜\Ÿ\¦\­\´\»\Â\É\Ð\×\Þ\ä\ë\ò\ù\]]]]]#]*]1]8]?]F]M]T][]b]i]p]w]~]„]‹]’]™] ]§]®]µ]¼]Ã]Ê]Ñ]Ø]ß]æ]í]ô]û]^ ^^^^%^,^3^:^A^H^O^V^]^d^k^r^y^€^†^Œ^’^˜^Ÿ^¥^¬^²^¹^¿^Å^Ë^Ñ^×^Ý^ã^ê^ð^÷^ý^_ ____$_*_0_6_<_B_H_N_T_Z_a_g_m_t_z_�_ˆ_�_•_œ_¢_©_°_¶_½_Ã_Ê_Ñ_×_Þ_ä_ë_ñ_ø_ÿ_` ````%`,`2`9`@`F`L`R`X`^`e`k`r`x``…`Œ`’`™`Ÿ`¦`¬`²`¸`¾`Ä`Ê`Ð`Ö`Ü`â`è`î`ö`þ`a aaa"a(a0a6aX>p> >³>?"?Ë?ð?@e@Š@ø@AzAŸAB'BšBàBºMçMüM¥NP=PSP¤PÜRS.SPSþS6TŽTW6WMWiW”W¶WÖW X†XYYCYrY›Y°Y ZÞžÞœßüß�áýáaãÁãå4è‘êÛëíÅîõïGñ‡òzô*ö«ø2ú�ûÚü�ý0þO\¦¼@ËQy(…ÇqÅ€Ö w  d ú  _ e•©bÑkȵëk5…ö]½ZºÂI« ��#Ú#ç#0$E$Æ$J%É%ï%›&Á&''q'�'E(d(¦(Å()0)Å)ã)#*¼,ì,F-ï-.¸.01z1Ý1û1|233¥3Q4w4·4Ô4'5E5û56\6{6»6æ6{7™7Ù7Ö:;;<N<õ<•>¾?@¾@bAÅAaB“GÝGêG3HGH¹HIÌI,JYJÌJ1KÝKBLeLâLBMïMON¨NÿN5O³OPÈP-Q‰QåQR‰R SŒS±S]T‚TÂTßT2UOUV"VdVƒVÃVìV�WŸWßW|­�­¤­¸­Ì­Ü­K®©®>¯‚±sµ¶Š¶·’·¸9¸^¸”¸¸¸¹,¹Í¹ ñ2ñpñšñðñò.óŒ¡ë²ß0ž{ØK#™#%:%ý%�&³&V'[(î(ê)4*¥+Þ+²,m-©-•.«/%0ß2r357›;ü>¸@óB9D•D:FÛF GžGÄGÚGŠHnM™MîMQODPKQ[SÊU)VNVŽV®VíVWbWöW™XãX Y¬YÁeégüiÑklbl¸l$y$·$ï$-%d%ò%.&k&'È'ó' (¬(;)f))*æ=3>O>j>š>­>õ>?¼?ê?ý?V@„@é@AkA™AóA!B|BÚB´MÞMöM–N P4PMP•PÉR S%S=SïS#TTðV0WDW`W‹W¡WÐWX[XþX Y:Y]Y•Y§YÿY'ZXZ¢Z[j[À[D\Ã\ò\2]É]^,^a^¿^,_™_Ó_`Y`„`�`=aCoooËoartYv�vûv½w×xQzJ|o|ç|j}è}~¸~OŸé=€;���É�&‚²‚ƒ�ƒ²ƒîƒ/‹[‹r‹”“Õ•y–—☜Ä�Ùž — s¢²¢^¨ͨÚ¨û¨7© ©ß©¨ªçª0«¨«ì«¹¬ý¬H­¼­û­È®¯€¯¶¯°‹°ϰ ±ä±a²œ²ç²_³â³`´Œ´/µ‹µƵ¶`¶´¶b·´·ð·K¸׸,¹µ¹×¹º@ÈmÈ„È{ÌÐͮϼÑ3ÕzÕ–ÚÕÚ1ÞpÞ�ßÎß�áÏáTã“ãå'è„êÎëí¸îèï9ñyòlôö�ø$úûÌü�ý"þÔIVx¶2½Cs¾c¿wÐ q  ^ ñ  V _Œ£JË^¿™åb,W éP�MŒ¦úžÝ�e#Ô#á#$?$¹$=%¼%é%Ž&»&ø&'d'‰'<(^(�(¿(ü(*)¸)Ý)*¶,ã,@-×-.«. 0 1m1Ð1õ1o2ó2r3Ÿ3D4q4®4Î45?5ò56S6u6²6à6n7“7Ð7Ð:ý:;<H<è<Œ>µ?à?±@UA¸ATBhG×GäGHAH¬HëH¿IþIGJ¿JKÐKL_LÕLMâM!N›NÑN#O¦OêO»PÿP|Q·QR|RSS«SPT|T¹TÙT%UIUúUV[V}VºVæVtW™WÖW„­˜­¬­À­Ô­ä­W®µ®J¯�±µ¶˜¶· ·)¸A¸j¸ ¸À¸¹4¹Ý¹ñ>ñxñ¦ñüñ‡ò>ó�©üÃçq«{#%g%& &»&g'c(ÿ(ò)E*­+ê+º,}-Ö-¥.³/50ï2‚3E7«; ?È@CID¥DBFëFG¬GÐGîGœHvM§MöM_OVP]QmSÜU;VcVœV¼VûV(WpWX«XñXY¾Yûgjãk8lÊlNmÍmÍ�%Ž@ŽTŽfŽxŽÜŽýŽm�¤�¶� �#�‰�ª�‘|–Ì–q¤�¤*¥w¥Î¥E¦­¦§{§ë§¨ž¨¸¨ ©H©f©y©Rª ªîª<«Š«Ø«&¬r¬¿¬e­Í­¸¯m°¶°±±g±²S²©²Á²Ò²&³W´à´jµïµ‘º¢º±º »O»j»{»&¼´¼$½�½ü½X¾´¾Ô¾+¿H¿Y¿ À/ÁqÁ‚ÁÉÁÏÂqÃþÆÄíÄÅ1ÅÝŽÏÐBÐbÐÑ Ó\Ó�Ó÷Ó‚Ô!Õ¼ÕÖ0Ö$×àØ3Ù–ÙòÙSÚ ÛeÛÇÛ”Ý7ÞÒà á˜á³ã\ä´äæ£æ»æRç©çdè˜èPw „  ) « . ¬ â ` À xÛnÅ ‹ðŸ_»LŽÂ3‡µö$f›1_ Ïdjê’“É<œI© ’ ÷ ¢!"f"¨" #P#‡#Ê#ú#Q$�$Å$÷$;%l%&6&y&'Ð'((À(C)t)‡)3*î=C>]>r>¢>µ> ?$?Ð?ò?@j@Œ@ý@AA¡AB)B¾B¼MìMþMªNPBPUP©PÞRS3SRST8T“TWRWnW™WÀWXÜXHY|YµYZFZ´ZB[Ò[V\Õ\ ]Û]^:^q^Ñ^>_«_Û_/`a`’`¥`QaKo}oÓoor$tkvÂv.wÏwéxcz\|w|ù||}ú}~Ê~]§ûE€I�•�×�.‚Ä‚ƒžƒºƒüƒ7‹i‹z‹¢“ã•‹–1—ô˜œÖ�ëž © …¢å¢®¨.©?©²©ªºª«D«º«¬ˬ0­P­έ.®Ú®:¯’¯é¯°�°±²±²s²ϲï²q³ô³r´”´Aµ“µÔµ¶r¶¼¶p·¼·þ·S¸é¸4¹ùß¹#ºHÈ{ȌȉÌÞÍÀÏÎÑEÕ­Õ¨ÚÛCÞ£Þ¡ßà¢áâfãÆãå9è–êàëíÊîúïLñŒòô/ö°ø7ú’ûßü”ý5þ)«¾EÐV{-‡ÌvÇ…Ø y  f ÿ  d gš«·pÍÊp:ŠûbÂ_¿×N°¢#µ#5$G$Ë$O%Î%ñ% &Ã&' 'v'‘'J(f(«(Ç( )2)Ê)å)(*¾,ñ,H-.½.011â1ý1�23„3§3V4y4¼4Ö4,5G566a6}6À6è6€7›7Þ7Ø: ;;4<ú<š>Ã?@Ã@gAÊAfB¸G8HIH¾HIÑI1J[JÑJ6KâKGLgLçLGMôMTN­NO7O¸OPÍP2QŽQêQ RŽRS‘S³SbT„TÇTáT7UQUV$ViV…VÈVîV†W¡WäWx±$µûµƒ¶·‹·¸Š¸ë¸^¹ ñpñ óÕÔCL #š$æ%n&ç&�(*Ö+-}.0É2\37…;æ>¢@ÝB#DsDlF G“GHnMIO-P5QS³UVÜV‘W8XÚX=YºgÍi¦kŠlm‘mÅ� Ž¢ŽC�ß�M�Ó�–äM¥¦K§4¨ã¨8©.ª}ª˪«g«µ«¬O¬œ¬é¬š­ï¯¡°Ú°>±’±+²²ý² ´*µ³µ"º»¤»„¼q½‹¾̾¿‡¿'ÁcÁ´ÁíÁ/üÃHÄåÄZŧÏÐ�ÐTÒIÓ…ÓGÕçÕRÖÎØ ÙnÙÌÙ.Ú‘Ú/ÝÁÝZàþà1á;ãßã˜å<æáæ€çÖçëÿßë l ï q $ ú DN 4xî^àPÇŠ9ýSÖXÏU '!’":#´#'$¯$%%š%c&'È'=(;)°)æ=+>Þ>M?/@Ò@BAÊARB´M'N P~PÈRSgTïV÷W=X1YÕYZ’[\™\Y][^–^_p_`Y`Î`Cortêu¥w½xçyš{º|=}¿}I~GÒ3�Á�Z‚ˆƒæƒ/‹8“Ì•a–—˜è›¬�¿žèŸ I¢A¨v©@ª|«O¬’­\®h¯_°2±G²2³µ³7´À´¾µI¶Z·è·¸­¹ º@ÈÌÆÍ•Ï£ÑÕÚÞdßeá)ãéä èkê´ëèì�îÏïñ`òQôö,øÈùBûŸühý þ¶�ªµKn ¨ è L _?Eµ|[ÍòÐÎ"wswõG#‹$%’%&ï&L'3(“(ó(_)*¶,Ì-’.0ñ0T1·1A2Å2H3Ô3¥45é5I6©67Ç7Ð:ü;Ï<‚>V?˜@<AŸA8BJG�HVI“JfKªLuM‚NzOMPbQNRÒRUSàS°T UñUQV±VWÍWx±$µûµƒ¶·‹·¸Š¸ë¸^¹ óÕÔCM!#š$æ%n&ç&�(*Ö+-}.0É2\37…;æ>¢@ÝB#DsDlFgG”GHIO-P5QS³UVÝV’W9XÛX=Y»gÎi§k‹lm’mè� Ž¢ŽC�ß�M�Ó�–äM¥¦K§4¨ã¨8©.ª}ª˪«g«µ«¬O¬œ¬é¬š­ï¯¡°Ú°>±’±+²²ý²¡´+µ´µ"º¤»„¼q½‹¾ï¾¿‡¿´ÁðÁ/üÃHÄZÅÙÏÐ�ÐTÒIÓGÕçÕRÖÎØ ÙnÙÌÙ.Ú‘Ú/ÝÁÝZàþà1á;ãßã˜å<æáæ€ç×çëÿßí l ï q $ ú DO!5xî^àPÇŠ9ÿSÖXÏV (!’":#´#'$¯$%%š%c&'=(°) >+>Þ>M?/@Ò@BAÊASB'N~P€ShTøW@X2YÖY€Z“[\š\Z][^–^_p_`Î`rtêu¥w½xçyš{º|=}¿}I~GÒ3�Á�Z‚ˆƒæƒ8“Ì•a–—˜è›¬�¿žèŸ I¢C¨v©@ª}«P¬’­\®h¯`°3±H²2³µ³7´À´¾µI¶Z·è·¸­¹ ºÌÆÍ•Ï£ÑÕÚÞdßeá)ãéä èkê´ëèì�îÏïñ`òQôö,øÈùBûŸühý þ¸�ªµKn ¨ è L @Eµ}[ÍòÐÎ"xswõI#‹$%’%&ï&L'3(“(ó(_)*Í-’.0ñ0T1·1A2Å2H3Ô3¥45é5I6©67Ç7ý;Ï<‚>V?˜@�@ÈBD]DWF}GH4OP QïRžUñUÇV|W#XÅX(Y¥g¸i‘kulùl|mö��Ž.�Ê�8�¾�–…–R¤®¤8¥‡¥ñ¥f¦ɦ6§¤§¨Ψ!©ªhª¶ª«R« «î«:¬‡¬Ô¬ƒ­Ù¯‹°İ(±|±²h²è²‹´µžµ º�»o¼ݼ\½µ½v¾ü¾r¿MÁžÁ×ÁæÃ2ÄEÅíÏzÐ>Ò3Ó1ÕÑÕ<Ö¸ØöØXÙ¶ÙÚ{ÚÛ€ÛÝ«ÝDàèàá%ãÉãmä‚å&æÊæiç¿çÖÿÊÖ ½ W Ú \  y å ”/~9© ½tcÙIË;²u$è£>ÁCëUºb@ ° !À!}"%#Ÿ#$š$%…%N&ï&((›)>É>8?@½@-AµA=BNiPjSRTâW(XYÀYjZ}[\„\D]D^^ì^Y_ñ_¹`ðqùsÕu{vçv�w¨xÒy…{¥|(}ª}4~2½�¬�E‚sƒу#“·•L–ò–j˜Ó›—�ªžÓŸj 4¢ž¢,¨ç¨a©Ë©+ªÓªg«Ø«:¬é¬}­ç­G®ó®S¯¢¯J°»°±б2²ˆ²³ ³"´«´©µ4¶E·Ó·j¸˜¹÷¹ ̱̀ώÑðÔfÕÿÙÁÚñÝ\ÞOߺßPá»áããÔäøçVêŸëÓìˆîºï ñKò<ôîõø³ù-ûŠüSýôý¡dïz• 6Yñ“ Ó 7 *0 gF¸CÝ»¹{ xb^Ébà2#î#v$ú$}% &Ú&7'(~(Þ(J)ü)·-}.í/Ü0?1¢1,2°233¿3�4í4Ô546”67²7ç;º<m>A?Ì?ƒ@'AŠA#B5GñGlH×HAIêI~JïJQKL•LM`M NmN½NeOÖO8PëPMQ£Q9R½R@SËS›TøTÜUG>Q>�>[>š>Ï>Ù>ã>í>÷>???W?Œ?œ?¦?±?»?Å?Ï?Ù?ã?ð?ú?@C@x@ƒ@Ž@™@¤@²@½@Ë@A=AHASA^AiA¦A´A¿AÍAB BB#B.BkByB„B’BÇBØBãBîBùBCCC%CbCpC{C¦à¡#ëejlôÂÃÃ…è« ¸ ‘žâB8WØWYY�Y`Zr[:]Õ¨â¨Q^ÓíÜ#é# .P<ßGìG¶TOU9VÁW·X®nr¥sÏt¡G¤HöHUI´JlYÐ[!]°^éb]d=fCgiaeðgShZiÿiSjkÒk‹l¹mDoq»u¢vwkwÔzd}·q€Š‚„†Ä†Šß‹f�gŽw�$�{’Ó”9–ÙKˆL2MÜM˜OžP¤QªR°S'˜é–8—‡— `Ù—ã�~K�K¢K´KÆKˆ^œ^AaUaö_-aÏ�MU7V¿WµXjYBo£sÍt¹u¢HôHSI²J|KÎ[]†^ô_[d eAgëgçb;fQhXiýiQjkÐk‰l·m¬nqr vwiwÒzb}µo€Í�탚„ †¿†ŠÝ‹d�VŽu��y’Ñ”7–ä–‡L1MÛM—O�P£Q©R¯SµTNU8VÀW¶XkYCo¡˜¤sÎtºu7—£HõHTI³J}KÏ[†— ]‡^Ø—õ_Ù`\deBgïgèbo^„K–K¨KºKÌK€L*MÔM•^©^Naba`Ò`:aÜ�ˆKšK¬K¾KÐK„L.MØM™^­^Rafa`Ö`>aà�“±ƒµ¶œ¶ ·¤·-¸¤¸¹á¹Bó¡Çy³ƒ#%&¤&k')I*î+�-©.90ó2†3I7¯;?Ì@CMD©DïF¦HdO[PbQrSáU@VWX¶XüXÃYhjìkÒlVmÕmáŽr��Ž�‘�–/¥|¥J¦€§£¨©M©Wª¥ªóªA«�«Ý«)¬w¬Ä¬j­Ò­r°»° ±l±²X²®²+³ë´uµúµ–º+¼¹¼¢½¹¾ÀÎÁÒÂtÃĉÄâÅÑÓaÓÁÕÖ)×åØ8Ù›Ù÷ÙXÚÛ™Ý<Þ×àá�á¸ãa俍æWç®çlèU‘ ° 3 ± e }s•©i“ Œûk6¥iw—˜ANœ ¬!­"U#Ï#V$Ê$@% &~&'Å(8*?Õ?o@A„A BÇB¯N®PTžTXìXPYZ¼ZÚ[^\Ý\ã]v^Ô^A_®_4`Vatr)tpvÔwîxhza|þ|�}ÿ}Ï~b€N�Ü�É‚£ƒ„§“è•�–6—ù˜œÛ�ðž ® Š¢»¨·©¿ªÄ«Õ¬Ó­ß®—¯§°¼±}²v³ù³w´FµÙµw¶u·¸î¸È¹(ºŽÌãÍÅÏÓÑJÕ­ÚHަߧákãå>è›êåëíÏîÿïQñ‘ò„ô4öµø<ú—ûäü™ý:þ6JÕ[2Ñ{Š"   i ÀsÒÓu?"gd൧(Â#Ð$T%Ó%¥& '{'O(°()Ï)-* .À.0!1„1ç1†2 3‰3[4Á4156f6Å6…7ã7=<ý<Ÿ>È?È@lAÏAkBÅGÃHÖIÛJìKìLùM²NÂO×P˜Q“RS–SgTÌT<U VnVÍV‹WéWt¤ìeÛ�ˆž­Ú­7¸¶¸*¹ô¹ñiñ}òŸ ݱ&Y(è)U*“+£+(,°,å.—>ª>?ç?ú?�@ A–AB­MóMPJPÁR:S TíTèVŸW[Y%Z[ð\^Ñ_O`š`µgFhxh*¯,>-ó1�3o4Ì4=56s6Þ6‘7ô7É:;?HEJ]L!OR©SzT×TGUV{VäV—W ñ‡ñ\G…MÜ�»ã¾?ÁüÄÌÏÓÓß'R)ý=ËM!PíRWp`ZoF‹XÈwÎ,è:ñzñOGxMÏ�»Ö¾2ÁïÄ¿ÏÆÓÒ'E)ð=¾MPàRWc`Mo9‹KÈjÁ,Û:Æ É Ð Ô á ó  ( < Q ] d p z ‰ � ‘ • ™ ¨ · Á Ë Ú Þ å ì ó ú   + 8 E W [ b i m t x  † Š Ž ’ – š ž ¢ ¦ ª ® ² ¶ º ¾ Â Æ Ê Î Ò Ù è ÷    ! ( , < @ G K Z a r y Š ‘ ¡ ¥ º Á Å Ì Ð Ü à ç ñ ý      $ ( , 3 7 B N U Y ] a e i p w ~ � ¢ ¸ ¿ Æ Í æ ê ñ $16;@N[`u…•�ª²·¿Ç×ßäìôü "/49>CHPX`hmu}…�‘•™�¡¥©­±µ¹½ÄÐÕÚßäéø $(,48@DHPT\`hot‡Ž�¡©®³¸½ÂÇÌÑÖÛàåêïôùþ !&.6;INS[`emrz”¡©±¶»ÀÈÐØàèðø16;CHMRW\afkpuz„‰‘©±¶ËÕâïôù %*/49AIQY^fkp„‰Žž¨²·¿ÇÌÔÙÞæû 05:?DINchmu‚Š’š¢ª²·¿ÇÌÔäéñùþ#(-27<AVh‰“˜¦¹¾Ôßäéîóøý  %9ETbw…Š�šŸ¤©®³¸½ÂÇÌÑÙèóøý +05:?DINSXix„”™ž£¨­²·¼ÁÆËÐÕÚßäéñùþ  %*/CKbu†Ž–› ¥ª¯´¹¾ÃÈÍÒ×Üáæëðõúÿ #19AFKS[chuz�•¢§¬´¹ÁÆÎÓØàåøý "*/7<DIQYains{ƒ‹�œ¡¶»ÀÈÍÕÚßçìôù (-5:BJX`em}…Š’ž£«¯³·¿ÃËÏÓÛßçëó÷ÿ "&.5=AIU]epu}…Š’šª¯´¹¾ÃÈÍÒ×Üáæëðõú "5:BJRZbty�‰‘–ž¦«³»ÃËÐØàåù+EJRdlqy€ˆ�•šŸ¤©®³¸½ÂÇÌÑÖÛàåêïôùþ *27?OW\as‚�Ÿ¤¬´¼ÁÉÎÖÛãèðõý    $ ) 1 6 ; @ E J O T Y ^ c h m r w | � † ‹ � • š Ÿ ¤ © ® ³ ¸ ½ Î Ö Û ã ë ü !!'!6!>!F!N!Z!_!g!o!w!|!�!‰!Ž!–!›! !¨!­!µ!º!¿!Ç!Ì!Ô!Ù!á!æ!ë!ó!ø!"" """"'"/"4"<"A"I"N"V"["c"h"p"u"}"‚"Š"�"—"œ"¡"¦"«"³"¸"½"Â"Ç"Ì"Ñ"Ö"Û"à"å"ê"ï"ô"ù"þ"## ####!##?#D#L#T#\#d#s#x#‰#Ž#Ÿ#¤#°#µ#Á#Æ#Î#Ó#Û#ð#$$7$S$k$ˆ$¡$©$±$Ê$ã$ý$%%'%/%7%?%D%I%Q%Y%a%f%n%s%{%€%ˆ%�%•%š%¢%§%¯%´%¼%Á%É%Î%Ö%Þ%ã%è%í%ò%÷%ü%&& &&&&&$&)&.&3&8&=&B&G&L&Q&e&m&r&z&‚&Š&’&š&¢&ª&²&·&¿&Ç&Ï&Ô&Ü&á&é&ñ&ö&þ&' '''#'+'0'5'='E'M'R'Z'_'g'l't'y'�'†'Ž'“'›' '¨'­'µ'º'Â'Ç'Ì'Ñ'Ö'Û'à'å'ê'ï'ô'ù'þ'(( ((((!(&(+(0(5(I(Q(V(^(f(n(v(~(†(Ž(“(›(£(«(°(¸(½(Å(Ê(Ò(×(ß(ä(ì(ñ(ù(þ() ))) )%)*)/)4)9)>)C)H)M)R)W)\)a)f)k)p)u)z))„)‰)Ž)“)˜)�)¢)§)¹)Á)Æ)Î)Ö)Þ)æ)î)ó)û)* ***#*+*0*5*=*B*J*O*T*\*a*i*n*s*{*€*ˆ*�*•*š*Ÿ*§*¬*´*¹*Á*Æ*Ë*Ó*Û*ã*è*ð*õ*ý*+ ++++$+)+1+6+>+C+K+P+U+Z+_+d+k+r+y+€+‡+Ž+•+œ+¢+¨+®+´+º+À+Æ+Ì+Ò+Ø+Þ+ä+ê+ð+ö+ü+,,,,, ,&,,,2,9,@,G,N,U,\,c,j,q,x,,†,�,”,›,¢,©,°,·,¾,Å,Ì,Ó,Ú,á,è,ï,ö,ý,- --- -'-.-5-<-C-J-Q-X-_-f-m-t-{-‚-‰-�-—-ž-¥-¬-³-º-Á-È-Ï-Ö-Ý-ä-ë-ò-ù-.....#.*.1.8.?.F.M.T.[.b.i.p.w.~.….Œ.“.š.¡.¨.¯.¶.½.Ä.Ë.Ò.Ù.à.ç.î.õ.ü./ ////&/-/4/;/B/I/P/W/^/e/l/s/z/�/ˆ/�/–/�/¤/«/²/¹/À/Ç/Î/Õ/Ü/ã/ê/ñ/÷/ý/0 0000"0(0.040:0@0F0L0R0Y0`0g0n0u0|0ƒ0Š0‘0˜0Ÿ0¦0­0´0»0Â0É0Ð0×0Þ0å0ì0ó0ú011111$1+12191@1G1N1U1\1c1j1q1x11†1�1”1›1¢1©1°1·1¾1Å1Ì1Ó1Ú1á1è1ï1ö1ý12 222 2'2.252<2C2J2Q2X2_2f2m2t2{2‚2‰2�2—2ž2¥2¬2³2º2Á2È2Ï2Ö2Ý2ä2ë2ò2ù233333#3*31383?3F3M3T3[3b3i3p3w3~3…3Œ3“3š3¡3¨3¯3¶3½3Ä3Ë3Ò3Ù3à3ç3î3õ3ü34 4444&4-444;4B4I4P4W4^4e4l4s4z4�4ˆ4�4–4�4¤4«4²4¹4À4Ç4Î4Õ4Ü4ã4ê4ñ4ø4ÿ45 555"5)50575>5E5L5S5Z5a5h5o5v5}5„5‹5’5™5 5§5®5µ5¼5Ã5Ê5Ñ5Ø5ß5æ5í5ô5û56 6666%6,636:6A6H6O6V6]6d6k6r6y6€6‡6Ž6•6œ6£6ª6±6¸6¿6Æ6Í6Ô6Û6â6é6ð6÷6þ67"ñ‰ñ_G‡MÞ�»å¾AÁþÄÏÏÕÓá'T)ÿ=ÍM#PðR!Wr`\oH‹ZÈyÐ,ê:ð­ñ­ò­ó­ô­õ­ö­÷­ø­ù­E¸K¸Ã¸7¹Žò�ò¬ïðñòóô¾&f(õ)°+¾,¿,¿/À/Á/Â/Ã/Ä/Å/Æ/Ç/È/EFòGNNNNN NkVpVuV2W7W(? @�@A¥A-BNYPVS¤>¾>-?ô?@•@"AªA2BN^P[SATËWŒYOZY[)] ^ä_®`êoŽ|&~%°N€ž�7‚ƒÃ ‹O©U«g­4°³�´œµ'¶ŶÅ·\¸=¹é¹ãÈÖ…‘'Ñრp ' Û_$û%Í&*'›'p(Ð(<)ï)]-2±3ƒ4à4Q5&6†6ò6¥7:;ZHlJLOO"R½SŽTëT[U.VŽVøV«WÐEDfh" !ä‚óøýþöúÿ€÷õùüâðîìò�æûãôêåèqrtupwxs‰Œ�Š‹Š�Œ�‘‡�Žˆ‹‰ÎÑÐÉËÏÊÃÅ¿ÁÀÆÄÁÌ¿Åʾ»ÍºÂLj†…„÷ÞÝÜQ ¡Ÿ�õ‡^´³²Ì�IŒ—™˜Ÿ�×ÓÑ׎ƒ…�ù)Ž›¤¦¢ÙØÚÖÙ�ŠŒˆV�«­©ÛßáÝÛ’�X’²±°ÝæåäÝ”‘Z£”´ßèß–“–¶áêᘕ˜¸ãìãš—šºåî圙¼ð›¾òGЉˆ{“š˜ÕÔÓÎÌÕÔÓŒ‹Šÿþý§÷Àô¥¤£Âö©§®¬±³µ·¹»½¿ÕwÍÜŸyþW´�“o¥�º_Ђ„¯È�Þœ º_ª‡„¯—†šþ º_¯�ƒͤ º_³…„¯Ò„šá í"Ö¥Õ"Ö¥„F „  þ'úú®ÃûÓÞ¸@—5Ezo…eïÝ„àݵdµd¶dStderrÁ ñMw±° F+™ÛñÎüø �™ª¦²®…C…CüˆC”¶Ð=‰C¶Ð=ò¹ÚàÅ¿|((RawVecÁ+Ó,Åä©XÕ”ˆó‰¿|©Äýß œ†åªΕ©7«7¬7OsÁ­7óÙ6®7¯7SimpleÁ°7óÙ6±7²7 SimpleMessageÁ³7óÙ6´7µ7CustomÁ¶7óÙ6VNè7Oö‡ö‡÷‡ CustomOwnerÁø‡óÙ6 fûËÒñD¶ÚßßAdapterÁâÓ‰ãè‰q¯™ØA1¿æ¬ôǸëIëIåìI–æ4È ª¬KÄñá»ç÷„¯ Œ�Ђê6ê6ë6ReprÁì6óÚ6í6ôÚ6 BÆi�½£ÜŸ~—†�ƒåuØrÊq–u¶V¶V·VFileDescÁ¸VóóU ðwþþ®öVöV÷VëºøVó¼V ÜÐÊ85Í¥ ª‡îƒ³…ƒ]ƒ]œ>„]Ó“\¶ãB(L¬l×\×\ÂAØ\Ó“\mf”½q.µš]š]«F›]Ó“\‘ Öîk1ž]ü]ü]ý]SocketÁþ]óÌ] ‘üª«"XýÙa ð‡ð‡ OsFunctionsÁñ‡format_os_errorÁò‡decode_error_kindÁó‡is_interruptedÁÓ7‡U!‡äâÙaŸy€=Ö¥Ä]Ö¥ Ö¥²®Uÿ Ñüþ6ç÷ý6 Õ7Õ7½öÖ7¦Ù6×7èÙ6Ø7 error_dropÁÙ6Ù7 outer_dropÁÙ6ß*I]@ÆDàç÷Uÿþ6 ¦ÿö6£ÿ €UÿÄ]Ö¥çþþþö6°€� €g€gŠ‚gê ûcƒg”¶ûcØ«q¢1È¡çµUÿý6 ÿ�CÍÜ»wµwùW¾…ùWã_£ä£ä¤äTryFromIntErrorÁ¥äó ¬q£:{ a±ÀF¿|°CÍÜ¿|éCÍÜ¿|èCÍÜ¿|³CÍÜ¿|ŸCÍÜ¿|êCÍÜ¿|é8Èå¹ ¼ ¸ º„  „  æ¬ôùnÍܘỗỖỘ — – ˜Œ�—Œ�–Œ�˜Ђ—Ђ–Ђ˜ª‡—ª‡–ª‡˜îƒ—³…—³…–³…Æá»–uÆû‡+ü‡ý‡NotFoundÁþ‡ÿ‡PermissionDeniedÁ€ˆ�ˆConnectionRefusedÁ‚ˆƒˆConnectionResetÁ„ˆ…ˆHostUnreachableÁ†ˆ‡ˆNetworkUnreachableÁˆˆ‰ˆConnectionAbortedÁŠˆ‹ˆ NotConnectedÁŒˆ�ˆ AddrInUseÁŽˆ�ˆAddrNotAvailableÁ �ˆ‘ˆ NetworkDownÁ ’ˆ“ˆ BrokenPipeÁ ”ˆ•ˆ AlreadyExistsÁ –ˆ—ˆßÑ  ˜ˆ™ˆ NotADirectoryÁšˆ›ˆ IsADirectoryÁœˆ�ˆDirectoryNotEmptyÁžˆŸˆReadOnlyFilesystemÁ ˆ¡ˆFilesystemLoopÁ¢ˆ£ˆStaleNetworkFileHandleÁ¤ˆ¥ˆ InvalidInputÁ¦ˆ§ˆ InvalidDataÁ¨ˆ©ˆTimedOutÁªˆ«ˆ WriteZeroÁ¬ˆ­ˆ StorageFullÁ®ˆ¯ˆ NotSeekableÁ°ˆ±ˆ QuotaExceededÁ²ˆ³ˆ FileTooLargeÁ´ˆµˆ ResourceBusyÁ¶ˆ·ˆExecutableFileBusyÁ¸ˆ¹ˆDeadlockÁºˆ»ˆCrossesDevicesÁ¼ˆ½ˆ TooManyLinksÁ ¾ˆ¿ˆInvalidFilenameÁ!ÀˆÁˆArgumentListTooLongÁ"ˆÈ InterruptedÁ#Ĉň UnsupportedÁ$ƈLj UnexpectedEofÁ%ȈɈ OutOfMemoryÁ&ʈˈ InProgressÁ'͈̈TooManyOpenFilesÁ(Έψ³)Јш UncategorizedÁ*9ns+ïÎl»„¯Æ –uÆŒ�–uÆЂ–uƪ‡–uÆîƒ–uƳ…–u–¥ày–¥Ÿy› ›Œ�›Ђ›ª‡›îƒ›³…¯DÍÜ¿|�á»� �Œ��Ђ�ª‡�îƒ�³…Öf¬ø”+àýàýÆâý’ür 1¡z÷ŸyŸylúX×`óõ„¯×`Œ�„¯×`—†„¯×`Ør„¯×`Ü�„¯×`¯×`„¯×`¹¶×`„¯Ü`Ђ„¯„¯Ü`Ü„¯„¯Ü`Ÿ~„¯„¯Ü`Ør„¯„¯Ü`Êq„¯„¯Ü`ª‡„¯„¯Ü`¯„¯Ü`³…„¯„¯Ü`󶄯„¯Ü`ÂÉ„¯„¯Ü`¼�„¯„¯Ü`�΄¯„¯Ü`‚Ä„¯„¯Ü`„¯„¯Ü`„¯„¯Ü`¹¶¹¶Ü`„¯„¯ü9Èå¿|‡:Èå¿|¶YÖ¥ú±¥ä¥äÌf¬øÎf¬ø‡ ¬ô‰ ¬ô8ÀÇÆô÷Š/¤>6=¼7*¿Â†Å‰öÈ?ù¥º9 »¾+ÁĈõ‹ø1¹)½“d“dq,ø}©Ø core_intrinsicsÁfmt_helpers_for_deriveÁ¢g¡gk©`m›�YŸF¢’æo$õu‚‚´àšderive_clone_copy_internalsÁú Ì k©`m›�Y¿‰·T¥JWAÞ‡“dúûèk©`m›�Y¥!SnFUÌÉ/„±…ÿ‚]´œk©`m›�Y«˜Ä@]g) þ “dúûèk©`m›�Yå¡BQµë`cø /ü·/°ü¨² Ò[k©`m›�YÆ_ÇUŒÞNe,ü&}”V¯àšÀ›ð‰âk©`m›�YbÉ&=˜,÷üçÏüª• k©`m›�YÚ#pwÊäMî�/üŒæ�üæÈ k©`m›�Y�‰¬4É}F‘$ª'uÔ=‰àš�i€ik©`m›�YR+ñòÏFŸgô ˜,‰ ü€  k©`m›�YÒT&†Ê-ñÄžìº üÒ¿ k©`m›�YÆŠÁA0é[NqÇ,â1 ™àšòš¢g¡gk©`m›�Yæ_œ°èά/ü—$üþ� k©`m›�YJà›iX™é@±�mÝŸ_àšò¾k©`m›�Y NW3 Ž“dúûèk©`m›�Y³’DðSåâ7à~“dúûèk©`m›�YÕ| ¡}ñ¬/üŒ�Àk©`m›�Y]jbDR_o$ö&^àšÀ›ú Ì k©`m›�YA>y«IºåüÅVü¶Ë k©`m›�YýSOîZ4)ž/üŽ!¹µk©`m›�Y–Š;â_éà4ô ˜*‰  k©`m›�Y«:]5¤F‘±¥'yàšò¾k©`m›�YŠlîIóq©¬ü“ %Úk©`m›�YÈo(ž ýÉ„Ù1 ù´œk©`m›�Y�»áym¼ð’“dúûèk©`m›�Y˜’Îä?Öž·T‘¥™‘_àš÷¾k©`m›�Y[Pzxb1o ù “dúûèk©`m›�Yò9òB�À/ü‚†üÝ ø  k©`m›�Y£--nŽŸåüÔ]÷ Ôk©`m›�Y`íµ›�i¦q¸,Ù`ïàšòš¢g¡gk©`m›�YÊ~²`'³åü•Ç 7k©`m›�YÐ$œH‘ÄÉ/„Ðv´œk©`m›�Yq[ ´J¬Ð·T™'Pàš÷¾k©`m›�YXt³z2*¼�ô ˜(‰ u k©`m›�YøáÁ1hj·�ɼ³´œk©`m›�Yô€}‹x þåü»�)k©`m›�Y I‡_*ä!e,ÃÌàšÀ›ð‰âk©`m›�Y:l䃑¾e,ŠàšÀ›ð‰âk©`m›�YŸÚ ÷¶‰Ïð æ“dúûèk©`m›�Yo›î±ÆËbb^|“dúûèk©`m›�YhI+˜úiooq·,®8àšòš¢g¡gk©`m›�YàÐå»�R~•'eöi_àšderive_eq_internalsÁ¢ŒÏ¾k©`m›�Y.Øt;–ÂvûɄ櫴œk©`m›�Y‘ÿ#¨;ÑäÉüì6Ù´œk©`m›�Y½è,$;q,¼áàšòš¢g¡gk©`m›�Y@`’ ÐÂh~†ßàšš«¢ŒÏ¾k©`m›�Y`‚>n~ßmK™�“dúûèk©`m›�Y›ÞT‰ ÷m ­ “dúûèk©`m›�YÉÎ~”É>„Ð`дœk©`m›�YÔÐ…‰ ubq<,ÙØ àšòš¢g¡gk©`m›�Y+ÄþO˜�óïÉ/„Â2 ´œk©`m›�Y�aúvûÿñ¶LŠ'�ÀO_àš¢Ë¾k©`m›�YZð(0hKmÉ„ï– ´œk©`m›�Y Ń;“d“dÜ k©`m›�Y«XÁò™W¢„e,ï[ àšÀ›ð‰âk©`m›�YX¢‰O”í� Å“dúûèk©`m›�Y¥ê¼àj•®¶Lûñàš¢Ë¾k©`m›�Yi/žô ”Ïwy“dúûèk©`m›�Y+w%X²8»É>„¥8± ´œk©`m›�Y�ÿz[yªÔ¬/üÔ6fëk©`m›�YæS�9²ƒq:,Ëå àšòš¢g¡gk©`m›�Y´$[dRq,ƒ' àšòš¢g¡gk©`m›�Y�ð76‰¸Éüí&Cu ´œk©`m›�Y¿¸2j°ÂÅZq2,º} àšòš¢g¡gk©`m›�Y ÖY{N   Õüõ´Šü× M  k©`m›�Y'�Ü-�åUÕüùÜ0/ k©`m›�Yx+ÏÏ:PÕüëÉŒ\ k©`m›�Yt®,ɪ¬ þÙÜÌgÌÍÆÌsÌÍÓÌÊÌ ÚÍÚ„ÌÚàÌýÌ«ÌZÌͯÌkÌ|Ì3ÌÂÌ^̸ÌoÌcÌͽÌÍÎÌwÌ#Í×̈Ì7ÌäÌ�Ì<ÌéÌ—ÌFÌ Í¦Ì€ÌKÌóÌ¡ÌPÌͳ̒ÌAÌîÌœÌUÌøÌ(Íê×ÿÕ ÓÚjÚ>ÚpÓ:ÑñΛٽ×ÒÕ(ÔôѶϧÍwØbÖºÔzÒIÐüӖчÏUÔÐ'ÎÝÒÙÐ…ÎÙY×�ÓiÑ!ÏÉÙ1Ù$רØ÷ÖMÕ:ÓѶÎfن׃ÕÊÓÂÑRÏLÍØ-Ö‚Ô ÒäÏ«ØÉÖ Õ¯Ò¬ÐWÎúÍIØœÖòÔMÒ~Ð<ÍØÖ*Ó.Ú‡ÚZÚ�ÓYÑϹÙÚ×ïÕEÔÒÔÏê͛،ÖâÔŸÒnÐԲѦÏrÔ9ÐGÎýÒõЦÎ!Ùv׺ӆÑBÏîÙVÙI×õØ×sÕ`Ó*Ñá΋٭×ÂÕìÓäÑwÏ—Í9ØRÖªÔ=Ò ÐÈØçÖ=ÕÍÒÉÐuÎÎgعÖÕjҜаÐODHT ,·ÞŠÀúßP?Ç“†öÅÐ�ëÎÑ5G>p¾èªCå•.؇ï\nk;jø�@D{@Hq ïi¾Ñ«SK Xj²¤âq 8áÓ 0â Xï�Y6­’@ Ðß`€ä¥2Kèç}Ã7�ž€èƒæ¼o(½\¬V$ ¸Œ} H¿lX:zÇoœvA¸~ýŒlþ�¦ŸƒÎ|¦²èx¡Ž¥…æèݱìJ맸ha²ª*æ଴°dv[]èÆŒDR lö±V´ßp$>î hå ;y'¨lŠè‘5S# ¬i0u"Ø©­“\ Ê&ÐíV‚3¹ÇR&0Ë&ˆ„¬9(óelXs£)à�a¦`�4¨*pˆíš ¬ž+°µ›.pØT,¨O´k¿Fƒ.xë󷦑ó!/¨`Ðn§tÞ�0pŒƒj¶jŠÝ1@³b•n÷®2ð’ÄQ˜l0xðkM·{409äØc¤h.ÀV}�ž¯JÖ98§Oͽª9Ƚ¸ÛÝm>1=P�m%ü@¡Ò=H§—™‘Æa@8u¯r_˜=„D¨Ø~ÚR4 ÎGÀâ«©–ì £GPìã ߘ÷ÄHø†61~äZ‘IxFÄÈ) GNywÚtc�L€@ôÍbxMhìÜA1‹M]Nx àÌp.«+R�¢“ퟳ²S S {6GR8� ö,šõnWÐà…©R͹Z@»“x’[�ý~DG k[Hu¬\”ð6] ße9õ$\ ê4C™v‹_˜Îê·ôG`pµ#ÈY\m4�–û c`›ÒûóócfPU( gpNÝâ¿6èhpL�1š".KhxuMiênnni p ò‹ckx×SÑ7ÿülxê x‡ðJgX#‚K¤ón¸“úaºÑHnè(0#«Ð4UoØ*ê ›4nH~Më¡€Œr�;×ÐýH—q´`<·†ÖqàŸÛßY�dnX2BJ†zÞVv@ÕÐ"»öºpÐK‡ÐHuFx@t«æð‘¡q`cºÂâÈEx¨2ÙÛº}ÝW{XÃ(h1Në©xˆq¦5\…öjpñ±Wå,Ôrˆ/W·””ipC—!T\¾€È«€,³0o‰�Øë„P0¤‚€ p^>ŸÒ�øRÒ$áÙÍ„ˆÍ¡òÁÿ„ –«%–Sà†Hö®üh±‡à%6Pˆ«Ä@†8når–�ѽì³ ø<¿Šø�m¹qŠØ‹8XNÀÑ�ꟊèY {h†+�Ø•L?X�rH�X<ßÅb±VŠ€õQwÒnÅ„&IÊ,Ô®·‘ >Ȉ"?Ï¥Ž8ò,‹¤™Š`ºbnˆ…O”xš ›äÛ3i• 3ŽU·s¡‰hÏÊÕñ®—p¼â1l%)ؘh‰Sêó‘°"ÅúÔ¯Ü2š¸J½©[ È/L$ÿswœ@\ i×€î�U�N.ªý Š<‡§TF RŸHJ]ÌFðŸ(K4)ÕgÚ•¡pJH3v!„¢°üõrÿö¢hœ¢"±)K¾¢èY<¯>Š.r(5Ü^ÜüG¦·ï/\/Ô|§ ”Cüø÷“§hƒ�9²Fʲv¸ðoÜØ”1ª°JL< «°Fz†{<—¬èÕ^’YÜìD­˜Ì–â`Õ(!®¸ŽxòêÞÿЮ81 m#1N°XT;N¹§±*Ò‹�½«à<~Ý,J4å°3eö?:´0QEd¹æ´Îµ8Jöâ÷ë¶P*À[í"¿ÞµÍ`tD/×P¸ð‰‹ +³´`½�Ÿ«t+]ºP¹@Ù·áL¶P‡±æ÷ûC}¨§Lcƒ«ä½PxÕy<@Åž¾{©Jå/Lµð›¾sä]; À¨zP?9ÿ^.½0ªsÝiP¦¨èjÌô> ˆ ÓZáµõ·Ä8Àˆý ¦ë9Ũ©Î_R9Øçƨ@ mÒåÐÆÇÈ£˜wëÅ–Èè‚O�) CßÉ`ųz,/�rÉø}3ç»wml˰ÂØómŠÄÐ-qa¨ ÃàÍ`•b Ü3Î\ΈðÔÌ`Æ Þ”ãÒ.„Ðp©Š�šDÆ3ÍÐŒŽFžA”›Ð°„n ˪ÓÓà`3ØëõkÔæ÷9ù\ùÔè®y£;z �Шlÿ©Ó(i·×èªá£&¸äoØH²¼ÏlÓØ—ÙP”Ýî �Ùx=E¨*ÆßoÛ˜·Ê1©þÜ ³½]Ì÷Ü%‡Ÿó¦uÞð±’!¨Ò,Jß8 vjÇ.FÝXâ< ðçÛ §Â+_Ž6Iâ°]L>�¢~�±¸»ýí*5âIäàdàzN ­Ø) & Ìç%”\šõ½êH;4"Ô½ñëHÕï¬t-çëìÈ–štC)·ì8Îóñ°ýnÌîØìœÙº´�KîЦ 3•)¯íàW=ÙÛÙRñè¤i¦…¤ò-«¿ZóH;˜˜÷¼†ôPæ‘QÒìh–ó !ß™3ü,öPkÄðß³àÌ÷è0 û欤 ø [ŽÃ�~/ôx£Vóo½ïú°È ljáû8þ™’HhË–üˆQêÒÀËrü¨.¸È£�|ƒüà-fœ™þüðsÆOâÆj=ðH„(…jæÏ¡¦õ2æ‹"kA�IŠ{£<¹†Ú×5ëðI0 ˆínùÜ$âwÒü?9YAˆ¯õ@Ñúy× àV±Äyuµ¯i« Q:Ýqë[yÛ © V}â?… éø7“’sãI9|œbN9zaaÉe-9GR÷þݱ Ôχ1ym! orœ /àÙÉŒ�º¦{s�tÿL)ª%ùôðSÑ~ú�;YpA$±ôÈÄÎÑC>¥ÑT¾°�O†.Å»ÌYË›2ƒB ®!#¿Ç@] )Z#‚Ô!A)˜{¤�³„yìÌG‘Ú­D#Ù<äU6°Ã0ÜÿùŠn%1Ëo êRIT&©GÓ`\¸»?&Ùò-ÉjvÀˆ'ñþ�œ´õDj&nOì¦S+1\Ë�áþ5-‰€ø-;†µ.ùÙ^xúg*/©€dB2T:0ùWK”´Q,®/ÿ×ɶ}c/ùú‚ß³"¼q1¹XÝ–|,Þ4ùÒ†½ëOoð-ÁÎ=¼—|Bp5™º•ƒÐ:2ùÀ²BДU±/‘™«N�[¼w9ø¾zŽ7ä‡:Qdþ…v¼,;A� Ò5hÛ(<Ùoû¿ëûê*<é˜#Ž?ÌùÌ–àý>÷R‡Ì•pĺïC@Q”4Í •ùƒ@ÜÀªg�êB¡Ý^6Î0ÕzC¹ÀÏÍ“5AíCy¸‘­>ŸÅEÑ Q€ŽÜ3G¡Žù"‹_îJÙ9̠Ǩ‰M)ôI4#JZLN™@¼JzËöO¹’Ûµɧ{ûP‘#—%PWÙPá€cW 5í'R3‚CÅV+SñË ]X´òUM±ÒÕßNU†âꃣ2=YI †öë‘ Zɇ¡›a[‰|ûºTg;™\ºóyS ÙzZ!RÑY'`&^é×k.Ëú¾\éùXk+ô8ZySª—í.^Zñž¤ÍZŒ+yhÑÓ ºÓ^§¢iq}ÜLàkIQjy0Æ×²ûhîkñ´]7eÒ»ýkᢵïy»ú±m ~§ÝN¦my„åa”óIo¹{2lwüÒpqÝ\ç+Áqi4õ·%}jYBß’JT.7s™6”0¸{½is\Rî%0o9ÀE½ìݨsQˆàßa•¼Ck Ô>ñ˜çøx‰;Äõ2è“qók{Qz€Èxé$à *j{Ái^ä”=P~±ái:†SŽÕan•ÑÇJ-ùÜ é€9Ö ù Ì9‚¥î*ºßLƒ±ös ¤ ¢Ø„áh©\Ù6y²‚‰¬–�͈ƆUú¨˜�[‚AŽyM²š0€¹`b�ï€P.‰Iù:è DrŠá·À }ûʬ�qO/ÅÎS]�Wâšm’¹­9-Ÿ©Y“�K&Ƚ®– *5vÅô:€—ÙûS¢äâS¨˜ùðäðW§t™Jº]=8q÷šù^C—®¦÷Å— (�1\ùÿ§œ™™DÕíržq�i4,&ïBUØœq¥óø¼ÏgŸAŠtG³‚]7žÁ;6¬Ðu©™9 Ù™‹0Ònž±—š:/á  é[é7p€$¤¹œzÌÁݪ§‰¥æ°Ô ˆÀ©©v.“YþCÞ¬©'�ea#«–­�?œÛ¨R£ÿ­ü¼Wû)ڭᓳbødÞà°¹÷Z¼8¯µŸ±1*þóâmN²AèôNŒß`ö°!ò2ñ;L†´vá·óø›µÁ::d?±]ö9eòïÓŽàX½�çqaÔrÔ¾¡Ø�ä`A5ÀÙïè‚®fÁ‰`pÔ{ !Åñœ[Ç{IÅAµ¼5þHÚËùzü"½âÍÁÛΣ-Ì�Î>‰%ÐX²áÍ!i-•X€ñ1ÐáœPàûkBDÑqqœ|ˆó`ѹHÉŸ=ÈëÓq^¸c£’y$ÔY1L …á7HÔYºî J»�Ö¡T§/'¢£×©ýW¹)~Ï Ý·æ{[»'Ù¡ÍbxJ%óÓa™7 ø“JÛÕô;ZÌÜ)RýòãU"ÜÁu=—ÆGÞ�.à«›àY¦¦èJè<‘á ÖâF<©Äåá ôŸk�OæQÏ,‡°6¾åQ— 7» „é™ó&V*¾*éé%úÄ©žî™B="6‘ðQ´7j»T�ñù²úÛKNó1‘ Dó7ôYë5rµ8 ÷a'b«ÏN-Õøy”ƒ®±÷Çùac™4ئû™;ßùëŽû¡hŒf £â¥ý‘½Îò;�uÈþÙAUD[8¦ÿ¹þ†>bvòí_nuÒ%¡EÊÛó Š›Xφ™‘! òo+˜pé RøöŠŽ8²K býšQe4 2U©Þ΀²ù ZÜÐB_Ë€æÞ’éó‡zso½zþÌŠOEV–ÂK¤ú&²ha>·ŠZîf6cØ¥šê–ï‹}aàc¢¨K§½k(BQG=öÈh{!â‚xFX´!Š‚è“Œ}w†#Ò+€iE$šYT S“!BíØa¡lç÷&Ú`T(—%'’ Æñi3J&]ÅÔgœ$Úb0 òÓ|Î*:|vǨv: ¸>D ,ÂËÚÎH¤æ.ª¯Rû�_õ.Ò5u”¼]Ù/2ºÉ,Av+Ž.Ò®8Q>ê»2Z˜¹.E9æ»2²·%NØý3ê+Ãë Èõ2zh©iªëÏ6Œ•…ÙªàR7:×CI$JÖŸ6€—4”Ï´ð6Z�]OØË€^;¢—-�—a>ùfÕä`#Ò?’~¸–Ço¡@Â'R+&ÕXBâ4LžSJdBÒöàåT~}CêœhS)ˆ#BH8›m»H’îáRƒ,A÷I²>—‰êžÕVHâÅX -€¾Lò#z§÷èN*ZãEæ�OR UMWQš+svÜ­G=Rj ƒ&Ï.N[RZOjÀ\@ÉQ ü„P¥²€¼Tº—%Ø57ÊV"P²åŽ%Vªp¡® ckWº‰-d†JgZ2ÑÆ" ¿W[Ò]ŠÍ†²Á[BdžÐ[_´À]Ê1ï’S?X¦^ªY;y|nû_Ê;®ÊÆ‹`:N�„(;‚a:>i"]VShÊmM¯v¼°viÊS„JÓm¢ Ðϧ{nÒs®/ãѾp ³ösâAup²òÑ…üCÍwrº§î2°_{u¢§UYt‹Lxen­T0—×y‚4Åæ¦{’z lx”k,&#}ów¶€g‹Á~ÒH‚{K´îR"§ZôúE÷�‰ Sþ�*ë#<ëìù‚ÊÅr>z•\ï�*Ä”»Ý …e„"¢t ön16„" °½¾�«}²êtBNBí¸‡:«ƒ�f¦£òˆŠ)Ÿk‰ŠådO¨Ê8ŠêYt¹ì> ‰xkµ‚xËHˆ*Ì"ºÁ�2ùÔmûèxšŽúùé®4\F�Jm1î/+¸�bŠH`/H ¹�ÊZžÌ­{’R!ˆGãA@�ªO|<âøÂx‹rø'^»0ÁK‡Z÷óâ‰è^¢–ºï`~—tB3—’E�w?9^˜ªÁ›óñÒ‡tE­D,ðRÒ>³Š&‹­•zÿ Ïä5ƒZÁ�Ò<òÝÅ’ª°Kä à†Š=À®a_ªŸ²‰%�R#¹ ÒòT°ò”6¡êFÅÐCeŸRŽZõÅ�‡£jÒõz4ÕRó£J8‚p¶:ˆ¥ í,VÎÝG¥Ú„Ъ—2à§zˆ «±Ž‡Ÿâÿ"tf±©rÝ4 fÅ©ºî ’³×«º,5)±Êö¡¬:Qæèù˜”Í­JÜ5ÀÇc®šF‡8ú«o¯B _(H¾°ò,Êžvæ8ذR[ ÊðÒÝ%°Z°[æ�ÿyw­²äœðþ›–ªzÑÍô±¤œX¿€ ʶºBÿ?à„ðX·rïhk‹*+²¸º*ý“†Há·b¢ÖÄ7qóWºŠé/Ù¤˜|¹jÃË7™EŠ^¼²÷„x/Ë»ê}pjçÞ0x¼¢D¡•÷ͶBYõ¯HCBLÀj¤’³,žMH‚ΦûîÅR¥5”Ùo!’Ȳ¢ÊqзË"ª-;Àåâ£Ë2*°´cŸÀôÐbÆæ�“ó&ÿÑ껹¤ýZ÷—ÒR°•—ÿ6×ÒŠ¢ÂÂp 5ÙŠÝÖ oÏ?üÛ Ñ‚Ž§ü¥ Ü‚A7:€ -ßJ£"ä�/uMã²Ö’èH6ª�åšg^NOñäåÞ q*%Vçb¯Ô.,–“èòŸ��;”§éò^½ÑDò>ìú±D…™ïJ?x{lÜAñòÉv£ᎯÐò¾í­±¼�óÊ õÿÿ¸Í×ó:¦Ÿ‘ŽL²ñâ“�ˆp/¬ñ‚X!žùY ìøòƇnDuô6úJ5'ß}J’‰þÊày|­ˆL”ÿ6 €·S¿›Š óUIžC‹îáÉ’5îóÔSžÜäA®¥ážnL£�„Êлµs•3»d%•µ ÃGÕ.øè÷3‹µŒ°8n3ûåϦÓ´5¨³¤{�Í õ53€þücá[•‡• …‹]½â÷EròÓ).?fëãûºÔÐÌì“ìdð,Ñû{Ëž\§á¹2Þ+‘Æd³`}+u ·U4½#›�ØiùFó$3ë5¡2õPM%ka�€ø,$cÃL¤�M¢Û'Óô,Ï6ò�Ë(—q¢· 2 ' $º ‚ð9Ù*“ÞíL¤Æ–K,3šù7G«.§/!áåÜ¢/kŠþêÛþ0ûiyñÝ^I90‹º™c4ø0+B‡Z`§!3; è¯�Â4�JžiS¢5ûÙç)ÿX�88 IÖç*k9M<£òQ:™€V<›Ö@†Ö³ö–<[Y»NRÿo@‹·ZšLE‚@«’ËE¾8D‹æÌÙTX?DËOkTö�KƒaÿS‚AáMË’‘ðJnç¿NÓŸùX®¬= Nkq}zþtN;ý–­¾©PC¢§£-á1NÛ¹]» &½N›LŸ7õ‚tTãØu{—GLT{w)à7{VƒtnÃ@GU^WÛ[UE]’¡VsÁ>‚ÐÃõñYûh' ¨ð˜ëYK’'¤‘5>Y{L)]mX“S®,œÞÝU{¦p%1aÝ^ÃjYª8YZ›¼ð5D�`7jU!Û†ÝW‹×‘š§`Q;©!/ï?~c³LŠ'¸le“7� Ü6€SfC^!Öh—£gƒLHªCõ—hÃéÛþ½ÐSi‹þ9ƒçzÌgC²[ S£Ýió‹Ö¦¯Íl£Ók©`m›�Y‚IYm{.´kJ·½¡mC¾pœÙk³D®õhÚq;áJXT½5®rƒÆ©*8oö>s›`0²õÆ@‚t3O»‡+²u5£Ë—•–r³ãÈÖº$ÄÝl+¼y7Šxã[´j¬`’lÛ,2Ž!©zëþ¾@„ñd{S·¯ÅŽ#mfm#äð}ûvëQ,/ïƒ}‹`«Û±+•¹µ¨!Cû} ¿”¢qÍ�N�3Z¢¹Q þ„#~ÕºÏuzц˴²ñäòÉ݈£šž‘‘fV‰3N8,šÕþ�Škí|’C¦9Œ»˜è†ÊS3Ž�«s�'À¸Æ�ÛX­ÔŠX^�ûã:s¨‘ã¿ëf‘Út’Cå—!T§In“£j.J~Ñþ1•«†äèÙ¿y�“³1édî­!�KŒ‹!í.Ãu c.§±Öt¡ ÕMF°™ ^¤{ô²ƒY-¥SÅu[IúV¦§Ó‚®Û]T–¨ã?€Jûô�©ƒzâR,�„ª3Ñq�Ý� 3«»ï‘s€ö!_­ÛÛÑêœ2´KùM9]—ùF¶Èì‘%]¶«WšZ[3÷¹#¿M *¹ãƨ¨-f…T¾ô�¯wap{ÀÃFv371]ÁC)²tUþ‚ ÂkÌ­ªòÐM¬Èñ}‚Â{<7<•ËÅ›ì›V¸s{WÆ“0Rp¢ôDÆ4˜Ö7[ÿ@Ç#4ÜáépCÉ“ !:Šq#_ÇsáÅ�$?ËSзçL2‚Ì3*Óm0B{YÅ{Š3X}ÍàdΣ²¸>‡IÂËv/“² ÙõÆCpÅœ^ÆÀÑS~Q®Bœ]Òƒü I»ôLÂkJ,Ķ~r£ÔsÅ»smþ¤Ô#cùìä‘€¡ÖS_y3¨Ð×C¬ÝÏ�ìBtÖãΜÀ$°‡Ã[ÛÖ¬ìÆÜÒ»l3ø›ŽBÀÛsQWøTè#ÓÛsN÷èÂ,PÝÃ[òf§µÓÞS€“I½Ý}Þ3ÛD�$ð*àC7 ¦]…æÅΫo3*½W1ä[{¬…ådåø›ž9>åÓ†HÙþ£çAðguÜ æcôÅÅ«Œ.é“ò‘ÇF>�£ëCñ’ !-ý,ìQ0K÷ΈðìëãNŸ~ÞLî™ûCŸyC ðS–¹®Û-�œñ[âšK$€nšòÓ„ˆ/¶7ð#,ÓÈ”¬¹·ðëÀ1Þe´ÚJõƒ_¼Üˤ·JÀ¢¼oùSpP>¦Ñ(tý{™ï¼?a�4þ3°Ûц÷øÿ»-ßÐB 0(ÿëNø£ú´ºþ‹³KŽcJ / yb489Öþcw+‹gçÌ"\&*¨´N€úï:° ‘ÇMd!tŒÎ`ã÷º"\à ghíDF$<0B9+½}%LéHú·–&t48l?/'T5°Çoî'XèbAk(üéÂ¥”�8'Ü>™‹úL+t¢7Ùçèþ/äv f@_ã0´YgQŸ^€%5Ìò.ùÐ�hŠ8„c}QgÞÒ9 ±�ÑÆ: Þ Þz»= �Â6˜ˆî=Üô)åL -?œ‰tu32‘?ä›%Ž.ÙBÌ�¼u–�Dt ˜¶j›}4EäÒrëmføtF„S0ßã/5G§zÝ÷ õ¥H$gÈè¡i çI¼¹ÄæÐrIü+ PoÞK”¡sГÈjLD@äEf,ÚHMDÛQ{5!Â9NÌwD»@D3�JìêÊ×WþJŒj;ÉVv‘QLäea�Eb{RŒ%to,¿X@RlaÓ[`¯UäJ$ÞÈ7jXŸUÔ¥¤ãgफ़VÜÔDÜìùâ Ut‹ºiˆÐÛ Xü2p$ÙPˆY¤ïPÔжçýZd®`ó‰.NùVÜðÌq ®™[ Û%°8Aj]Ì�n 7ÅLë^,«Ð¼Í„ä_LÞ¡›Â^t¸§Ç'F$aLë£åúØaDê\]„§–cDÙù[kÍ6RdݨõÍæblo:Grf´”Bì¼:fäÃâÙoDš!g4t/Õgó.-e©š¨ÁŸ'Yjœ”s¾K­¿k„éÕ:õé`<æÑñIõ+mL¾@í|!Ñn,&„  ùŠ]<ùMmwßg‹gHĆ£Î�qÄ\jF\L‘ˆqdd÷¦wLŽšsüÿ`ï!ó(tÔeâ;ÐÐVs41ô|5¤¶u\®núèmËkœ÷‰äº^¯[vt3—Ná“oÌ|I«šCoJ´Å0S³Ý?{ÜQ ƒaF"ã|l·ÕjýÌ‚Mt¨|=ÜÆ%¤~|ŸB·ó±,Lë^78ßÌ4€„­êæÄ‘c=p4œ®¾›ÔJ‚l¹~_›6ƒÌWn¥)P`\S g…7lP…Lÿ½¸›üVô§ƒz%dMX‡Äê‰M}kU´�‚¸+~ZЦ”TW¶�Ü'f°‹äŽÑ?—ß$´oŽôÝP2Þæ4�¼kÔ¤�6’Äé¥5çê :“¼g±çùEL_•ü»æk`°€{–Èö'ª¨=F—, ´2SɘPi6™ýý›„×ù)àvœDz~ÍY<&�dQOù[v¡Ìº»áKÌb¢lc^#½_uç¡”ÕÜÙ9È5…¢TŸØ3’‚¨DÒrã-N¨dªZ‡Ôœ ªL�µ�”Y®”Ǹ�aÕ^°DZ‹ÖÓ¾3°L¿’* `Û³²œ}ƒîïªõé²TWƒª—•Ú¥±ôÜ4l#$µT"Î:$¯·$£óìè[p;¸ô+P÷rg’S¸Zn*òÕ»“†ç—Wæ»´EvÅȯ_¾׺GÁŠx¾\OQÐv€¾ÔÚ¹[‡ôoÁŒŒßId '›Â$‚ .Ã$›K¾,˜å 1ûnHÄ{ðK¤uŠéÅ$$Æ+”ƒ5»Â4È8.¯M*É\c5rôÒÊô•λ—nÍòË ^ù]ûV)ØÌ¤í²OÀÜ5pÌ$gßDî;»ÎTŒ…wý¡_uÏÜÏT* ·Éü;Š2~ÔÔŽ*˜q·KÕDl+ÔÙäÖÌ<º¹ótQ_Ö4ê¢p”å ØTLÍXYp=Ùl0½f زoÛÌ8ž?lx+Ûì¥o›©ý>ÜÄäÓRáúQüÞÌ.—ì/mÜKÃóãÉgàDµ¥ñÅNälË>@£h7ååD»~¥ºmmWä�Ȭû¾XçDÕ�»$’ët²–JB3ìåàæfÂë”CÒœms)îTクï¾?îl±–|ÈdRï<ô´2 æôí<øþÛ¸+²Oò¤¦zΛ¾ï4Ü"î$8ó,èÇF'  ó,vǤq»sö„Wä¸úqµt÷LÍ�ýP¬e•ô„êÃ.Τþmùä MeFµÌ=ó|aôŠ>GGòóÔ{ÔÆ¹SìŸ*ã:‘{ý\¦Ñ yK_¯ÿìœK¶7 èL5qάzÝúKU9{‹muƒ='0Œe6E% #Ý5ÿùÑ%†áÐV)S½iÙ ¢q‡�þž>Ò&pä Mæl¦ê8W�løNMk¾Ý•Þ? ï9%ºcu›¬M QZ‹œOÕL4Dô=uT…Z�7 ð .µ(c q!M¬ü’¦GO%Áµƒì°i …oò·“ òMÍæõû�Õ=ÖÖ „^ôÕ Š˜€çq õÅàØT6¥!%Ý ,�È`"M2åˆÏ%#½qΊ�qm'Eþä3°¼À)mÆÐgëÞø¿*5v›&|`>´+…WI +þ+]FÞúJ*}TBïÁ¸Ó©/]ñÝ�ԵÉ/uã:J(wê/msÄðÚ«764½ô9Â{ùÅ5]‘_/Ζ5µ˜Ñëgû7u<¬‡®‰)Ô4íH;*m|½6%˜´‡‰8•^î3¡z=�Qן-uö>e×qååx ?�¯ùÿ8[+â>MÚ¡YÝ|u´?ÕŸ~hÐ×ÓCU�…“29ÄÚF}¶&ùPGý�ÐCºq'ÄHåvÓÁg�¥ìJ=tð™W];J½4%}h¦¥+LUPÌþ þóN¥€ �èóýlQ=ð]b0UT~My²Pd|UÍ› ±Tå@V•sy“Q�ªV}ÊPtþEæV áË/j¡DX}¢ep[á£oY¥îÝ/™"ÓH\ÂY'w¡‰Þ] 1pd+¼Ö_ui8ÚØqª`]|™³²ûN`U|ý8³À›`í�^Íó|>`Ý…=6·Oxbeg°®ëW:b¥I˜ô¬28Eg%ê}M FØiUV tú?xj5 ÁhqïŸlÅ&É š8çTnmoY˜ã[Iøo= x:ß‹ƒo5”³b0ªrekÝä_Õ|tsõ;u:ƒú;s%ŸQá{;Âcu•+@©tßßv5”å{Vèuµ ~h�LVx•}}ªyÇÏv…&° ׌¯åz�6·(¢ÊbÐ{¥odH|5•så ° {áDØ}t¡¿ˆ™k¦~�‹�³œòFÛõ;7ÜM;�ï€u2ß ÈãP�5a�©¹>´‚­ >q!Ýxƒõ‘6ÊxèˬƒÅŸu�ʉ¨†Ý]©•àÓȆ-H¿ÝWE‰‹ˆe@�q>!�§ˆeÏ Î|hÊu [e¨­)‹M)á±ý ó†‹%½¥;‡è§�hÙAß’%¯ŽEŸ¸Õ„Ž öêù»k,‘µP··á’$®žD@•¥¤GÚøØ(–å~,]»Úà–å´¿·; ó˜ ñÌ÷‚¢lx™½#%�~瓌š=ÊÄU>œG™4þÚô�A™%@ßYC•&N�E­¿ ’B²™míÈÇ­ˆŸ] ÷—}ê° …¸›ljÇ©¡Å–¼TØ3�á¢õÓI, O£ý`ÎHòÒ^&¤{N¸±t³£ |DíÜœ]œÅ, eþ¯»²šíÄÜoÆ?ùsB?A�ó�™òíߨ¢ùµ^2UU«u¶6wá ¸¦‚µùÝ� Ypj‰ ô}[fŒá•ÏmÙñ Á×S&¦-É"?yΈ˜½L{,1–�bô@¯àvHRºlŸ öb`KU·[ –(°• ,Ç ö£¤]8t F4*Ç?ÛZ´ np“ëIÃ*WÞ&m–;ë>Y�ÕõX.ËJ5‚Cø>`Ìò€­A—¹V¸*>F2Kqªi.:ßÁÃ6x0/î«kÍiä݉(^U Ô ·òK4Ò”›Ø5FUø[Ü3F0Î�€C7Nœ7FžýälbR:nyŒ( E%;&/˜ÉÞ P*VrÊ=Ö{^¡&�>^·™�È™\Ÿ?åûÈH¾3?nsÎë9·E=†2ÖoƇçB&¾M¡é<©CÆ¥À罺¥Žã´§+µשE.õ›×÷ÛFv�ÅÚ’!RLHÎX³–MÁJÔ‰ÄèŸÚLæß ¶‘Py§Nf/põ�LÝ’QÖd®2ýX‚QnDü õÛJS6ôùŸ��TT–Øß�ä3CTά�ïQC‹VÎìzÞCÞˆbWv:Ðd–$öøTªMAŒ¯Þ´TÖÕ»g};ÑÔWÖëjœQoãV¹Ó ”è\Žüê8êl´l]î,3b¾Æ)^öbœuzOn-Wv7çêh- Ú[îUF,¥QÆ—W`Y.Ø�DzÕc.cO¦C8CcV¹¿W‚[f¢ÓÈ›¶,fÍ[ÿîpgf.HûÚ†¼g.˜¨uª7oèg¶øv��‚i~&@i飛gNõTJÓ*ɦlv4�0 É_mîM +ææˆ¸ivL6|ú6¡ÕoÖg4t.on2…¬±;qƽ)õèþ‘pÞð�'ò Ý dd(êòc{fÒä§ž°Á{8¸\G¦{fÉž�­²ö~~�—|eÛ¹"V[RS5~¾ñ1Œ¶uKa~þi±YÓ邎Êa (·‚ǽ�¬*é�î›ÈÁ.Lo`ƒÎi¹$TF‘¢€Vc¶Ùøé ‡¦&tÑDßÝrˆFòXà7ÁF#‰f/ŒYef@'†6æÃß0¢Ìõ‹>Œÿ M‹uŒžÙˆÉ¡”8‹^Ÿ„U„(ŽÎÌWò™±�¶Šáé ^U�öætÿ8^š|�6Eë/�dÇ’~=s"/$D‘.þ+(G¡¬ê�.á^ríÎ�^düûu5÷õ�v_všª>Ƙ66yŠ«™þÆG÷d›=¬œæ‘=³@„Ÿ®¯÷Ìèí >Ž2©w‡“¢^æ™ä§ KO¤n‰Ý«bž<¤æý©¢ ;ÍÆ¦6ï¨Vµiñ¥F'€9ºÓ¨neCvŠŽôJ©>ì@*%«¤¬þ 8hÛḴ¬F ö×óEé­þ¯+m²á;®~ ǰdʲöÊ[¦Ë+K²öŽôvj7ÏšµÞ % ¦aU(µ>å‹Ü]Kµ^ˆäVÒ0,¸·B@é<“z¸náw]I,ºÞýØܵ©½6×Zëý0ŒV¿®Ô¹¸¤ÓÀŽüR©ýJ ÁE 3&´Àœ%¥™–ÃÆî«þ�2^ÇÄölT “¨M¿vÆ—_]>Æfø«SZ�ÌöÀºe‘ÿ�ÍÆs 3–LýÐ.ÃéýLµ5Òæ&ðâ8L"Òò~c¦ñØýÖ†! ‡øŠ×®k›L6¯ÂØ®*8$ÿðž ÚVIÁµoŸÜ^Éàta%î†ß6ÛsøD§tÉá~œä5èÅ,‚á†ÂÑ‚¹È]õáV…íµy|3áän½î¢X×å s¶ç@ç6AQãõj£xèþú¶´@"èÞx *ÜÌ•é.+WNkø0Âë¦ -3*N¡ìn20Nî@Ü%ëÞz¢BHt …ëvóU؉ �ï~Ô)S;Q“zð.2š8#! ëöá¬`¶%AÒò¾ç€µh[V…óFb HüÐ`ò.Bgå9òIÅê:Éþy<öÖÿuZXY“F÷n‚×e,5÷†B@É㓲éé†ûÜ$¬‘‡€ú˜ØåmØÁgüŽ%b¿šByýÞJc.áPý.¨+ôo¾býfåÛË%vÙ�ÇÑè'kªtù÷=ÏËÛGôBˆE‚;8_•û¿OÚ\cI%ûiïõ¼ãû�ýgZ<«Wæä?2Õtã/KüsU™ �hJyNNPS ·Â^?¬a¸ 7£¦lÜZ ’ÇE×ÿiÓ‡'WGŠ7DO߃2Ó=W\WÊ&™c<¾‡Æ°Ê᪇ò4S`à×kˆºt•%�Âç(Þ£)ùgx�Äa)ðþ¦ð0hç1'óB«žiKw˜oÄã–\Ñoä�Ai«ÑÁ'#ŠöÃ:þ!‚e×¼0™$·ÆzU‰{‡%¶àŠÇ0Üé&?ŠqsÚ×&o7©Æq é'Ì©ó}÷yN)ßù:Ê,{%§Ô¹¿Ç©e&ïÌմК,_³U¯»*&2'ž“=}Í3?¼G6L@¸»6=ó¢6ƒÿ{7wp³bQ9˜J9ÿ=ìõÙßäÀ9ÏkM$œæU$í£þHnô!BIÙA-(l@âLï¬LÚ“Kf´N<ý$Ò SOa¸M(ìUá6ÔˆšBUw… ÓóUQWG ôÁ¢ˆI†W¶Rhø-ËZ_�…E[ˆ6¨['w쉪Oc[? êÌÄÓØ\þpü_YZ‹^ï­i„šDZ/ÊÙ)žÙ\†`-ƒ°ÁÞébwuŒö 9o¥eâ¡)ìIN¤fÿ±Ê‰=5ägÿR\$%¡Ýže·âB_5OthÄ$(yŽÑTi—¶éMã:ÉËkgb_1H=,%l·`'Pj¶¼[l—vÐï Wú‹m‡§9žóm¯i×ZÅBÚ—n3—á²�Åf_G™Gž^ò\r—rt½|N|sŸó¶ ÖI´r9@ \e8lsoç¢RÛD‘�sßCöì"Äßs·ÅÒêO �^xge@%«Êšx�@bËÖÍhw§ÙHaÛLŸ{ü6ŽJfÐc|'<¿3«ŽüP}¼CHÂWW¯~‡ Ö²ð~¿×ÒX¡hrm€ïâl�ê•w_m¾åe¸p~÷°{þÐþ�½ƒ'Åi7®ôX„=›µ5�„×Sbþšl»0g‡^Yl3 Ól‡�hÿtؚˆЭé ¸Û“|çñ¾‹Ýä{Bƒ÷-¯¥ýÞo'΃à—ÙƒˆŒ§M[!]<指3E)ðÈŒOòûgʲ³�·ßâ´ê)”Ä‹w‘ ¤8|l‘?j’¡ïîú/’7Åö™wf$‘¯�”�…d¹”_LZ–òÁjv’O�ØCOé–GÒn¸õÀï–¯Åû¿po5™?óI±Å’›‡þ' X¬’ 7bàÙ+.¡O«úY¿Î:¥¿6#\¿O§w÷‰ó¶S¨'W’3#%©_Ú“ç6Qvªÿ¸ZDÿª_°óUԋΗ¨g{�Ó¢ÊÐJ­_,„s›9¯¯Ö*%4t^@¯ß±lJ=u±×ܹc|žŸ�°wxãGk«˜°çe—ŸÜW´¯ršS·Ú°w¡Çö£á­º)Jœ…eý¼×¸‡#½tÅE×××ÁoŸÕq~8ÏÂ'‘ â¼éfÃ'ÊxŠD~¾ÁÄvUÒL¼ÁÇÅç™´Êáo»;Ès�pҔѲÊ�ðÐý‚Ù ÒW÷�pêú1�ÒgPF•¯H“ÔÇ @ò,³ÑTÖ¯ÉÔ G¹'ÅÖŸ_m�d†ÐØWõ@ÉV•%4×—Ó(Üâ58Ûmb–¶/UÝoârëïË2½Þçj§©¦÷!ÞóƒBè˜f«à?Õƒñª)Èá§«ÒožvÕzâ¡ÿ4Ÿj‚àGJ‰2âPQä?Þ#0OMMoã·,ƒq¥dÏæ‡süTûëûyç‡}ôlçMç7R9ÆNh ¨éG"{^DZàæwÜÇéë êg±¥ÀØtqìGkŽI¦Äàã—ùZ�¸s†é? Í¡HÜ‘°ð ïÑ{圉óïße‘é}Çó·ð|›ñeG;ö§¸ýß@Ië øMû4¢—É'ù߇Q‹è+øG:úqpµ@ü¯/ºãÐ EÉÿw¤Ð\ÿÿÿÿcutw 4 pF0sÿÿA^>=~ÿÿAÿGX0Z 8rVVÿ+e20vMZÿyhAYbxr>ÿÿÿS\ÿÿ6KÿWÿÿÿ?ÿÿUqb< npÿÿÿIPÿÿBÿÿ?:2uÿiÿÿ'F&8)A}&k0m!h%U]lSX+K@B8)P Wrv6'&($d1GeqDb^@C$zQw!G&=/K

0 j7FÿÿxÿÿCe Lf 7iF'ÿeÿ|/2%AnC]YU_}]/g (ÿ ÿÿÿÿ$ mK1A qÿÿÿCP}y 5,)Rÿÿÿÿÿÿnc.ZSr oJ"pb5 ÿÿG%w9TK}<1|`ÿÿÿÿ ÿ%ÿÿ)x]!N"y:lK-=ÿÿsÿÿÿGN^Y-zpyÿÿÿÿÿÿ8Gÿw8ÿÿÿN^ÿÿÿÿ=ÿgD(N$\&wS+[1J~ÿSKÿÿÿzKÿ}ÿÿÿ ÿÿHÿÿ1ALÿ Fgÿÿÿ?ÿÿÿÿ,{MThsÿÿÿ7"ÿÿÿÿÿÿÿY3w%#\mÿ):d\TJ!K.ÿÿÿ3\ÿ{NÿÿpK,ÿ=ÿ-ÿ9ABPÿcECw,WF4ÿÿÿÿÿÿ& ÿÿÿ WÿYhwÿÿ*ÿÿ7<ÿÿ;ASN9J:X:A 25fjt$O>y0H "GX` -zBDsnCe-N 4kte 8PzIÿSÿÿÿÿQÿÿXÿÿÿs\ ÿÿÿÿQÿkÿAÿÿÿÿÿIÿoW@ÿÿXÿÿÿ;vzOGÿCÿÿÿÿ<w)WÿBÿÿÿÿjÿÿÿZÿgÿÿÿÿ=Cqa2. ÿÿÿlH&8]vÿ ÿ <] t%sÿÿkÿÿÿ( ]ÿ-Iÿÿ'ÿÿÿÿÿÿH|8KS.&7* W8x5? Eÿ@ m i,Z8W%TQd^[6u0\JQÿÿjÿYÿOvÿt@,ÿ_KÿrÿÿÿÿÿÿÿEÿS&ÿÿY:ÿA=8Hÿhÿÿÿÿÿÿ&ÿvMÿ_TÿÿÿFÿ;YdM)Lp[iYb(]| nN +{yI"ÿÿ=MCxzHÿI'}ÿ\Mi^ ÿÿ(ÿÿÿwXo|%<;ÿÿ.ÿ@spDZeÿÿ=eÿÿ&7ÿ__ÿÿÿ\g!$XtaLÿÿÿ3ÿÿÿÿÿÿoÿÿa:Mÿ^ÿL9)=db9r("u2:idR"]8(0f7h u.|XJqM9h B&$5{qz7D$j>!/uW\7B^ADAÿJÿÿ3(jÿRXÿs{4ÿÿ|'ÿÿÿ]/nlÿÿÿi-ÿÿÿ\ÿ-IAAnÿy(ÿI;ÿ] orxcdÿÿ1g|YoBEÿÿÿG]Qf^ÿO7iaZÿÿÿ?d@ÿÿÿYriwKz ccr@a&zhÿ%gÿ=plOÿÿ6ÿÿÿ6ÿÿÿÿo BZZysÿkEpnrgÿÿÿrÿhM+#!ÿnbÿÿ.LVLwÿÿk8|POÿBÿÿhiÿfÿÿÿÿÿ&<(e2nÿ,8ÿL~/ 3Lÿuÿÿdÿ,X[2XPHo OÿT_@-pRlOuÿ[ÿÿ#?_fbo_a{ ^ig'"nV/o3} )xkDIpHB;U=a6F!,jC*tq9kSÿfO[F,*xiV) B {F1$; f}b<@b}f-N*Ec Ibm28>-|yp lSL10RI,e} ,uT~ 0 EZc}[#ÿÿlUvpOz,V#o5|@~ÿÿ<  L} k&`SMbÿYÿJÿÿ8ÿÿW zoH=h&]5 uNs N'i-$T;*GB@2ÿÿÿÿÿÿÿrK4 ^d\[:,FaFDO+p:u9/~;ÿ#ÿÿÿÿWÿLÿnT @! ÿÿ{ÿÿ-zÿEr!paÿÿ-ÿj)`U*K ÿÿÿÿÿ]ÿÿtÿx?ÿÿPMÿ`ÿpÿÿ9ÿrhv^ÿ(}+Q*MV@3:A nlÿ%mtg /.^-r %/Sÿc+ÿÿÿÿÿÿÿyDsNx!7FE2ÿ=pTT\*ÿÿÿÿÿO#ÿÿyYÿv&ÿ1#ÿReY-"-ÿÿ ÿÿ&ÿÿÿÿÿ\ÿ z[ÿBv8VlÿFÿÿPe.!t/hkKL:y Q{i 1l_!Pi=4M1,V_A-"yq I{J-@bÿyÿÿÿÿÿp}ÿÿÿÿ{+IyFBÿ\?K9cÿÿÿÿ%ÿbÿÿÿj<*Zÿÿ@ÿÿÿÿÿÿÿÿG ÿj6 iÿ1ÿ9AAiD~=nR5-fÿwÿÿ2>ÿ~ÿ} }ÿ]ÿÿhÿÿÿÿcutw 4 pF0sÿO/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/lib.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁO/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/lib.rsÁ å§^»£÷Ý,ßAMÕÖËOËO� #')#"$PQ3 PN#&0Q F BE=d  <   <&= 8;"6M "LK")@!/#?FLOJ5>DJQ5FLM!.>'!P7)PQ7&03>#-:!M!1  JKO8'QOUPIQL3IT%,-#8<8RS(N M,>&KQPOPO04IT#%4('78:*P!IG#)P:&%R42;P2RL,G9) 24 ¾-Í-|d­>"‚¬¯šÜ=¤b/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/waker/eventfd.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Áb/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/waker/eventfd.rsÁ Âë1ÜÑ �d‚[3*#ññc"".N76HEL/ EP0M<*O" #*¦·C2ýkõ�#k 0`VTX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/mod.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/mod.rsÁ >eAò’M™» ÈèÜÎ.9«-«-¶H;2 41 . ##!! $. %#!"# $# %.*)#&/ #"!#"#! #/f %#!"## $# $C* D-)'#%&'$(' E3 €M'H@&C L 5.H1+')(,+G%! "#!I " #!* œ©ü92´Ë!\°Ê¹ón]/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/sourcefd.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Á]/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/sourcefd.rsÁ #÷¿¸‰“\J3½ü¶¯lbàà "N7 /IFJO.MIQ>>2"D C H0&6.LGR1"W D Y F J4 (*@BF0’�º¯¸óÁôàZ'‚fX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/tcp.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/tcp.rsÁ òÚâ…ùR“H Éä8ØmÊ%Ê%‹ &""'N7/FM!,-*T:M U: OR4 \1;5 `OMN;GG5=:=E%G) Ù•m›IÎ >ÂDÔà\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/mod.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Á\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/mod.rsÁ CYg÷†æ’飺Uéê…–1–1³*(""$$H9GD18.8AMHAMF>@-3@3% E!QPOQC "? ;H2!Q/5  BFLGIJM; CVCCVC  () ,$I5K6-.8 <&2$0;#M1E6-*8�سåUÜÑ’ð„Jñ9aY/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/pipe.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁY/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/pipe.rsÁ ½ò09ë#õÊR!þsæ�…‘…‘î0 b4(! T4   P1/4 FJ6S--!  1M: /)O3QQV KQMQILNP%1%057JFTN&.6''$>!/3*MK+ '%"/6ML1A!#+6<.-#% A0))$+!/3MK#!59-! 1664!7;I=O+KQ*2 ! 4"/0G>#8V!O50 (2J= %8W!N50 ' 6 &" 8:F(;9NC,6;9NC,6 8#+M<19 #$. &)( #2 #7=I=O+KQ*2 ! 4"/0G>#8V!O50 (2J= %8W!N50 ' 6 &""8:F(>8TB>8TB 8&/N? 8&/N?$.#39 "*+("#2 fE,A( aE;0"! "C4  A¢ŸŠÌÊó=¥»sGS,e³S/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/mod.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁS/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/mod.rsÁ ‰æ|ˆ‚à•©Wë”æÈ}Š)··V'LG:?6OH>% 9I'(K1'ZPA2I8)J"&-  43$##&úç}„¨ôÃ=Pt énµ(ÏR/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/macros.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁR/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/macros.rsÁ Ö"@³-”e|0Yµ‰ÃÃb?6& (? ' - % '> " $; Q H_ P =T $ ".%-ÐÛÊ~t�éPñ^•€QËAU/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/io_source.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁU/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/io_source.rsÁ óµÀC,_¸û«ÖæfkrÓEÓE·!&N7"'0/LKONF"3 QQ+!')%, P+KQ*25 ()4N-#Q" 'Q"#3 4&!/J!7LF!8@&!/N!7:G!9 3&!/E!7GF!8D#?<A8###6 KA4G/ .C MQ I42- )= .M O=J4N( )= $C Ä¡2¹Ñ-ŒIj{I—å¬\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/tcp/listener.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Á\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/tcp/listener.rsÁ ~ÉI+4r-�]hõÛat¯©M©M¶"&TN7\a  4$834-.90.G!1'L?2'O$5$@5R!CJNNPQH9A(CK$QH90?QQD98 ?GQD9 +?OQ@ KJ,OA>>Q2O+KQ*2),! 4."/!930H= #8Xœ!N50 ' 6 &">6T@>6T@;7NA,4;7NA,4#8:F( ?<$.<#<-E48<#--<(<#-E#,#,2!+##1E@D'--0'1E+0*)[SHBJ _Y>oYf™¼[žù&I{ÄS/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/udp.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁS/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/udp.rsÁ xü‚a§ÙØ.HÿJ™©B·Õ·ÕŒ%JOO >0&TN7\a 4%QQ>n0":.$$`FFa9c!_OO1 C%";H/R8EE%H%$ %5Br! 4!/E*Z= \? =6DKOL;* FHQ.Is! 4!+-: 9 TBr! 4!+4-$> 8O!N-!4!?K4O#  Q=O8PS5HI! 4!?M4AU  Q7QQPS5HI! 4!?M4AU  Q7\-:2["PN5HI>2Q6PN5HI>2MQKQ&@!ELBr! 428!I43 9  >%E4!&Br! 428!I:  2JO@F-J4).:'IKOC@E-I4(-8&LQ@F-L4).:'?QBr! 4!?!" (  8 ?G Br! 4!?(  +?ONMK+1d;AONO1^;@4%*1e<B4%*1_<B10'?OQ@ O+KQ*2),! 4."/!9//G= "8W›!N50 ' 6 &"#8:F( ?<$.<#<-E48<#--<(<#-E#,#,2!+##1E@D'--0'1E+0*)[SHBJ  y—„#·øs„o~×ÉÎT/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/interest.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁT/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/interest.rsÁ  8ÿ‘RÓÜ\*�ж·±2±2Ê"NPM481A+7 5B\B\H! RH"RM<\%I P7. -]:T0I SBK,+CAC= ]?D?-'?-';(";("@-'*%.$A $& $& %#! $# (% & (% @ $(* 81/jÄy ‡¥|>«¿dP/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/poll.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁP/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/poll.rsÁ cøš+ LK;":Ò‘%õÚòóòó® * 5S/S29MPOGOILMNK+1687>DO0.&+30N!2@'_L 'BP M?FFOK$MOLOO63KOIKNHHOK"QFN/??9EGIN DO0&65@+O]OPQN-/'IOKMNOQNB2LSPPII72LHQNMNJKINIP3*CG""""""""""&""KLJQOPQHQM @XIWH,1AW  ( PP ^. 6 '  %8%% /"Q ;: EPG(+7%gA ;*"PPNQERPN-NQNON'GJJ@N5GG#9OM#HM2BHS!4782!1/7/1/ % R%64+"7P$+#FT# _= * #"A*@OPK5ODOOIJ JOO$P;Q#LMJ,PPNI5/??%HS!42!",%:9F+"76$2+$(/6#/D# c #P 0CJNQPQP"Q:JKHS!4*!"!:9F@""P7$" 5%;<'3+?a%9 60>% ]MPL'B'&-!!& M: ],3,( &Q_,3,( &Q<&V!$ (#4!,!!$+"0;C0<-<31:CAH41:.BFD=0<'6'U5A.   "! 8&;"A/7æ²´6¿Ë¨,G×êˆsè«q/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/selector/stateless_io_source.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Áq/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/selector/stateless_io_source.rsÁ é២„k&ú%~ï«X� � 2M (!+G (E2;2=\2+ã*%Ú*äâ ×…Þ’5Q/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/token.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁQ/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/token.rsÁ #éï�¿š¦þY//á�[¥(¥(Œ9F941AENF,DO034.#K#O)"&<#!CLK'!O&,7 28 '"J$257F3"@F8Cc4?UO'L0P'L8'I5UM'L D#•\§cL°!³…†ÂíŠèQ/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/waker.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁQ/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/waker.rsÁ Ô±ÑÞWÄÄòù¨Mp9ðð`# 2JJ?, OOJHKO(LD2.9<+)!/DH ),390G#P!5(1 I!#Q;#+‘÷QæŠÀÛí\ZÌŒ=ðW/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/event.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁW/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/event.rsÁ ÀÓäŠ[0b^/ ŠtðÀCÀCæL@4"$ ##'?GGB‘Q0(-?(-<PN7PA,,,N@DM%*BNDNOBMI(A,,,7,@DM+0CJOI(MJ(A,,,06,@DM,1?PA,,,,@DM(-:QA,,,0D@DM#(:P:#(IIDR? KPL/+?'-(44.:<4*+53K9D ³•(5»ìÍQÛ3ŠjÓ? X/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/events.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/events.rsÁ ž+-Ùf ˜b9Þ%Ú - -æ&LNK+44".902!".?!:A#-.902!%?!:J 2- 69 C 2- &= 2$ %52=!4!!6%)C%>  % ?N2=!4!!6%)C$ )7'+!/- 4+?. cânä;¡:û«™õ 3�X/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/source.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/source.rsÁ §6…c‘p¡·?ïÖ½ÿ#ÿ#‹( >@JO '*#PKMP0/ POPL:>;DO*W 8= Y :? J:- <PP"H?9EPL>9EHLE68F&NBÐõ?ìB è ¹{±ö\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/datagram.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Á\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/datagram.rsÁ žÓ“;>¢ÐÞûå¿• mM¨D¨D�T, 4(@G5'NIKJNONA* 6K)G!J3B5@>11 ,9 3@8'JQ7'6>2;9V;7MK9:24@ FIK/>!O+KQ*2(V! 4"$6/F>#8X!N50 (/G= #8X!N50 ' 6 &"&8:F(#?"$. #"0E7;0.[[J&30(&#/ø;˜î|ð¼;t›Vì ;\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/listener.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Á\/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/listener.rsÁ ¼\Ÿ/â‹ÆÙŒ*VV°Å ÆÆ‰T, 4.(KG5'NIKJNONC, <MC5;9 4@ &8:F(#?"$. #"0E7;0.[[J&30(&#/I?þJm ÍÝú‰ŠZÞÍÎZ/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/stream.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁZ/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/stream.rsÁ #+««9ì@�’ùö½P·©F©Fš7T, 4'&0KOH5(3KOJJFLOLIM=* 6E<!O+KQ*2(V! 4""60G>$8Y!N50 (0H= $8Y!N50 ' 6 &">6T@>6T@;7NA,4 ;7NA,4$8:F(!? $.# .E59,*[YF$/.($#-ÑŠ�Ýc%w�±y÷„a^ÃU/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/mod.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁU/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/event/mod.rsÁ ¼·±òáxh±g ÑÑ )# &P“Û;$j5â~@#ŠT3X/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/net.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/net.rsÁ ):?·&Úxù­õÕ1ØàL‰@‰@Ü Le-.$&e!NM698<? +94 )G U- VU- ZUYS #;2AU&UZ+@2@/^",#+"'-+)(')*+(,+*(*'+0@M &4B0,100'-+)(')*+(,+*('*+1J"AN S EH%,0]TI4< _V=51$$ 6|¢Dw…­{èK º€ud Za/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/datagram.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Áa/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/datagram.rsÁ 8ãÌ1Uóš Ùßømƒ¬šš ','&Q6W<;;6M",&�zŸj2®é �}a/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/listener.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Áa/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/listener.rsÁ ÖqÁ_ÃÍmØ¼Ý¦à‡‡”•(•(˜'",'5Q<@6W,;Š ! #$]HAMFF GG9 >"L G 8"HFACC;="  C4'BPC#<_J#(R€4›) Øź�ŠJ_Ûæ2_/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/stream.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3Á_/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/sys/unix/uds/stream.rsÁ @ÿ€£¥4U¤ ÕuÓ�Bµ»» ,'&R<>6W5L!I#½–ï¨MV ]Ç3Y4—Ì/S/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/mod.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁS/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/mod.rsÁ f¶Õeü÷´Sœã«æ 8C� � 'JOO > PRP;QQQ?/PR M? -8 8 AMzA!ßxÕ¹®¯~W/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/tcp/mod.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁW/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/tcp/mod.rsÁ @’Á¯°Öà—šëéþv­laa% Þ·y•©�ï"»;Å¡W/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/mod.rsÁD/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3ÁW/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/mio-1.2.3/src/net/uds/mod.rsÁ ’äæWøñhj%‹Þ‰˜˜&& éŸTœÆ�Ñ7„À4ëáÚêyQÃSrUaW"YæZB\6^áaecód]gÚiøl5q0s‰wÎyj{!}«~Ȁ炫„ù†È‹VŒkŽÎ�±‘“e”ž•x86_64-unknown-linux-gnuÁ³ý€3y~V¾ì�€gCmioÁ-52e4346b43248509Ák©`m›�Y“®<· f• Öò 'ÕÕ׬ ×àb££¯¯»§*Ÿ›)ËË÷¼÷¦¼ü¦Ÿì,ö›)¬ Î,÷¬ ¬ å¬ „%„%÷÷å÷å÷å÷Ó,÷åöåìÊËÞŸ–ž¾ ˼ –Ë–ŸÝžž¼ ¼ ÷Ó,í£Çöéâ»»±¬ ±Ø»÷±ÕåÿŸŸÝ›)Þš öóâ¥üÍðCŒç Œ¤ ¤ "–Ûfrust-end-file