rust ø#rustc 1.98.1 (48a229cea 2026-09-01)ÁûÊÆÍRLñ.åSÛAúwjL-df1bddb45adbe94bÁ±ò‰<å%Z‰>¸64‡ËV`-2d2ab9fb0fe1def5ÁЉƒ!Ó‰|× ¿LÆ"Ócore_hint_black_boxÁü”"û    unwrap_u8Á”´·¸´¹º´½¾!´!Æ ¿$� &”ConstantTimeEqÁ(ct_eqÁ(ct_neÁ +�+¼ .¼generate_integer_equalÁ 1¼ConditionallySelectableÁ3conditional_selectÁ3conditional_assignÁ3conditional_swapÁ to_signed_intÁ#generate_integer_conditional_selectÁ 9·;·ConditionallyNegatableÁ=conditional_negateÁ?�?'aÁ?ñC�C”F�F˜ F¦FöFøFunwrap_or_elseÁL‚Fis_someÁFis_noneÁFƒ P‘P‚F½S‘S‚For_elseÁV‚F into_optionÁY�Y·\�\¼ConstantTimeGreaterÁ_ct_gtÁ!generate_unsigned_integer_greaterÁb¥ConstantTimeLessÁdct_ltÁjûl�l˜ lgetÁChoiceÁp póuŽwñy¼ {¼!}¼"¼#�¼$ƒ¼%…¼&‡¼'‰¼(‹¼)�·�Ð�é*‘·‘Бé+•·•Еé,™·™Ð™é-�·�Ð�é.¡·¡Ð¡é/¥·¥Ð¥é0©·©Ð©éCtOptionÁ­�­�­ú1±�±Ž2´�3¶�¶ñ4¹¥5»¥6½¥7¿¥BlackBoxÁÁ Á�Áó8Å�ÅŽ9È�:Ê�Êñv8x8x8x8888 8)8)8*8*8-8-8/8/8z8z8|8|8~8~8€8€8‚8‚8„8„8†8†8ˆ8ˆ8Š8Š8Œ8Œ82828484858586868Ž8Ž8�8�8�8�8’8’8“8“8”8”8–8–8—8—8˜8˜8š8š8›8›8œ8œ8ž8ž8Ÿ8Ÿ8 8 8¢8¢8£8£8¤8¤8¦8¦8§8§8¨8¨8ª8ª8«8«8¬8¬8:8:8<8<8>8B8³8¸8¸8¸8I8N8O8[8[8^8^8`8`8º8º8¼8¼8¾8¾8À8À8c8c8e8e8k8k8Ç8Ì8Ì8Ì8(3=_dù ppq¾ ró „˜V_wˆ………Ÿg…¬…«Ó……“ò……ËÔ……Êò……ëÕ……�ó……ˆ"…¬…( �(…(Ä((((((((((�²‚²ƒ²LessÁ„²…²†²‡²ˆ²‰²GreaterÁв%ÑÓ¡yû3Ä3ì3õ3þ3‡3�3™3¢3½3…=Î…­­È ¯�°ú?ø‹ÖžëTÎù ŠŸgŠ¬Å™Ç™È™­É™Ê™àË™óG*¤�R{9 Ί3Š(Š_Ä_õ_‡_™_½dÄdõd‡d™d½…ÁÁÂÓ Äó 6{U£ƒ­I Îù žŸgžsp´­ÈÁtpup±­ÅÁwp¶­ÊÁ&pCÅ™pppppp!p+ .py{}�ƒ…‡‰‹1�²\­�‘•™�¡¥©9�²;pY­?¹»½¿b�²fghij�²ù ¡ˆ…Ÿg¬«Ó“òËÔÊòëÕ�óˆ"(3 C=:_d(¾)Ã)v#(…4 …>GQß) Ä&2 Ÿg(Å) çg %x2É) Ê)x_ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwĤĤŤErrorÁ Ñâó:½ÖàMçš î €g€gŠ‚gê ûcƒgbufÁûcØ«q¢1È¡4�!Š  ĘÓ# \œjuÑ#�!Ïœ!‡4‘-Ä�-üé,4Ä„-š ,ú, ,D¡3Äl¡3Ä ­3´3ü¹2{$Ô2…4Á2ÄksourceÁ9 ¸[ɇT] „®44¯4Ä,¸4Ä8  ½4„ŠE ï $Ä,”E*ăE p šE Ä4Ë4üý3Ný¥ç0”ÆÄ…4¿4üûB¦'mÂç”…4�4…$‡4…�4ÄÄÄÄØ3rhsÁ:•�&É ‡T]�' \»5,»5ÄÃ5ħ® irX�'d�d pcb Å5œ³5Í5ü€5MŒã‘ÆÄ…ŒŒ'‰Æ"¨5 …L‘5…œ5…/Ä¥ÄXÄ?Ä.<ä'@Ÿ�&Ž�'˜ „Å64Æ6Ä,Ï6Ä8  Ô6ùè�'ôô pó Û6â6ü•6MòÆÄ…4Ö6í'ê…4´6…$ž6…¤6ÄÄÄòĽ3ä'7†�&ã�'í\Ð7,Ð7ÄØ7ÄŽ• IR8�'DmD pCP Ú7œÈ7â7ü–7LzãqÆÄ…l'iÆ"½7¨+L¦7…±7…,ĉÄ5Ä<Ä+<ä'@œ�&k�'u „Ü84Ý8Ä,æ8Ä8  ë8ÖßÅ�'ÑúÑ pÐ ò8ù8ü«8NÏÆÄ…4í8Ê'Ç…4Ë8…$µ8…»8ÄÄÄòÄš3ä'7†�&À�'Ê\é9,é9Äñ9ÄŽ• &/ �'!J! p P ó9œá9û9 ü®9MzãNÆÄ…I'FÆ"Ö9¨+L¿9…Ê9…,ĉÄÄ<Ä+<ä'@œ�&H�'R Œâ:Lé:4ë:Ä  ñ:< ƒ Ä ò:ºÃ© �'µÞµ p´ ù:€;#üÁ:?³ÆÄ…4ô:®'«…4Ñ:…$È:ÄÄÄÄv +q�&��'™ 4½BõäÓ‹¤  ëÎþÓ‹) ÃBÌB$ü“@¹ýõÏ•‹ŽÎü¤B ý¬*ñƒÇ9µî$ƒù¶ƒâ[Á°ù¶êä4ý´œM•ãÎ}†Ó‹Î ¶@Î,©@ ÎíinputÁ©ýÞœ!•¨Î« ´°éµˆ%ƒÂ:ä í Ó �'ß  ß pÞ ¡E'² …4‘CÄ,ƒCÄY ’;å �&t �'~ ŒÜM y )$ÜM,çMdáM fedkÄ„e  èÄe '  �' B   p d ìMóM*ü©MJs#”ÛM- ÆÄ…z( '% …4ÊM œ>,²MÄ@,¹M…ZÄŽÄŽÄŽÄ <î @¡—>¤�&0 �': °TT¶TŒ¦UT­U'’ › �'Ä–  ¿  æUµWÄ\ÒW}�žiå¢Å÷¢mïVb  ïVb ÅåVb  ®®«°¿ ”3¯f*²Û�Í üVb ½—™b m—™b ý¥$b   Í(  Î ­™b ý�™"b  ®®«°¿ ”3¯f*²Û�Î ®™b  •¢M‡¢ ªÎ  íW à<ÒW   ø<ÂWc# ) /  �Š¥ õJ²Œ²ŒZipÁµŒ—ÍJ¶Œ˜ÍJ·Œ÷ÍJ¸Œ¶ÍJÉ by­]ò�p�pIterÁ pí óo¡p end_or_lenÁóo¢p_markerÁóoÛê2ÝЫÎÖFÖFÖF %˜¥ è-ÇW à ÎùGùGËW à÷GùGÄ‚Xd‚X  )΂X‹XL…X<¤X    !#!�'#)£"ÄìýW  ™X šXqw} ƒ 4½X` p_å ¼X5 å¢Ð‹ …<ý„G¢ Ͳ¢ e´¢ { •Dý羌 È¢ B …< Ê¢ i ýÚ.¢  �p΄!„!…! PhantomDataÁo$z�é -ùG —¢Ã\âW ÒÏÌÉ Ç Å ¨C• “!�"�" …D°!"•D‡"„ !´DR!OLªÎ¨ …<¤ � •Dš•Ô…<“ù‘ �pÎéK\äÒW ÞQÖFÖFI }„ÞW    '! p#<!#Ì -#üüSÁü¬T‘ü©W”ls�'|ÍUýÝ�GiìwÎ4×Wýˆ�¢­pÎýÂÖ¢ýá·¢ý㯢 ýþU‡bÅÍ:ý‚˜µbÔÍÎ5�¢ýÖ|ûb ÏÍEœ™b ýàÏ`‹ Ûν“¢ýäÝÙ‹ßÎãN ÏÎE¸¢ý–´ø Œ ŽÎEÁ¢ ìwÎ4çW­pÎþøòÅÍ'íÔÍÎçãÏÍÞÚÛÎÔÐßάÏÎÊÆŽÎ¿ý’O,¡–PûEyý×L¥åJÖFÖF’fÆÄ…4±X� 'Ž È\�X$…4›T Í,…TþT$ŒT«Ø É «É Ä,­WûE-ÖFb ÖF˜ûE&řǙș­É™Ê™àË™óG*¤�R{9 ÷Gs ûE~´oùGYùG8Ä…Äø´Dð ¨Cî …<Uç¢ •D•D Í •D± …D¯ ´D5 ¨C3 …<E•D]•D[†WH •Dð …Dî Äø!h_rhsÁq¶N ®k�|  aiÁUbiÁ:;Ó ªÎ⠪Π³wα ïX¡ –OúÅHY�&ü�'øïX]Ì¢ïX õEà �&ü�'ø,¨YÄ$°Y  Äú  ø�'ø š ´Y lkr‡ ÄLøø�'ø' p<K»Y/üôXG6t§YfÆÄ…=�'ކ#|¦YfÆÄ…��'Ž …4•Yš ,ýXš „YÄsĸĦĦĸÄÓÄÂLä'Pâ�&ü�'ø�&ü�'ø„])Y– � 1Y� �   aXÔT¹  Y£ �  »^°Å^€Ê^ùQ¡ä#^Ä0 Ú^øÅ^*�î^ÈÒ_ˆÓ_ Äø ø�' ø' p < ñ_ÿ_ €`z ø�\ñø€]€ø·^ÉùY½ u�°Ö`Ž]ùX±T1¹÷ÕáYˆ �ùQ²Ÿ`^—¡pÌ^ùQàãn^�¡‘QöŸ^fÆÄ…0ì_�'Ž …0°\Ó#(˜\Ó#(Ÿ\Ä;ÄåÄäÄãÄ„ÄZÄJÄøVî Y®—¯EA�&ü�'øøæ[ö (Ôa 'Ä5Ûaˆéaøæ[Ž0ëa !ÄóaAøÓa( )ijnÀãaúaˆb ‰b|øÔ`µ …0õ` ì(Ý`¼e(ä`Ó#*Ä2ì)Ó#øÄöìòCî FwÔdà„])d– �   1d� �   L d£ �   »^°Å^€Ê^ùe¡ä#^õ1 Ú^øÅ^*�î^ÈÒ_ˆÓ_  õ+Äê_ø ø�' ø' p < ñ_ÿ_ €`~ ø�\ñø€]€ø·^Éùd½ u�¹Ö`Ž]gúÕádˆ �ùe²Ÿ`^΢pÌ^ùeàãn^Ç¢‘eöŸ^fÆÄ…0ì_�'Ž …0°\ õ(˜\êj(Ÿ\õTõõõÄ õŸõ{õkÄø^î a®¸¯jG�&ü�'øøæ[ö (Ôa 'õ5Ûaˆéaøæ[Ž0ëa !õóaAøÓa( )õ³nÀãaúaˆb ‰b€øÔ`µ …0õ` þ(Ý`ªn(ä`êj+õ3þ*êjùõ÷þóCî FwÁmá„])n– �   1n� �   º n£ �   »^°Å^€Ê^ùo¡ä#^‡3 Ú^øÅ^*�î^ÈÒ_ˆÓ_  ‡-Äê_ø ø�' ø' p < ñ_ÿ_ €`‚ ø�\ñø€]€ø·^Éùn½ u�ÂÖ`Ž]ÚýÕánˆ �ùo²Ÿ`^„¤pÌ^ùoàãn^ý£‘oöŸ^fÆÄ…0ì_�'Ž …0°\ ‡(˜\Ýs(Ÿ\‡Y‡‡‡Ä£‡¢‡€‡pÄø^î a®½¯oG�&ü�'øøæ[ö (Ôa '‡5Ûaˆéaøæ[Ž0ëa !‡óaAøÓa( )‡³nÀãaúaˆb ‰b„øÔ`µ …0õ` �(Ý`�w(ä`Ýs+‡3�*Ýsù‡÷�óCî Fw´vá„])x– �   1x� �   -  x£ �   »^°Å^€Ê^ùy¡ä#^™7 Ú^øÅ^*?�î^ÈÒ_ˆÓ_  ™1Äê_ø ø�' ø' p < ñ_ÿ_ €`† ø�\ñø€]€ø·^Éùx½ u�ËÖ`Ž]U €Öáxˆ �ùy²Ÿ`^º¥pÌ^ùyàãn^³¥‘yöŸ^fÆÄ…0ì_�'Ž …0°\ ™(˜\Ø|(Ÿ\™a™™™ ħ™¦™ˆ™xÄø^î a®Å¯wG�&ü�'øøæ[ö (Ôa '™5Ûaˆéaøæ[Ž0ëa !™óaAøÓa( )™³nÀãaúaˆb ‰bˆøÔ`µ …0õ` ¢(Ý`˜€(ä`Ø|,™4¢+Ø|ú™ø¢ôDî Fx¯â„])‚– �   1‚� �   « ‚£ �   »^°Å^€Ê^ùƒ¡ä#^«8 Ú^øÅ^*?«î^ÈÒ_ˆÓ_  «1Äê_ø  ø �' ø' p <  ñ_ÿ_ €`Š ø�\ñø€]€ø·^Éù‚½ u�§Ö`Ž]ÚôÕႈ �ùƒ²Ÿ`^¤¨pÌ^ùƒàãn^�¨‘ƒöŸ^ýøj•٫ü dfÆÄ…0ì_�'Ž …0°\ «(˜\ú…(Ÿ\«ˆ«3«2«1ÄÆ«Å«¯«žÄø _î a®ì¯›fý˜p •§««�&ü�'øøæ[ö (Ôa '«5Ûaˆéaøæ[Ž0ëa !«óaAøÓa( )«³nÀãaúaˆb ‰bŒøÔ`µ …0õ` ´(Ý`ω(ä`ú…-«5´,ú…ü«ú´öFî Hzæˆå,€flÿe ‹f4•ft”f ¡fíôûÄ Í Ë Ò Äê  ªÔdU ¤¢  § ®©f2üÍe\§|´�f …4îe ½,ÖeçŒ,Ýe½9ìA½ ì(Ó#ôÄüÓ#ºÄ¹Uî X•Ôd�ü°s-$És  4œ>-,Ïs4ÖsL Üsü¨s5äs5üßr…Æ"�s œ>LõrÄ@,€s…4Žsœ>·Ä@µ+î /choiceÁ9p™Žû ¦y°yÑyü¼y  5œ> ¼y74Õyô¾y Ûyûyüæy °� æy24ÿyôèy †z Œz�z6üØxµü¢yk Æ"—y„� ìx„� úx…4ˆyœ>Æ"îÄ@ Æ"©Ä@Æ—D˜GÍŽLªd—°�I°�ü ïøö+ø÷*�ø£Ä$ì €Føö1Ħ€€½€8Å€ !      N  Ì€ D Ú€Û€ŽøŸ~¼øëpÈXÿK°ÖÆC÷Õ>ùYás�ªÖ ¹€n÷ÕÙY«� Ä Ü~Ó#µ~Ó#¿~…0É~ľì½ì»Ä¹ÄaÄ_Ä~Än—a˜dÍŽhmaskÁ- Ì‚øÓ‚+øÔ‚*�Õ‚£Ä&ìý‚IøÓ‚1ăƒ¸Ÿƒ€¦ƒ (§ƒ   0¯ƒ   8    µƒ   a   ø–ƒ  ;ăŃ�øÿ€ÆøÈ‚}ÈXÜ‚ Æ"½� ÄH•�Ó#( �…0®�Ä�ì�ìŠÄ‡Ä-Ä+Ä)Äcî eÍŽh¤–úÐ ·…ø¾…+ø¿…*�À…£Ä&ìè…Iø¾…1Äî……†H�† ‘†   –†   8    ˜†   €‰†  # 8«† 8Ć Ù† Ú†�øéƒñø³…§ø�†YÈXÇ… Æ"¨„«šýƒ«š‹„…0™„IJì°ì­ÄªÄPÄNÄLÄ=—e˜fÍŽi¤–ª¨èšŽ‹£Ä­ìŠÍžmj)’– � 1’� �   „! ’£ � à v·! �tq’njÈgù’½ u�æÖ1¯ ‰Öá’ˆ �ù’ás�àÖrÝ ‰ÖÙ’«� ìp¼en¼el…jì&ìÄìÁì¿ìVìK—Á˜Å͎ʤ–�}`RN£ÄqìL’`.+( / & - \   % , „ C% \"“È Æ" ì ¼e …ì“ì†Äƒì)ì'ì%ì_î bÍŽf¤–ùÏòî£Äìì2ÎËÈ Ï Æ Í ü   Å Ì Ã ãÁ ¾ »Â¹”¶±¬È¨ Æ"¥¸¦¢¸¦Ÿ…œìKì>Ä;ìáìßìÝìΗö˜øÍŽü¤–²ª<| ïøö+ø÷*�ø£Ä$þ €Føö.õ£€€½€8Å€ # ú" # C'  ÷" N  Ì€ s' Ú€Û€–øŸ~¼øëpÈXÿ"¹ÖÆr&úÕ "ùdás�³Ö ¹€�&úÕÙd«� õ Ü~êjµ~êj¿~…0É~õ¾þ½þ»Ä¹õaõ_õa$õQ$—a˜dÍŽh¤–* Ì‚øÓ‚+øÔ‚*�Õ‚£Ä&þý‚IøÓ‚.õ€ƒ¸Ÿƒ€¦ƒ (§ƒ   0¯ƒ   8    µƒ   a   ø–ƒ  ;ăŃ—øÿ€ÆøÈ‚}ÈXÜ‚ Æ"½� õH•�êj( �…0®�õ�þ�þŠÄ‡õ-õ+õ)õcî eÍŽh¤–úÐ ·…ø¾…+ø¿…*�À…£Ä&þè…Iø¾….õë……†H�† ‘†   –†   8    ˜†   €‰†  # 8«† 8Ć Ù† Ú†˜øéƒñø³…§ø�†YÈXÇ… Æ"¨„ײýƒײ‹„…0™„õ²þ°þ­ÄªõPõNõLõ=—e˜fÍŽi¤–ª¨è—‹ˆ£Äªþ‡Ê›jg)—– � 1—� �   °- —£ � À sã- ŠqnškgÈdù—½ u�ïÖ.Û,ŒÖá—ˆ �ù—ás�éÖo -ŒÖÙ—«� þmªnkªni…gþ#þÄþ¾þ¼þVþK—¾˜Â͎Ǥ–Šz`RN£ÄqþL’`.+( / & - \   % , „ C% \"›È Æ" þ ªn …þ“þ†Äƒþ)þ'þ%þ_î bÍŽf¤–ùÏòî£Äþì2ÎËÈ Ï Æ Í ü   Å Ì Ã ãÁ ¾ »Â¹œ¶±¬È¨ Æ"¥ä¾¢ä¾Ÿ…œþKþ>Ä;þáþßþÝþΗö˜øÍŽü¤–²ª<| !ïø!ö+ø!÷*�!ø£Ä$�! €Fø!ö.‡!£€€!½€8!Å€ Â* ¸* ¿* �.  µ* N  !Ì€ �. !Ú€!Û€žø!Ÿ~¼ø!ëpÈX!ÿÌ)ÂÖÆ 0ýÕÄ)ùnás�¼Ö !¹€ 0ýÕÙn«� ‡ !Ü~Ýs!µ~Ýs!¿~…0!É~‡¾�½�»Ä¹‡a‡_‡,‡,—a˜dÍŽh¤–* !Ì‚ø!Ó‚+ø!Ô‚*�!Õ‚£Ä&�!ý‚Iø!Ó‚.‡!€ƒ¸!Ÿƒ€!¦ƒ (!§ƒ   0!¯ƒ   8    !µƒ   a   ø!–ƒ  ;!ă!ŃŸø!ÿ€Æø!È‚}ÈX!Ü‚ Æ"!½� ‡H!•�Ýs(! �…0!®�‡����ŠÄ‡‡-‡+‡)‡cî eÍŽh¤–úÐ !·…ø!¾…+ø!¿…*�!À…£Ä&�!è…Iø!¾….‡!ë…!…†H!�† !‘†   !–†   8    !˜†   €!‰†  # 8!«† 8!Ć !Ù† !Ú† ø!éƒñø!³…§ø!�†YÈX!Ç… Æ"!¨„ƒË!ýƒƒË!‹„…0!™„‡²�°�­Äª‡P‡N‡L‡=—e˜fÍŽi¤–ª¨è—‹ˆ£Äª�‡Ê›jg)œ– � 1œ� �   �. œ£ � À s�. Šqn¢kgÈdùœ½ u�øÖ. 0�Öᜈ �ùœás�òÖo 0�ÖÙœ«� �m�wk�wi…g�#�Ä�¾�¼�V�K—¾˜Â͎Ǥ–Šz`RN£Äq�L’`.+( / & - \   % , „ C% \"£È Æ" � �w …�“�†Äƒ�)�'�%�_î bÍŽf¤–ùÏòî£Ä�ì2ÎËÈ Ï Æ Í ü   Å Ì Ã ãÁ ¾ »Â¹¤¶±¬È¨ Æ"¥�×¢�ן…œ�K�>Ä;�á�ß�Ý�Ηö˜øÍŽü¤–²ª<| (ïø(ö+ø(÷*�(ø£Ä$¢( €Fø(ö.™(£€€(½€8(Å€ {2 q2 x2 �.  n2 N  (Ì€ �. (Ú€(Û€¦ø(Ÿ~¼ø(ëpÈX(ÿ}1ËÖÆ 0€Öu1ùxás�ÅÖ (¹€ 0€ÖÙx«� ™ (Ü~Ø|(µ~Ø|(¿~…0(É~™¾¢½¢»Ä¹™a™_™Ø3™È3—a˜dÍŽh¤–* (Ì‚ø(Ó‚+ø(Ô‚*�(Õ‚£Ä&¢(ý‚Iø(Ó‚.™(€ƒ¸(Ÿƒ€(¦ƒ ((§ƒ   0(¯ƒ   8    (µƒ   a   ø(–ƒ  ;(ă(ѧø(ÿ€Æø(È‚}ÈX(Ü‚ Æ"(½� ™H(•�Ø|(( �…0(®�™�¢�¢ŠÄ‡™-™+™)™cî eÍŽh¤–úÐ (·…ø(¾…+ø(¿…*�(À…£Ä&¢(è…Iø(¾….™(ë…(…†H(�† (‘†   (–†   8    (˜†   €(‰†  # 8(«† 8(Ć (Ù† (Ú†¨ø(éƒñø(³…§ø(�†YÈX(Ç… Æ"(¨„¯ã(ýƒ¯ã(‹„…0(™„™²¢°¢­Äª™P™N™L™=—e˜fÍŽi¤–ª¨è—‹ˆ£Äª¢‡Ê›jg)¡– � 1¡� �   �. ¡£ � À s�. ŠqnªkgÈdù¡½ u��×. 0’Öᡈ �ù¡ás�ûÖo 0’ÖÙ¡«� ¢m˜€l˜€k…i¢%¢Ä¢À¢¾¢X¢M—À˜Ä͎ɤ–Œ|bTP£Äs¢N”b0-* 1 ( / ^   ' . † E' ^$!«È Æ" ¢˜€ … ¢–¢‰Ä†¢,¢*¢(¢bî eÍŽi¤–üÒõñ£Ä¢ï5ÑÎË Ò É Ð ÿ   È Ï Æ æÄ Á ¾Å¼¬¹´¯È« Æ"¨¾ï¥¾ï¢…Ÿ¢N¢AÄ>¢ä¢â¢à¢Ñ—ù˜ûÍŽÿ¤–µª?!‚Œ D‚Œ ‰ŒœŒ DœŒ £Œ²Œ4׌ Ä01 $1 +1 ìD1  1 ä0 á0�. 1  µ0�.   Ì0 ³0 ÝŒüŽŽ, ”�Ž $�Ž !  ½ü�Ž-  ÁŽ   ÂŽ: ü®‹”üú‹Èü”Œ®ü®Œ”91’ü¸Œ&A1È?1Ù*æÖ2 0‰ÖÔ*Ï*àÖ;1 0 ‰ÖÊ* ½$ë‹çŒ Ä‹çŒ ΋…4Ø‹½?ìG½#ì+ìæöa ìaì03ì%3ìÃ2ìÁ2Ä9—…˜‡ÍŽ‹— þ‹˜ ˜ŒretÁ”„üÕ�*$ì� Ä$ò� Ä@ 4ÄL74ø�küÎ�2 p ÿ� …� †�<ü‚�„…$¿�š ˜�š ¢�…4¬�ÄêÓ#çÓ#Ô—6˜9ÍŽ=uƒû1D£›d²›$³›l±› Ä!ùG5" ¾›Là› üÈ›* 5Î$È›94ë›üÍ›% ò› ø›ù›Bü´šÅüŸ›ZÆ"äš ÎLÊš…4ÕšÎùGÆ"«ùGÉ4ÍŽ8self_negÁI‡§ý8ïýø@/Ö¤ Î# †Î:Bx/ä¤b…(/¤¤ ­Î/¨¤ /©¤³IbvtbŠi ŠsÎÝùGä…¤‘›‘€Î� @1Ö¤ Î!�!x1ä¤ …'3�!(1±¤ Ûg±!'±!ª¯±!‹�S1µ¤ 1¶¤¸�÷!š³�¢‚#©�!&ùG.�! š š ÝœêôùG�!u·„�!M�ƒ„ä©d‰¹…Äüä©# †ªd£ª ÎÔ–ª řΠ¯ª áªS$Ϊ Å™Î+ÎâªEü­©µü߸<NÎLë©È\õ©àLÍ©Š4µ©ÎØÄö$fоÎÃüò­L ­ÎÄ®Hü³­‘Š\Ü­Î,¾­…<È­�úHÄÀ°£…Ä12Þ]92æ]  IÎÓ#É2¬] 2²]Tò°Î‚±#ù2Ë<]ñ3è]>ã°ñ>è] >Þ°  ùÙæÇa ùÙ™"a !¤!  ®®«°¿ ”3¯f*²Û�Æ"ùÙšìa Ù´a�Ã!a ¥g±! ±! €g€gŠ‚gê ûcƒg£"ûcØ«q¢1È¡÷!Bÿ¹ÙÛa ÙŠ €g€gŠ‚gê ûcƒg£"ûcØ«q¢1È¡÷!ÿ Ù…ae —¤„!„!…!÷Jo$z�é - Æ" Ù¬ a ùÙ» ýa §¤ Ù· a ü  §¤§¤ArgumentÁ©¤‚¡f‹0mÖ”49d >…] ` g  żù     Ä«®®«°¿ ”3¯f*²Û�Ä¥Üù    ®®«°¿ ”3¯f*²Û�£Žý¦ùL   ‰¥ ñù   ÷ x Å™‰¥‰¥ ArgumentsÁ‹¥templateÁûcŒ¥Çûcg‡@#éó  2†]ù2‹}] Ê[ÄÄ±š²š³š~´šµšNeÁ¶š·šMatchÁ¨±vXç]!2¬]Q2²] Y2¾]~œ �±ü‡°{I ù2ý¬]ù2Ü¿]«²È\Ͱýé ta§f±!ÒùÙ°Öa (ű!ÙÙ™a7(Ô±!Æ"1ÙµaU( ϱ!g( ýÐ÷ª ‹g««`Î ©°Š$•°±!›°Ó#Ä=ÑřǙș­É™Ê™àË™óG*¤�R{9 ð� ð� ±! £Ž«£Ž ‹–%Ó#¬—¤™¤ PlaceholderÁš¤�¡f›¤ formatterÁ¡fœ¤ _lifetimeÁ¡f�¤ž¤CountÁŸ¤ó¡fÑ&þ<Š$«Æ¦ÙŠ¢¬ŒU¿‹Q ±!!³�z ù�  �msgÁ”left_valÁA2þ] right_valÁI2ˆ] ¦!2à]ù‘Çh€–€–Ç  ã‘ÍŠ0·‹  Ú° ÄBQIfÓ#mÄJ|Ä–²£…Ä14à ]94è ] JÎÓ#É4® ] 4”]T½²ÎͲù4�]]ã‘ù‘!4®]Q4´]Y4À]©•á4Í]Q ̲üè±eJù4ÿ Œ]ù4Þ Ÿ]È\£²Î ÿ±Š$ö±Ó#0ÄVÓÓ#6*«—A4€ ]—I4Š ]¦!4â ]ù‘¼ã‘1Šß °² ĵÄJ Ó#àÄJï$º´ \À´ ÎdÍ´ …ü¤´6 4ÎcS?, Ù´ ß´ à´KüijœÎ 泊$Õ³ÎÛ³ùGÓùGÅ…³+defÁ1_™ŸÅ$ì·í·  Ž#‚Æ" í·Æ"6>L\ò· Îdÿ· …üÖ·6™Ÿ¢O;( ‹¸ ‘¸ ’¸LüÖ¶¼Î þ¶Š$ï¶ÿ  õ¶ùGÎùGÑ…¿5œ7fù Q™ŸÕ0…›¹Nˆ…4ø¸³�,î¸ µd“º …ÄV^^V Īøø�'ø' p<÷ žº¥ºOüè¹=#l’ºfÆÄ…*�'Ž…4�º³�,÷¹ÄVÄ^ÄøÄ2,…�&ü�'øüó¾� ó¾ 4üõ¾~lœ¿d�¿  ÷Î&4\»¿  ÎdØ¿  …~™Ÿ† K 7£ ò¿ ë ø  Ž#‚Î#4> ó¿ d‚À  …# ­‘ ˜À   žÀ  ŸÀü˽ÔŒœ P4{HŠªüؾÁ ­­È ¯�°ú?ø‹ÖžëTŠª\뽊$ܽ©© ⽊ªp©©n¯©‚ÎPùGNÎMùG… …Yuiœk짘™Ÿ²£©ó©©¶ <ÇÄ ÑÄ üÑÄqüÓÄnlöÄd÷Ä ì§!/\‘Å  ÎdªÅ  …y™Ÿ� K 7ž ÀÅ ¶ à Ù£©ñú ÁÅ  ÂÅ  dÛÅ …Ä …Ä£ £  øø�' ø úÅü§ÃÔÏß  ' p<D ­»… ­ æÅòÅ™ûÅSŸüÃĸâÜÌÅ^fÆÄ…|�'Ž�«\ÌÊ$½Ã©© ÃÃ�« ©© ¯©ìÎêùGèÎçùG½…¬…ģĸÄĉœ‹tmpÁœ³ì§a™Ÿ{£©Œ�«æ©©›�&ü�'ø <´Èh o …ÄV ^ ^  V  Ä ª ø ø�'  ø àÈ,…É ŒÉ üìÈ, 4ŠF6<�É0 �É žÉü£Çû7G' p < ÷ '  ÚÈ ÞÈ ÞÈù @Æ" )V¿ü°ÈnüÖÈH” OÎLÃÈ#ž fÆÄ…*�'Ž Š\ÄÇŠ$µÇÿ  »Ç…vŠöÿ õ³�æ³�Ú•ÄVÄ^ÄøÄ gœiˆâœfÅù FÖ¶5ÿ �&ü�'ø$ÜÎ #!…Ä æÎíÎ1/6Î. Å™Î,*{) Å™ÎRÎXü¬ÎAfÆŠà4áÎ<EÎŽDNÎAÈ@àLÈΊ$¿ÎŠGÎÄe$‘ŠÎ ü§Ð1D½Ð ÎDÇÐ Î@™ŸH34ÑÐg"üæÐ:4™Ñ Äx""ýH I I I ìI  BI ^I  ÄpI zI „I m.…Ä….….…Ä�.  ±.zI   ×I �.  ×I ÷I a#ø" põ" ŸÑì ­Î ªÑ  °Ñ ±Ñ[ üÀÏñ0#<—JŽû# JÈ4Jï/°Ö„I 0÷Õ0^JªÖqJ 0÷Õ„J�HÎüŒÐŸŠ$ýϳ� Öϳ� àÏ…4êÏνùG»ùG©…iÄÆ$ÄýHìIìIÄzIÄ„IÄm.Ä….ħ—Š˜ŒÍŽ�^™ŸX ¬Óø…Ä ÌÓ …Ä££ ø�'ø ŒÔ£Ã à ģ  ê ø �' øDäñÓTñÓ ÎT‚Ô Î?ÅHG2ŒüÓD �ÔV  ^  ^ V  Ä ª  ø �'  ø÷  V^^V Īø�'ø÷££ ø�'øDœœ øø�'ø' p<6 ŸÔ  Ô^üñÒ¯ü¨ÓxüÈÓX,"NÎLµÓ?"NÎLÔÓ^,éÓfÆÄ…|�'Ž^üèÓ&fÆÄ…|� 'Ž #’Ôf ÆÄ…* � 'Ž #—ÔfÆÄ…*�'Ž^L‘ÔfÆÄ…|�'ŽPüèÓ2fÆÄ…i�'Ž…4—Ó³�,úÒ³��Ó…µùG´ùG¢Ä£ÄøÄ£ÄÃÄø ÄV Ä^ Äø ÄVÄ^ÄøÄ£ÄøÄœÄøÄ&Ä·ä'¹—R…ĘF…ĉ ÅHž�&ü�'ø�&ü�'ø�&ü�'ø�&ü�'ø�&ü�'ø�&ü�'ø 5ÿß05Œà)¤›�)N‹ ¹)P¹�QO°%¹  5‘à(5ƒáK 4  5�á85ôá5þá�ø5îâ €5ôâ5ôâ     �=5ƒã P5¢ã 5¢ã   5©ã   6   5«ã   ˆ5›ã  # 5øã   P5ñã 5úã @�äÀ  5³ä P5­ä 5¶ä85ìä5öä�ø5Šå®ø5úâ›5�å "�?5”åP5¾å5¾å 5Åå 65Çå ˆ5·å #5¢æ P5›æ5¤æA·æÀx5øçH5øç Äøø�'ø' p<5‡è5•è 5–èºø5ÁßÕø5ûß›ø5õà¡ø5ðá¦ø5Ÿä÷ø5èä®ù¤Ò]�ŒÓYáNö ¹åÒ¡¤��ùPás�êÓh5…àùO�%-¹·ÓÙP«�fŒÓZ_ åÒZ ùPŽ t�íÓh5ƒáT ·ÓÙPÙ � �'è5ëç…05âßÓ#(5ÊßÓ#(5ÑßÄ;Ä9Ä85ùàÄî�ǘ�–ÄRÄP�B�üÄ85£äÄ»��a�]ÄÄ� �ÃÄwÄÓÄ·ÄøÜî ÞgtbÁltbÁâpowÁ¤bitÁµŽÜ>W�&ü�'ø 6ÿß06Œà)«›�{)•¹�x  6‘à(6ƒá¿ ©  6�á86ôá6þá�ø6îâ €6ôâ6ôâ     �=6ƒã P6¢ã 6¢ã   6©ã   6   6«ã   ˆ6›ã  # 6øã   P6ñã 6úã C�äÀ  6³ä P6­ä 6¶ä86ìä6öä�ø6Šå®ø6úâ›6�å "�?6”åP6¾å6¾å 6Åå 66Çå ˆ6·å #6¢æ P6›æ6¤æD·æÀx6øçH6øç  õ-Ä6†èøø�'ø' p<6‡è6•è 6–è¼ø6ÁßÕø6ûß›ø6õà¡ø6ðá¦ø6Ÿä÷ø6èä®ù«Ò]��Ós•èÒ¡«��ù•ás�óÓh6…à’ºÓÙ•«�_�Ótí èÒX ù•Ž t�öÓh6ƒáä ºÓÙ•Ù � �'è6ëç…06âßêj(6Êßêj(6ÑßõRõPõ86ùàõ �ã´�²õnõl�^�õ86£äõ×�¬}�yõ5õ3�%�ßÄ“õ‘õòõÚÄøäî æñÛ;€ÜæŽÜÂ�ܵŽÜZT�&ü�'ø 7ÿß07Œà)­›� )š¹�  7‘à(7ƒáQ ;  7�á87ôá7þá�ø7îâ €7ôâ7ôâ      �=7ƒã P7¢ã 7¢ã   7©ã   6   7«ã   ˆ7›ã  # 7øã   P7ñã 7úã F�äÀ  7³ä P7­ä 7¶ä87ìä7öä�ø7Šå®ø7úâ›7�å " �?7”åP7¾å7¾å 7Åå 67Çå ˆ7·å #7¢æ P7›æ7¤æG·æÀx7øçH7øç  ‡/Ä7†èøø�'ø' p<7‡è7•è 7–è¾ø7ÁßÕø7ûß›ø7õà¡ø7ðá¦ø7Ÿä÷ø7èä®ù­Ò]�’Óu) ëÒ¡­��ùšás�üÓh7…à& ½ÓÙš«�_’Óv�  ëÒX ùšŽ t�ÿÓh7ƒáx  ½ÓÙšÙ � �'è7ëç…07âßÝs(7ÊßÝs(7Ñ߇T‡R‡87ùà‡�å¶�´‡p‡n�`�‡87£ä‡Ù�®�{‡7‡5�'�áÄ•‡“‡ô‡ÜÄøäî æñÛ=€ÜæŽÜÄ�ܵŽÜ\T�&ü�'ø 8ÿß08Œà)¯›�¡)Ÿ¹�ž  8‘à(8ƒáå Ï  8�á88ôá8þá�ø8îâ €8ôâ8ôâ     @�=8ƒã P8¢ã 8¢ã   8©ã   6   8«ã   ˆ8›ã  # 8øã   P8ñã 8úã I�äÀ  8³ä P8­ä 8¶ä88ìä8öä�ø8Šå®ø8úâ›8�å "@�?8”åP8¾å8¾å 8Åå 68Çå ˆ8·å #8¢æ P8›æ8¤æJ·æÀx8øçH8øç  ™3Ä8†èøø�'ø' p<8‡è8•è 8–èÀø8ÁßÕø8ûß›ø8õà¡ø8ðá¦ø8Ÿä÷ø8èä®ù¯Ò]�•ÓyÁîÒ¡¯��ùŸás�…Ôh8…à¾ÀÓÙŸ«�_•Óz îÒX ùŸŽ t�ˆÔh8ƒá ÀÓÙŸÙ � �'è8ëç…08âߨ|(8Êߨ|(8Ñß™X™V™88ùà™�éº�¸™t™r�d�™88£ä™Ý�²ƒ�™;™9�+�åÄ™™—™ø™àÄøäî æñÛA€ÜæŽÜÈ�ܵŽÜ`T�&ü�'ø Ýë,âë láë íëŒáëì €ì4…ì t„ì ‘ì”„ììL ì    Ä  T°ì L±ì   Ä   Ü ì `Ä p LŒªì ºì Àì    ÁìcüåêÜüÙëhüüëE …4†ëçŒ,îêçŒ,õê즽¥ì­ìn½mìuÓ#6Ä>Ó#Ägî i—˜ÎÅ–‡:ŒÀõ  `œ>$Àõ,ËõdÅõV^ffÄ^ŠV Īø�'øV ^ f f Ä^  Š V  Ä ª ø�'  ø÷ ÐõŒÕõ —>$Õõ,àõdÚõ÷ åõ£ £   ø ø �' ø' p< D ìõe ü�õ_#”¿õfÆÄ…*�'Ž#”ÔõfÆÄ…*�'Ž^ü¿õ'fÆÄ…|�'Ž…4®õÄ@,–õÄ@,�õ…Ð…’ÄVÄ^ÄfÄøÄVÄ^Äfĸģĸ vî yFä‰T—>�&ü�'ø�&ü�'ø�&ü�'ø àø,åø läø ðøŒäøì ƒù4ˆù t‡ù ”ù”‡ùìL£ù    Ä  T³ù L´ù   Ä   Ü£ù eÄ p LŒ­ù ½ù Ãù    Äùküë÷ÙüÜøhüÿøE …4ŒøçŒ,ô÷çŒ,û÷즽¥ì­ìn½mìuÓ#6Ä>Ó#Ägî i—˜ÎÅÝ’:9Ïú Î#‘€5=(9�ú ÁÎ9¡ú 9¢úÇ@žK žUΞùG¥lv‘€Â;Ïú Î'3�!(;ªúœ!±!"l/;®ú ;¯úÌ_÷!j¦–r‚#y�!Å ùGÏùGÖšœ§±«˜�!œ!Ã\Öü ÁÎçünü¯ü8ž$ÇüÎ,ºü� 04áý ÎŒ×ý $Î4! çýîýoü·ý7Î Ëýž$Âý΀6‹š‚ŒÍ) pq%…0Ä7>ä²ú ÁÎÂ+ž6Î=D               $(3=_dpq­ÁÂû–“!¾BitAndÁ4¨!«Ó BitAndAssignÁd°!“òBitOrÁ,¾!ËÔ BitOrAssignÁ\Å!ÊòBitXorÁ4Ò!ëÕ BitXorAssignÁdÚ!�ó NegÁè!Â! NotÁí!ˆ" °4…"Å™ üÀ°ûü禣 # subtle [![](https://img.shields.io/crates/v/subtle.svg)](https://crates.io/crates/subtle) [![](https://img.shields.io/badge/dynamic/json.svg?label=docs&uri=https%3A%2F%2Fcrates.io%2Fapi%2Fv1%2Fcrates%2Fsubtle%2Fversions&query=%24.versions%5B0%5D.num&colorB=4F74A6)](https://doc.dalek.rs/subtle) [![](https://travis-ci.org/dalek-cryptography/subtle.svg?branch=master)](https://travis-ci.org/dalek-cryptography/subtle)ÁŽ�ü’WT **Pure-Rust traits and utilities for constant-time cryptographic implementations.**Áê�üîMJ It consists of a `Choice` type, and a collection of traits using `Choice`Áü¼SP instead of `bool` which are intended to execute in constant-time. The `Choice`Áü� <9 type is a wrapper around a `u8` that holds a `0` or `1`.ÁÍ �\Ñ  ```tomlÁ”Ý  subtle = "2.6"Á<ð  ```Áø �üü JG This crate represents a “best-effortâ€� attempt, since side-channelsÁüÇ @= are ultimately a property of a deployed cryptographic systemÁüˆ <9 including the hardware it runs on, not just of software.ÁÅ �üÉ NK The traits are implemented using bitwise operations, and should execute inÁü˜ OL constant time provided that a) the bitwise operations are constant-time andÁüè PM b) the bitwise operations are not recognized as a conditional assignment andÁü¹ ! optimized back into a branch.ÁÛ �üß OL For a compiler to recognize that bitwise operations represent a conditionalÁü¯PM assignment, it needs to know that the value used to generate the bitmasks isÁü€JG really a boolean `i1` rather than an `i8` byte value. In an attempt toÁüËNK prevent this refinement, the crate tries to hide the value of a `Choice`'sÁüšOL inner `u8` by passing it through a volatile read. For more information, seeÁôê the _About_ section below.Á‰�ü�QN Rust versions from 1.51 or higher have const generics support. You may enableÁüßUR `const-generics` feautre to have `subtle` traits implemented for arrays `[T; N]`.Áµ�ü¹QN Versions prior to `2.2` recommended use of the `nightly` feature to enable anÁü‹KH optimization barrier; this is not required in versions `2.2` and above.Á×�üÛPM Note: the `subtle` crate contains `debug_assert`s to check invariants duringÁü¬OL debug builds. These invariant checks involve secret-dependent branches, andÁüüOL are not present when compiled in release mode. This crate is intended to beÁÌÌ used in release mode.Áæ�¤ê ## DocumentationÁÿ�üƒ,) Documentation is available [here][docs].Á°�ü´%" ## Minimum Supported Rust VersionÁÚ�äÞ Rust **1.41** or higher.Áû�üÿol Minimum supported Rust version can be changed in the future, but it will be done with a minor version bump.Áï�dó ## AboutÁ€�ü„QN This library aims to be the Rust equivalent of Go’s `crypto/subtle` module.ÁÖ�üÚOL Old versions of the optimization barrier in `impl From for Choice` wereÁüªNK based on Tim Maclean's [work on `rust-timing-shield`][rust-timing-shield],ÁüùJG which attempts to provide a more comprehensive approach for preventingÁüÄ(% software side-channels in Rust code.ÁüíRO From version `2.2`, it was based on Diane Hosfelt and Amber Sprenkels' work onÁÜÀ "Secret Types in Rust".ÁÜ�üàFC `subtle` is authored by isis agora lovecruft and Henry de Valence.Á§�t« ## WarningÁº�ü¾RO This code is a low-level library, intended for specific use-cases implementingÁü‘LI cryptographic protocols. It represents a best-effort attempt to protectÁüÞRO against some software side-channels. Because side-channel resistance is not aÁü±PM property of software alone, but of software together with hardware, any suchÁü‚$! effort is fundamentally limited.Á§�ä« **USE AT YOUR OWN RISK**ÁÈ�üÌ" [docs]: https://docs.rs/subtleÁüï`] [rust-timing-shield]: https://www.chosenplaintext.ca/open-source/rust-timing-shield/securityÁüâK0https://doc.dalek.rs/assets/dalek-logo-clear.pngÁléhttps://docs.rs/subtle/2.6.0Álµ$(3=_dpq­ÁÂû�–‚¾É�|«Óã�p“òƒžkËÔœž`Êò»žZëÕ ÕžN�ó õžKÂ! ‹ŸHˆ" °GÅ™ RUXL�!OLœ!=@#&÷úãæÉ̸»¨«¤÷!Ÿ\å)…ìé,ü÷)>; Unwrap the `Choice` wrapper to reveal the underlying `u8`.Áº*�TÂ* # NoteÁÑ*�üÙ*FC This function only exists as an **escape hatch** for the rare caseÁü¤+?< where it's not possible to use one of the `subtle`-providedÁ„è+ trait impls.Áý+�ü…,QN **To convert a `Choice` to a `bool`, use the `From` implementation instead.**ÁLð,Ñ Ñ…ÄBÿ ú, $û,Ô¡-®ü¹2üÂ-DA Convert the `Choice` wrapper into a `bool`, depending on whetherÁü‹.+( the underlying `u8` was a `0` or a `1`.Á».�TÃ.ºÅÒ.�üÚ.LI This function exists to avoid having higher-level cryptographic protocolÁü«/-* implementations duplicating this pattern.ÁÝ/�üå/B? The intended use case for this conversion is at the _end_ of aÁü¬0KH higher-level primitive implementation: for example, in checking a keyedÁüü0LI MAC, where the verification should happen in constant-time (and thus useÁüÍ1C@ a `Choice`) but it is safe to return a `bool` at the end of theÁŒ•2 verification.Á$¼2…Bÿ ö$e´¸3…­Ó®Ó\Õ34Ú3…üý3&4€4………Bÿ ¦ä'¯äÏ4…•òü€5(lƒ5Ò Ò……Æ"Bÿ ‘5 $–5ä'7¬Ñ5…ÍÔÎÔ\í54ò5…ü•6%,˜6………Bÿ Œä'•Üæ6…Ìòü–7'd™7Ó Ó……Æ"Bÿ ¦7 $«7ä'´æ7…íÕîÕ\ƒ84ˆ8…ü«8&4®8………Bÿ iä'räý8… ƒó ü®9(l±9Ô Ô……Æ"Bÿ ¿9 $Ä9ä'ñœÿ9…"#‰"Š"#\™:4ž:!!…´Á:Ä:……Bÿ!! #Mü“@$Ó¬üß?üÞ?!üÕ?,L–@ÎÎBÿ�%%þÆÎ  @ù Î$£@‹š’;ÄÎB…'®'äûB$þBÄ…Bÿ&& '’;HÄÈHü¥EDA An `Eq`-like trait that produces a `Choice` instead of a `bool`.ÁêE�lîE # ExampleÁüE�<€F¥¦üˆF use subtle::ConstantTimeEq;Á”¨F let x: u8 = 5;Áœ»F let y: u8 = 13;ÁÏF�üÓF+( assert_eq!(x.ct_eq(&y).unwrap_u8(), 0);ÁüÿF+( assert_eq!(x.ct_eq(&x).unwrap_u8(), 1);Á<«G¥¦tÒH((ÿÆœ>üÈH­(ßÚßÚ!)*)**)üÿJ(üçH%" Determine if two items are equal.Á‘I�ü™I96 The `ct_eq` function should execute in constant time.Á×I�lßI # ReturnsÁñI�üùI'$ * `Choice(1u8)` if `self == other`;Áü¥J'$ * `Choice(0u8)` if `self != other`.Á,‚KÕÖ Õœ> Öœ>…Bÿ( ˆK(—>$‰Kî ,�Kü©M'ü­K)& Determine if two items are NOT equal.ÁÛK�üãK96 The `ct_ne` function should execute in constant time.Á¡L�l©L³Û»L�üÃL'$ * `Choice(0u8)` if `self == other`;ÁüïL'$ * `Choice(1u8)` if `self != other`.Á,¬Mר ל> Øœ>…Bÿ( ²M( *œ>$³Mî Óü÷M.�,,ÈÖ üM(ÎtÿMÍ-)-üüS%ü¬NA> Check whether two slices of `ConstantTimeEq` types are equal.ÁòN�TúNºÅ‰O�ü‘OC@ This function short-circuits if the lengths of the input slicesÁüÙODA are different. Otherwise, it should execute in time independentÁÔ¢P of the slice contents.ÁÁP�üÉPNK Since arrays coerce to slices, this function works with fixed-size arrays:ÁœQ�<¤Q¥¦ü°Q! # use subtle::ConstantTimeEq;Á,ÖQ #ÁüàQ'$ let a: [u8; 8] = [0,1,2,3,4,5,6,7];ÁüŒR'$ let b: [u8; 8] = [0,1,2,3,0,1,2,3];Á¸R�ìÀR let a_eq_a = a.ct_eq(&a);ÁìâR let a_eq_b = a.ct_eq(&b);Á„S�üŒS&# assert_eq!(a_eq_a.unwrap_u8(), 1);Áü·S&# assert_eq!(a_eq_b.unwrap_u8(), 0);Á<âS¥¦,ÿSÙÚ ÙÍ ÚÍ…Bÿ+ …T+ -Î$†TøV *ôÁX…/)/üôX',÷XÛÜ Û… Ü……Bÿ. ýX. /$þXä'ã-üóZ#´€[ —[ ›b �[ ¿[, ž[8t_uÁŸ[& ¢[8‚£[$ ¥[, §[8t_iÁ¨[& «[8‚¬[$ ®[, °[8 bit_widthÁL±[& º[8²$»[*Á[ Ä[ ˜b 8$Î[8§tÓ[8 â[, æ[8ÿèç[ ë[ ‰`+ ù[ ú[ �\8þ4û[8 �\8¼,’\ —\ «\ ˜\8$™\$ �\8î ,Ÿ\& ¤\ ¦\, §\8ÿè¨\(­\8¾ 4°\ ·\ ÿ_8€]8® „]& …], ‡]8ÿèˆ] Œ]8$Ž] “]8î ,•]% š]8·^8¯ »^& ¼^, ¾^8ÿè¿^ Ã^ Å^ Ú^8® Æ^ È^8® Ê^ Ë^8 wrapping_negÁdÌ^ Ø^ Ù^Ü^ ß^ î^, à^8ÛéLá^ ë^7ô í^% ï^ Ò_ ê_ Ó_ ã_8¯ Ô_ Ö_ Ø_ â_7ô Ù_8Û_, Þ_8ÿèß_8å_8™è_ ë_8intoÁ$ì_ ð_ ñ_8$“`8§t˜`8 §`, «`8­é¬` °` ’b+ ¾` ¿` Æ`8þ4À`8 Ô`8¼,×` Ü` ð` Ý`8$Þ`$ â`8î ,ä`& é` ë`, ì`8­éí`(ò`8¾ 4õ` ü` ˆb Óa áa Ôa8$Õa8Úa, Ýa8ÿèÞa âa8¼,ãa èa úa éa êa ùa ëa8î ,ìa8òa, õa8ÿèöa% ™bü“e%üÇdKH `Ordering` is `#[repr(i8)]` making it possible to leverage `i8::ct_eq`.Á½2)2üÍe',Ðeñò ñ½ ò½…Bÿ1 Öe1 2$×eî ÷Eüñh'ü­f@= A type which can be conditionally selected in constant time.Áîf�üòfC@ This trait also provides generic implementations of conditionalÁü¶g%" assignment and conditional swaps.Á¼ûh33ßÚüñhžù œ>$”i3ßÚ*�÷ßÚ6�÷+456456546ü¢nBüŸi,) Select `a` or `b` according to `choice`.ÁÐi�lØi³Ûêi�üòi# * `a` if `choice == Choice(0)`;Áüšj# * `b` if `choice == Choice(1)`.ÁÂj�üÊj2/ This function should execute in constant time.Á�k�l‰k»×›k�<£k¥¦ü¯k(% use subtle::ConditionallySelectable;Á,Ük´äŒæk # fn main() {Áœük let x: u8 = 13;Áœ”l let y: u8 = 42;Á¬l�ü´l52 let z = u8::conditional_select(&x, &y, 0.into());Á¬îl assert_eq!(z, x);Áüˆm52 let z = u8::conditional_select(&x, &y, 1.into());Á¬Âm assert_eq!(z, y);Á<Üm # }Á<èm¥¦”¥nóô óœ> ôœ>…œ>Bÿ3 »n3™Ž— ¸n˜ ÂnÍŽ4Ìnüßr>üênB? Conditionally assign `other` to `self`, according to `choice`.Á±o�ü¹o2ªøðo�løo»×Šp�<’p¥¦üžp(˜ù,Ëp´äŒÕpÖù¼ëp let mut x: u8 = 13;Á¼‡q let mut y: u8 = 42;Á£q�ü«q'$ x.conditional_assign(&y, 0.into());Á´×q assert_eq!(x, 13);Áüòq'$ x.conditional_assign(&y, 1.into());Á´žr assert_eq!(x, 42);Á<¹rîû<År¥¦”ârõö õœ> öœ>…Æ"Bÿ3 õr3°�$úrî GÍŽGüØx?üêsFC Conditionally swap `self` and `other` if `choice == 1`; otherwise,Áüµt" reassign both unto themselves.ÁÜt�üät2ªø›u�l£u»×µu�<½u¥¦üÉu(˜ù,öu´äŒ€vÖù¼–vÀþ¼²vàþÎv�üÖv30 u8::conditional_swap(&mut x, &mut y, 0.into());Á´Žw½ÿ´©w assert_eq!(y, 42);ÁüÄw30 u8::conditional_swap(&mut x, &mut y, 1.into());Á´üw�€´—x assert_eq!(y, 13);Á<²xîû<¾x¥¦„Ûx÷ø ÷œ> øœ>…Æ"Bÿ3 ïx3 6œ>—lH˜vHÍŽHÔ‘zlžz ¬z ‚}( ²z µz8™³z*·z ºz Ëz8×Äz% Ìz Òz Öz8ŸÓz*Øz Ûz íz8Øåz% îz ôz øz8¥õz*úz ýz �{8Ù‡{% �{ –{ š{8«—{*œ{ Ÿ{ ±{8Ú©{% ²{ ¸{ ½{8±$¹{*¿{ Â{ Õ{8Û$Ì{% Ö{ Ü{ ß{8×Ý{*á{ ä{ õ{8×î{% ö{ ü{ €|8Øý{*‚| …| —|8Ø�|% ˜| ž| ¢|8ÙŸ|*¤| §| ¹|8Ù±|% º| À| Ä|8ÚÁ|*Æ| É| Û|8ÚÓ|% Ü| â| ç|8Û$ã|*é| ì| ÿ|8Û$ö|% €}ü…}0ü’}# ¶} î† ¼} Æ}, ½} ¾} Ä}, ¿}8ª À}& Á}8ýÂ} Å}*È} Ë} ì†, Ì} Í} ê†8$×}8™¼Ü}8 ô}, ø}8ª ù} û} ä†+ ‰~ Š~ ‘~8þ4‹~8 Ÿ~8·”¢~ ´~ ×~ 8— µ~& ¶~ ¸~8$¹~$ ½~8˜ ¿~& À~ Â~8$Ã~$ Ç~8ÍŽ4É~& Ï~8¾ 4Ñ~(Ù~8$Ü~ á~ Ú€ 8ë8¤–$ï ô ö ÷  €8ÍŽ4ø þ8ŠLÿ ˆ€ ‰€8‹€8€lŽ€ ›€ œ€ Ÿ€, �€8ª ž€8¢€, ¥€8ª ¦€% §€8— ¹€ »€ ½€ Ì€8¤–$¾€ À Å€ Ë€8— Æ€ È€8˜ Ê€+ é€ ê€ ñ€8þ4ë€8 ÿ€8Д‚� ”� ¼�  •�8–�8$š�$ ž�8î , �& ¥� §�8$¨�$ ¬�8ÍŽ4®�& ´�8¾ 4¶� ¾� ă8È‚8¤–$Ì‚ Ñ‚ Ó‚ Ô‚ ý‚8ÍŽ4Õ‚ Û‚8ŠLÜ‚ å‚ æ‚8è‚8€lë‚ ø‚ ù‚ ü‚, ú‚8ª û‚8ÿ‚, ‚ƒ8ª ƒƒ% „ƒ –ƒ8$—ƒœƒ8¤–$Ÿƒ ¤ƒ ¦ƒ µƒ §ƒ8$¨ƒ ­ƒ ¯ƒ8î ,°ƒ% ¶ƒ+ Óƒ Ôƒ Ûƒ8þ4Õƒ8 éƒ8é„ìƒ üƒ §„8— ýƒ& þƒ €„8�„8$…„$ ‰„8˜ ‹„& Œ„ Ž„8�„8$“„$ —„8ÍŽ4™„& Ÿ„8¾ 4¡„ ©„ Ù†8³…8¤–$·… ¼… ¾… ¿… è…8ÍŽ4À… Æ…8ŠLÇ… Ð… Ñ…8Ó…8€lÖ… ã… ä… ç…, å…8ª æ…8ê…, í…8ª î…% ï…8�†8ª …† ‡†8¤–$‰† ކ �† ˜† ‘†8— ’† ”† –†8˜ —†% ™† «†8— ¬†®†8ª ±†% ²† Ć8˜ ņdž8ª ʆ% ˆ ë†üùŠ.ü€‰&# `Ordering` is `#[repr(i8)]` where:Á§‰�”«‰ - `Less` => -1Á”¾‰ - `Equal` => 0Á¤Ñ‰ - `Greater` => 1Áæ‰�üê‰MJ Given this, it's possible to operate on orderings as if they're integers,Áü¸Š@= which allows leveraging conditional masking for predication.Á½:4:ü®‹A”±‹©ª ©½ ª½…½Bÿ9 Ç‹9 :—Ó{˜Þ{ÍŽè{üÆŽ'…<4<ü‚�A”…�«¬ «… ¬………Bÿ; ›�; <—„}˜Ž}ÍŽ˜}ü‘— ü†”?< A type which can be conditionally negated in constant time.ÁÆ”�TÊ”ºÅÕ”�üÙ”DA A generic implementation of `ConditionallyNegatable` is providedÁüž•DA for types `T` which are `ConditionallySelectable` and have `Neg`ÁÄã• implemented on `&T`.Á´›—==ßÚü‘—ž=ßÚßÚ">>>üü˜1ü¸—?< Negate `self` if `choice == Choice(1)`; otherwise, leave itÁtü— unchanged.Á�˜�ü—˜2ªø”ÿ˜­ ­œ>…Æ"Bÿ= ’™= >œ>$—™ÍŽ4�™ü±™n�@@AÃ! AÎÎT“š3μã™AÂ!•¥|�šÈÖ ¶™ÎB>B„šü´š0”·š® ®Î…Æ"Bÿ? Êš? BÎ$Ϛ͎ñ~üø¤'�DDÈÖ ý¤àE®Eü­©)ü¦¥OL Convert the `CtOption` wrapper into an `Option`, depending on whetherÁüú¥HE the underlying `is_some` `Choice` was a `0` or a `1` once unwrapped.ÁǦ�TϦºÅÞ¦�üæ¦QN This function exists to avoid ending up with ugly, verbose and/or bad handledÁü¼§QN conversions from the `CtOption` wraps to an `Option` or `Result`.Áü’¨QN This implementation doesn't intend to be constant-time nor try to protect theÁüè¨@= leakage of the `T` since the `Option` will do it anyways.Á$°©ŠàBÿCC EÎö$ƒœæª�GGÈÖ ëªŠHIJKLNOPSVX ü³­4ü€«B? This method is used to construct a new `CtOption` and takesÁüÇ«?< a value of type `T`, and a `Choice` that determines whetherÁü‹¬?< the optional value should be `Some` or not. If `is_some` isÁüϬ@= false, the value will still be stored but its value is neverÁd”­ exposed.Áº­Î…ŠBÿFF HÎ�£ƒú­ƒü‡°#üÊ®<9 Returns the contained value, consuming the `self` value.Á‹¯�d“¯ # PanicsÁ¤¯�ü¬¯GD Panics if the value is none with a custom panic message provided byÁTø¯ `msg`.Á4ް³Š ³ÎBÿF  °F IÎŠš— ŠÄè±üˆ±63 This returns the underlying value but panics if itÁ”ñ is not `Some`.Á4ﱊÎBÿFF JÎa‹üijQüÓ²52 This returns the underlying value if it is `Some`Áü�³$! or the provided value otherwise.ÁL˳ŠÎÎBÿFF©¥¼ý³ KÎxжŸvŠüÖ¶qüæ´5Ѳü µ<9 or the value produced by the provided closure otherwise.Ááµ�üéµ@= This operates in constant time, because the provided closureÁ¬®¶ is always called.ÁtݶŠÿ ÎBÿF‚MMFþÆÿ  ì¶©¥¼•·‹#ÿ Æ"l¹·�#ÿ Æ"Î Å· LÎÿ ŒŠœˆŠQSü߸ü˜¸41 Returns a true `Choice` if this value is `Some`.Á<渴 ´Š…BÿF î¸F NÎ$ï¸üè¹ü¡¹41 Returns a true `Choice` if this value is `None`.Á<ï¹µ µŠ…BÿF ÷¹F OÎ$ø¹ü˽~ü«º=: Returns a `None` value if the option is `None`, otherwiseÁüíºEB returns a `CtOption` enclosing the value of the provided closure.Áü·»@= The closure is given the enclosed value or, if the option isÁüü»74 `None`, it is provided a dummy value computed usingÁ̸¼ `Default::default()`.ÁÖ¼�üÞ¼@ø´¬£½µÒ½Š©©�«BÿF‘Q‚RQRFþÆŠª Ö½þÆ©© Ù½öÎ<Œ¾©¥¼–¾‹#©©¯©tº¾�#©©¯©Šª Ǿ PΊª©©�‰œŒ‰z|uwü§Ã�ü¥À=Á¹üçÀ>; returns the result of the provided closure. The closure isÁüªÁ<9 given the enclosed value or, if the option is `None`, itÁüëÁB? is provided a dummy value computed using `Default::default()`.Á²Â�üºÂ@ø´¬ÿµD®ÃŠ©©�«BÿF‘T‚UUTF÷½ ·Ã‰¾ ºÃ›¾<í饼÷ô¾Ä›Ä�#©©¯©�«\¨Ä SΊª©©Ö‡œÒ‡^`bdü£Ç~ü�ÆNK Returns `self` if it contains a value, and otherwise returns the result ofÁüÔÆ<9 calling `f`. The provided function `f` is always called.Á<ªÇŠÿ ŠBÿF‚WWF—· ²Ç©¥¼åDz·¼‰È�#ÿ Æ"Š\•È VÎÿ Ñ…œÍ…FHü¬Î%ü¤ÉO§¦üøÉH�§ÅÊ�TÍʺÅÜÊ�üäÊQü§üºËQبü�ÌQ´©üæÌ@�ª«Í�ü³ÍMJ It's equivalent to the corresponding `From` impl, however this version isÁü…Î" friendlier for type inference.Á\³ÎŠàBÿFF XÎ7…üñÎH�ZZÈÖ öΩ¥¼ùΊ[4[üÀÏA”Ã϶· ¶Š ·Š…ŠBÿY ÙÏY [Ηƒ˜ý‚ÍŽû‚üµÑ6�]]ÈÖ ºÑªát½ÑŠ^)^üñÒ,üòÑ<9 Two `CtOption`s are equal if they are both `Some` andÁü³Ò+( their values are equal, or both `None`.Á,ôÒ¸¹ ¸Š ¹Š…Bÿ\ úÒ\ ^Î$ûÒä'ò~ì—Õü¤ÔOL A type which can be compared in some manner and be determined to be greaterÁüôÔ" than another of the same type.Áœ¡Õ__ßÚü—Õç_ßÚßÚ"```üÔÛ(ü»Õ%" Determine whether `self > other`.ÁåÕ�üíÕLI The bitwise-NOT of the return value of this function should be usable toÁü¾Ö! determine if `self <= other`.ÁäÖ�üìÖ2ªø£×�l«×³Û½×�üÅ×EB A `Choice` with a set bit if `self > other`, and with no set bitsÁt�Ø otherwise.Á¢Ø�lªØ»×¼Ø�<ÄØ¥¦üÐØ$! use subtle::ConstantTimeGreater;ÁùØ�œ�Ùðùœ™ÙŒú±Ù�ì¹Ù let x_gt_y = x.ct_gt(&y);ÁÛÙ�üãÙ&# assert_eq!(x_gt_y.unwrap_u8(), 0);ÁŽÚ�ì–Ú let y_gt_x = y.ct_gt(&x);Á¸Ú�üÀÚ&# assert_eq!(y_gt_x.unwrap_u8(), 1);ÁëÚ�ìóÚ let x_gt_x = x.ct_gt(&x);Á•Û�ü�Û&# assert_eq!(x_gt_x.unwrap_u8(), 0);Á<ÈÛ¥¦,×Ûº» ºœ> »œ>…Bÿ_ ÝÛ_ä‰$ÞÛî ,äÛü€Ü.ü�Ü! ¯Ü ¨è µÜ ÐÜ , ¶Ü8ÿè·Ü& ºÜ8‚¼Ü$ ¾Ü, ÀÜ8ÛéLÁÜ& ÊÜ8²$ÌÜ*ÒÜ ÕÜ ¥è8$ßÜ8‹œäÜ8 øÜ, üÜ8ÿèýÜ �Ý Ÿè<C Returns Choice::from(1) iff x > y, and Choice::from(0) iff x <= y.Áü�ÝF<�âÝ<ºÅTòÝ<�‰Þ<> This algoritm would also work for signed integers if we firstÁü™ÞA<4 flip the top bit, e.g. `let x: u8 = x ^ 0x80`, etc.ÁüçÞ7+ «ß ¬ß ³ß8þ4­ß8 Áß8¥,Äß Éß Ýß Êß8$Ëß$ Ïß8î ,Ñß& Öß Øß, Ùß8ÿèÚß(ßß8¾ 4âß éß •è68ûß8ñÛÿß ƒà8$…à Šà Œà8î ,�à% ’à8õà8ùà8€Üýà �á ƒá8$„á ‰á8î ,‹á% �á8ðá8ôá8ŽÜøá üá7ô þá% ÿá8%,îâ8ŽÜôâ øâ, úâ8ÛéLûâ …ã �ä 8€Ü›ãŸã8€Ü¢ã¦ã8ŽÜ©ã% ¬ã8ŽÜñãõã8ŽÜøã% ûã8Ÿä8£ä8�Ü§ä «ä8ñÛ­ä ±ä ³ä8€Ü´ä% ·ä8èä8ìä8ŽÜðä ôä7ô öä% ÷ä8%,Šå8ŽÜ�å ”å, –å8ÛéL—å ¡å ·æ 8�Ü·å»å8�ܾåÂå8ŽÜÅå% Èå8ŽÜ›æŸæ8ŽÜ¢æ% ¥æ8¾ 4ëç'ñç8”$óç ÷ç ‡è øç €è8�Üùç ýç7ô ÿç8‚è8™…è% ¦èü¦ê*½c`cüåê',èêÄŠĽ Ž…Bÿb îêb c$ïêî þlüµí@üÅìLI A type which can be compared in some manner and be determined to be lessÁü’í"ñË„¿íddßÚüµí¹(œ>tÑí_œ>œâídßÚ:Âã/Ñã&ßÚLÂãAÑã8eeeü�õ'üüí%" Determine whether `self < other`.Á¦î�ü®îL¬Íüÿî! determine if `self >= other`.Á¥ï�ü­ïIF A default implementation is provided and implemented for the unsignedÁ”ûï integer types.Á’ð�üšð2ªøÑð�lÙð³Ûëð�üóðEB A `Choice` with a set bit if `self < other`, and with no set bitsÁt½ñÂÏÐñ�lØñ»×êñ�<òñ¥¦üþñ! use subtle::ConstantTimeLess;Á¤ò�œ¬òðùœÄòŒúÜò�ìäò let x_lt_y = x.ct_lt(&y);Á†ó�üŽó&# assert_eq!(x_lt_y.unwrap_u8(), 1);Á¹ó�ìÁó let y_lt_x = y.ct_lt(&x);Áãó�üëó&# assert_eq!(y_lt_x.unwrap_u8(), 0);Á–ô�ìžô let x_lt_x = x.ct_lt(&x);ÁÀô�üÈô&# assert_eq!(x_lt_x.unwrap_u8(), 0);Á<óô¥¦,�õÆÇ Æœ> Çœ>…Bÿd –õd eœ>$—õî znäðõÄì�öõì±ö‡ìÒö™ü¯÷'½keküë÷',î÷ÈÉ È½ ɽ…Bÿj ô÷j k$õ÷î élÌÔú�mmÈÖ ÙúØÖ$Üúžnoä¯üüôúPM Constructs a new instance of `BlackBox` which will wrap the specified value.ÁÉû�üÑûYV All access to the inner value will be mediated by a `black_box` optimization barrier.Á¶üΞBÿll nÎ�qk¬·ýüíüEB Read the inner value, applying an optimization barrier on access.Á¾ýžÎBÿll oÎfk7küÒ"NK The `Choice` struct represents a choice for use in conditional assignment.Á¡#�ü¥#PM It is a wrapper around a `u8`, which should have the value either `1` (true)Áœö# or `0` (false).ÁŠ$�üŽ$QN The conversion from `u8` to `Choice` passes the value through an optimizationÁüà$QN barrier, as a best-effort attempt to prevent the compiler from inferring thatÁü²%LI the `Choice` value is a boolean. This strategy is based on Tim Maclean'sÁüÿ%QN [work on `rust-timing-shield`][rust-timing-shield], which attempts to provideÁüÑ&OL a more comprehensive approach for preventing software side-channels in RustÁL¡' code.Á«'�ü¯'PM The `Choice` struct implements operators for AND, OR, XOR, and NOT, to allowÁü€(EB combining `Choice` values. These operations do not short-circuit.ÁÆ(�ÌÊ( [rust-timing-shield]:Áüä(JG https://www.chosenplaintext.ca/open-source/rust-timing-shield/securityÁ4Ø)…„˜V_wqrÄ…BÿYo1Ä…Bÿpp qß)ppÄ ¸)…bbb…b…v†vbbÍ Í……Bÿu¾)u vb…x gxÎÏÐ Î… Ï€g€gŠ‚gê ûcƒg£"ûcØ«q¢1È¡Ð÷!BÿwÅ)w xœàÎ[Äz)zø�\'(’\ÝÞ ÝÄ ÞÄ…Bÿy˜\y z ™\î •0à“`ì|)|øÔ`'(×`ßà ßì àì…Bÿ{Ý`{ | Þ`î L2àÎ[õ~)~ø�\'(’\áâ áõ âõ…Bÿ}˜\} ~ ™\î ú4à“`þ€)€øÔ`'(×`ãä ãþ äþ…BÿÝ` € Þ`î º6àÎ[‡‚)‚ø�\'(’\åæ å‡ æ‡…Bÿ�˜\� ‚ ™\î m9à“`�„)„øÔ`'(×`çè ç� è�…BÿƒÝ`ƒ „ Þ`î -;àÎ[™†)†ø�\'(’\éê é™ ê™…Bÿ…˜\… † ™\î è=à“`¢ˆ)ˆøÔ`'(×`ëì ë¢ ì¢…Bÿ‡Ý`‡ ˆ Þ`î ©?àÎ[ «Š)Šø�\'(’\íî í« î«…Bÿ‰˜\‰ Š ™\î ‹Bà“` ´Œ)ŒøÔ`'(×`ïð ï´ ð´…Bÿ‹Ý`‹ Œ Þ`î `Dø×}Ž ÄŽ��456��ŽøŸ~A�¢~ùú ùÄ úÄ…ÄBÿ�¸~� Ž—�J˜§JÍŽ±Jøÿ€>�‚�ûü ûÄ üÄ…Æ"Bÿ�•�� � š�î ¼LÍŽÇLøéƒ?€ìƒýþ ýÄ þÄ…Æ"Bÿ�€„� �—åN˜ñNÍŽüN¢ ì’“”456“’”ž›ÿ€ ÿì €ì…ìBÿ‘™‘ ’—�J˜§JÍŽ±J—“�‚ �ì ‚ì…Æ"Bÿ‘�‘ “�î ¼LÍŽÇLІƒ„ ƒì „ì…Æ"Bÿ‘ƒ‘ ”—åN˜ñNÍŽüNø×}Ž õ–—˜456–—˜øŸ~A�¢~…† …õ †õ…õBÿ•¸~• –—ÌV˜ÖVÍŽàVøÿ€>�‚�‡ˆ ‡õ ˆõ…Æ"Bÿ••�• — š�î èXÍŽóXøéƒ?€ìƒ‰Š ‰õ Šõ…Æ"Bÿ•€„• ˜—[˜[ÍŽ([¢ þš›œ456›œšž›‹Œ ‹þ Œþ…þBÿ™™™ š—ÌV˜ÖVÍŽàV—“�Ž �þ Žþ…Æ"Bÿ™�™ ›�î èXÍŽóXІ�� �þ �þ…Æ"Bÿ™ƒ™ œ—[˜[ÍŽ([ø!×}Ž ‡žŸ 456Ÿž ø!Ÿ~A�!¢~‘’ ‘‡ ’‡…‡Bÿ�!¸~� ž—øb˜cÍŽ cø!ÿ€>�!‚�“” “‡ ”‡…Æ"Bÿ�!•�� Ÿ !š�î eÍŽeø!éƒ?€!샕– •‡ –‡…Æ"Bÿ�!€„�  —=g˜IgÍŽTg¢ �¢£¤456¢£¤ž›—˜ —� ˜�…�Bÿ¡™¡ ¢—øb˜cÍŽ c—“™š ™� š�…Æ"Bÿ¡�¡ £�î eÍŽeІ›œ ›� œ�…Æ"Bÿ¡ƒ¡ ¤—=g˜IgÍŽTgø(×}Ž ™¦§¨456§¨¦ø(Ÿ~A�(¢~�ž �™ ž™…™Bÿ¥(¸~¥ ¦—$o˜.oÍŽ8oø(ÿ€>�(‚�Ÿ  Ÿ™  ™…Æ"Bÿ¥(•�¥ § (š�î @qÍŽKqø(éƒ?€(샡¢ ¡™ ¢™…Æ"Bÿ¥(€„¥ ¨—is˜usÍŽ€s¢ ¢ª«¬456«ª¬ž›£¤ £¢ ¤¢…¢Bÿ©™© ª—$o˜.oÍŽ8o—“¥¦ ¥¢ ¦¢…Æ"Bÿ©�© «�î @qÍŽKqІ§¨ §¢ ¨¢…Æ"Bÿ©ƒ© ¬—is˜usÍŽ€s´¹¤üý›FC The `CtOption` type represents an optional value similar to theÁüÄœ@= [`Option`](core::option::Option) type but is intended forÁô…� use in constant time APIs.Á¤��ü¨�B? Any given `CtOption` is either `Some` or `None`, but unlikeÁüë�30 `Option` these variants are not exposed. TheÁüŸžC@ [`is_some()`](CtOption::is_some) method is used to determine ifÁüãžEB the value is `Some`, and [`unwrap_or()`](CtOption::unwrap_or) andÁü©Ÿ>; [`unwrap_or_else()`](CtOption::unwrap_or_else) methods areÁüèŸB? provided to access the underlying value. The value can also beÁü« DA obtained with [`unwrap()`](CtOption::unwrap) but this will panicÁ¤ð  if it is `None`.Á…¡�ü‰¡C@ Functions that are intended to be constant time may not produceÁüÍ¡C@ valid results for all inputs, such as square root and inversionÁü‘¢C@ operations in finite field arithmetic. Returning an `Option`ÁüÕ¢DA from these functions makes it difficult for the caller to reasonÁüš£A> about the result in constant time, and returning an incorrectÁüÜ£>; value burdens the caller and increases the chance of bugs.ÁDĤ�®®ÈÖ ͤŠ?ø‹ÖžëT¯° "DÖ¤,Ö¤­­Î|ä¤<䤭­…Æ5�²²ÈÖ‡…Î/ͤг†³¨ªÆÆ¯ ¯ŠŠBÿ±/¤¤± ³ÎÆ 0«¤6�µµÈÖ/ØÖ0ͤŠ?Bò€7�··ÈÖpŸgÎ1ͤЏ g¸’•ò€ò€°±² °Š ±€g€gŠ‚gê ûcƒg£"ûcØ«q¢1È¡²÷!Bÿ¶1±¤¶ ¸Îò€œò€ø5ßÜ!ĺ`ºø5Áß'ø5�ÝFŽÖ5âÝ�P5òݺÅ5‰Þ�ø5™ÞA‡×ø5çÞ7Ó×(5Äß¼½ ¼Ä ½Ä…Bÿ¹5Êß¹ º 5Ëßî 8«ø6ßÜ!õ¼`¼ø6Áß'ø6�ÝFŽÖ6âÝ�P6òݺÅ6‰Þ�ø6™ÞA‡×ø6çÞ7Ó×(6Äß¾¿ ¾õ ¿õ…Bÿ»6Êß» ¼ 6Ëßî ’¥ø7ßÜ!‡¾`¾ø7Áß'ø7�ÝFŽÖ7âÝ�P7òݺÅ7‰Þ�ø7™ÞA‡×ø7çÞ7Ó×(7ÄßÀÁ À‡ Á‡…Bÿ½7Êß½ ¾ 7Ëßî êŸø8ßÜ!™À`Àø8Áß'ø8�ÝFŽÖ8âÝ�P8òݺÅ8‰Þ�ø8™ÞA‡×ø8çÞ7Ó×(8ÄßÂà ™ Ù…Bÿ¿8Êß¿ À 8Ëßî >š±�üÈùKH Wrapper type which implements an optimization barrier for all accesses.ÁD½ú�ÃÃÈÖ ÆúØÖ$Éúž6{U£ƒ­I ÂÄΞBÿ`ŽWΞBÿÁÁ ÂÎnp ÏúÁÁÎÁ‘9�ÆÆÈֶެ9ÆúØÖ½žÇ†ÇÖØ’’Ê ÊžžBÿÅ9�úÅ ÇÎb’ :¤ú:�ÉÉÈÖ]ØÖ:ÆúØÖežtwà‘;�ËËÈÖ¥ø­;ÆúØÖ­žÌ gÌÇÊ3’6’ËÌÍ Ëž Ì€g€gŠ‚gê ûcƒg£"ûcØ«q¢1È¡Í÷!BÿÊ;ªúÊ ÌÎÛ’œâ’Æ   z+v?uStÅo –Kan ÀM¡j ’T*j ‰Yè¦\pë`ø¦\~ë`¦\…ë`¦\‹ë`¦\‘ë`e äe¼` ÅnŽ^ ‡s'\ ýx0Â~ħ�VŽ„\,í){%[Â~ï§��Ž„‡,)¦%†!Â~!§�¬!Ž„²,C)Ñ%±(Â~E(§�×(Ž„Ý,n)ü%‘Q Ñ‹Q ¥�·NÐM— [ a ò€!HªDDŠ< ãÏ]; †ÓÆ6 ëÛ½5Øßà6Øß7Øß&8ØßŠ0 üê¸+ ¤õô* ‚ø£`f1–Fl<Fhttps://www.chosenplaintext.ca/open-source/rust-timing-shield/securityÁ OptionÁcore::option::OptionÁ core::optionÁÏWhttps://crates.io/crates/subtleÁhttps://doc.dalek.rs/subtleÁCtOption::unwrap_orÁûunwrap_or_else()ÁCtOption::unwrap_or_elseÁwork on rust-timing-shieldÁã®üÃÅ™ëà unwrap_or()Áû¯ÄÌÄhttps://docs.rs/subtleÁþÄã®ÃCtOption::is_someÁ»Å¯ÄhereÁàÅþÄCtOption::unwrapÁ is_some()Á�Æ»Å/https://travis-ci.org/dalek-cryptography/subtleÁ¯ÆàÅÈ unwrap()ÁÄÆÕÃÙÆ�Æ�ÄóÆ¯ÆÈ áĸÇÄÆ¼ÃÕÃÙÆëÃ�ÄóÆÈ ­ûÌÄáĸǫӓòËÔÊòëÕ�óÂ!ˆ"(3=_dù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²ChoiceCtOptionvalueis_someÀƒÿBlackBoxÈÉÕÉäÉðÉþɇʖÊÛë‹–ŒUðþբ봑Ðô"Û<Îßm?¡½aÛ6Ђ!¦ X ½6‡Ä"²ž~ ¢_¹'Iþåìq¸eüG•7góD°§™]pž8þM‘ÄcšÚ!‹uPMþ§×v”õnþÞݯS“3Ä=q�ÝօЖ2ƆªÖhæÙVärw©÷žt™6'ÐTÁÛP�»œcäo¹mRØ*°FfQ#º+ôÞÚÑ-nˆût0A‰–8áwað ÁŸ8·í6(j`rž­Ôš¶™ÃÇ[=ýB³Ë÷*ÍÑQj燎´ìWÆs?Ž"Ĭˆ,¼cXëÇW®ÇŽ�/“tŠ”Þ…ÞÀ¶ ÄGÁÓ�» ¼ DHÀ1a'+Äí•Dœ+uµká1R…½-Å­Ç9+ã{ƒÿŠ›•ÁSçü¥b“^%lióŠM>;¶¡,_ÄEÔ&½²äÐÕÉ]Ÿ+c„ưOÏ?Oñaƒ*V:'qs‡NÞ2÷ràºkd<ÎaBâñk5®AÜ÷R¾¦ê:y8Ìe1t r&V¾ƒdé6Ð+�[TÓŸsQ»{C¢ÄÚ‹;Áâ,<‰•%½™ÈåwU­UÐoh:6Ò¬)-�Z“ç€u²òš:ã˜eîÅÀÖ‰·-™zZ÷·�tÆîöêá°d�scpoù_:ûéC©ÝŒqÃÆ2xluNº]Œ*û[nW96!f/ÆC«D7P‹[áI>—«ÔEí©mu¿tŽBˆ|j߄ӵÓð Ü43mtæuÏ�ü/ c{ý h|^é#Án. |‡ @PG¯‹ì,47¦6"ÞKâËC÷çøÃÊ'G�Fÿ,K–¸ê³7ù¼0ŸQ mët?`…ƒ’»#î¥Ò>Ó0 PLéþ6É9ÌPûPìS9<᫹nXHcÔD![Z9Òß¿Åô³æÞ\íÇ$sDÚüÛW•5�(ÔŠk£IzøÝÎ3ÐñS?ZmœR/ùÖH´Ç(¨±îÛxòB™\ACZÏêèdؼÑ�§ ¾‡?“%ôa"Âò vcÝh¬ ºS0 s¸œ>‘%®Æê ŒD¶{:Ʋ{Ih¤6Ï ÛG a}ÀôU°L§hÔèw…Û†S°oÝF¾ ç4^Í]ÿ (öD§f :qÒ‘zÑË)BwÔ&UŽlípt�²•v/˜JûyŒÿð*×ävœ2M¾)‰¥zGûK4’‡h¾cÕ¼5Wgwóç»”ä ÆŠ@æ½#†!•¯Kò²÷J‰¥ ŒsšÚ||Ž»©Ñ4E0YÊúßí¼é¦g½=¹jà?Ó0e)8Ûù“žÁ˜Y0áã'Z0á~›¯Ò^ÏXEGG ÈYo5ÿý ¸åDn2»Ø’óÁEô‰QbÿÀo¦÷6ýµÄð—Ô’0‡ámÞžw° {½UC–9rÏ›–“NáX|]?9�]ç:\‘ä{ÿ‡'¿¬÷„35ó+üâÊTUýmÄ2L5¬k k•ý`o&®ç’z­™¥ëLâóò—Ì÷¸üF\òþ=¾ÿT�•KîhíÃâ¢>:Èüìšv>©p_”#Ôµiè*ì˜ú+ÚM�¾;’0 NÒæ™�÷4 ëD—)üIƒÞ%jgñÀ¹ó}Œ{õ¦K‘pâÝ™Í8‰—S*½–ŒAîÚC©Ûœé‰ ï*�‡�w»;$uç§Z�V’ösÀ÷QÒJø‘¤x/Ø@æRúð�Lí(jTÜÓvVJªðªù®4èD0žØ„W½9|ƒ‚òŠ}Ý,+cµú/Æ#þ„hÜ~‚Á˜ãœë”çÅdo}“²)qà©®Çû¼«+4�†£¯`Ò6“<ϹúÈë�cCV-ÀÏÐͲUr}Ÿò4ºy¶~�éè�ñ€ÿùuÕ²_¿ /×È�”©”0ïøhü‰÷›Tå‰}6G‰s˜[¸%âŃzäÍúEȈ÷[¥·±ßݬ6<«Þ¡“ê÷ÁkíŽÐ3Ïþ‚ô7ÿ¯ÑËÇÓ@�Ý­PpxBâ†ì9âI»�½ß“Esö‘Êì I8ÍÿƒÃ|ÌÚ•�íx£ÃA7%½±f£^ ®çïðïÚm›ìÖ ÃòàÇnd³¤|„>ÄA}CÚ:“'æ4¬ÑÈ[8ï¨Ðɶ'„ÝŒaHéEDW×Êo)ý.1�ºÖÇñÞãà„iÜ<¿>h-<ÙM?<•£rá¡ÖD*�ÅŠÙy‚ƒ“Р~¾ÚL«3r™ƒúÇôP¤ Ö1ïEÔ-¨ÚiêΗ«A}À §9ñ(�‚>ñ `2ú�“ºS;Ï:¨#çµont©¥cȰ¹ŠSÇQÛ'•Ù›—„rÚ²2ï�¡mb¦jXûÖdošˆµT«Æh温�TlñOÑžJÅ?8ì“ÙS„wrYZâøb~Û1ñ�ŠbÈìü 3瓦Ïɼ2ðS}_‘dÝÎŽÉoTP‚C�èÿÚÀ÷ÜEÇEÒ1ýV…%YâÙN&CW½*I°¥Y¼…fo…éd�½Ã€æ,}©˜ö„Ž•ñåz×Ȩ̈ ßöUÒû2k�-Zá <^BþFîeW¸;(e©£îY«ê�±{Ã0Ùt]ll⡜Õ%¬!€d¬Ý³/…€„ÑZÅIŸ~~)³a¦8×òGg2®éˆ±aá?¹·0O•í#ÔåèÊöó%én±YìÃÖ–=<¶�™‹� Ÿ¿6ñ8=ÖM¹Ñ±ÈÞ`©V1¾ÆÔ÷rSàÓ” ÊŽ›Ç¡Ë6�6(+ý‹Üf´ñË"U)ÖD, 3 %úF´r¨Ã%™Ýý›fÎýÜ=!žð�ÈrýÑùéÁ§Í‚NÛ�¸xQ+tþÜ8#Ÿ\Hç[|sò?ò”C=6)áQÛˆÒ½Í,|¤,ûO’$Ô]šì¦4:¹ÇŠ£áôÐÖÕtS�âÇ5yš�Ðx4… !Lg–O–›f/ƒ‘`H;nÒ¼%ÒÿL@*ÙaÈKðÏ1×øõaUŒ{€1Ä»¡Æø{™ûT=©µc§•Û¿r¶¢-æÕ¬“5‘ÔMxF¨ç@“Ÿµ½[øŽvÄaŒ€Gƒ�ë²,ç8£§ òÄYÔbÄÚNZÏróæ ;¼t…CÀ(Ó¼¿áo°„‘¡`³l;çˆS²!Ud¯¿@Ʋýˆ£5p«ÉÉ1•‡éÇ’ùx>¥eR‹²Þýªl,šóúÎy˜4²·ø˜ßÊ|¥æ¸XCŽÖE£©=Â×”dVk,ò½¸?ÇNŸ»‡•-Ý6;<á4C"ä²jX7¼5hK“°¢ì]½Û”l{µ(BÕ%&B”º[u“—¹–ašff 4&aYïž±K0xk¯obF|_šÕ5³hO‰¤*ÁÚ�~2NW«Q+Æ3–à]Á�À_wZ¸m&VE€ãHøçP¨Öí.ûöJ&p1í:ûüP&‚1^a_a`a& á»KÏââââââ#â)â/â5â;âBâIâ\ â7äQ ä+çMçeç©çÅçè?èWè›è·èé1éIé�é©éê!ê8êtêëëW ëí•î ðTðÖóðóXô@ù¯ùú^ûvþ®%¦( ‡üŒñzÜ ‘Ýk¦E ‡µ!B "˜#ß#X$Ÿ$‹%c &/*-0H0´0¡#1–5¨5º5Ì5ß5ú5e6§6µ7D8œ<³<Å<ô<=\=w=#>>>©>Ä>/?J?µ?Ò?>@[@É@æ@TAqAßAüAjB‡BõBC‚C³C,D©D ENE¿E/F¤FÕFNGËGBHpHáHQIÆI÷IpJíJdK’KLsLèLM’MN†N´N%O•OP6URUlU¼UVUV¨V^W|WJXhX6YTY"Z@Z [\\j\Â\ ]]] á íFûV&”1UâBä7çµç)è§èé™é ê ëí9ðâó¡ùIûxWþ³ Ã#ƒ$W&90•1¢5´5Æ5Ø5ë5�6Z<Á<ð<=j=/>µ>;?Á?J@Õ@`AëAvBCŽC,E°FNHÒIpKôL’N U UBVŠVjWVXBY.Z¬[N\÷\?]      +++         + '    '    áäçQç}çÝçCèoèÏè5éaéÁé%êPê§ê3ëÉìEî¶ïƒóô\ôÇùïúþTÈ)« 0Ŧ“h8aÍïßv@M ¾!o#ø#5%&Ú)5*a0!1@56Œ789<|<ž<&=Ž=W>Ý>c?ë?t@ÿ@ŠAB B+CÌCFDÃDeEÖEFFîFhGåG‡HøHhIJŠJK©KLŠL2M¬M)NËNâEâXâ3äLä'çIç`ç¥çÀçè;èRè—è²è é-éDé‰é¤éýéê4êoêðêýêëSëí�îðBðOðÒóëóSô;ùªùúYûqþ©!¡" �ö† ë`mtÖŒÊ×e¡?t�¯ý å ò ÿ /"<"’#Ì#Ù#R$Œ$™$†%]&)*'0B0®0›1‘5£5µ5Ç5Ù5ô5`6•6¢6°7A8c<˜<®<Â<ñ< =Y=t=>8>¤>¾>*?D?°?Ì?9@U@Ä@à@OAkAÚAöAeB�BðB C{C­C%D¢DEKE¼E,F�FÏFGGÄG?HmHÞHNI¿IñIiJæJaK�KLpLáLM‹MNƒN±N"O’OP$U1UMUiU¬U¹UVCVRV–V¥VWWuWCXaX/YMYZ9Z[¶[ò[ÿ[\Z\g\¼\ø\]K]Z] ^^^^$^*^0^6^<^B^I^O^V^\^c^i^p^v^~^„^Œ^’^š^ ^¨^®^¶^¼^Ä^Ê^Ò^Ø^à^æ^î^ô^ü^_ ____#_)_0_6_>_D_M_S_\_b_g_m_r_x_}_ƒ_‹_‘_š_ _©_¯_´_º_¿_Å_Ê_Ð_Ø_Þ_ç_í_ö_ü_`` ````%`+`4`:`C`I`N`T`Y`_`d`j`r`x`€`†`Œ`’`˜`ž`¤`ª`°`¶`¼`Ä`Ê`Ò`Ø`à`æ`ï`õ`þ`a aaa"a*a0a8a>aFaLaRaXaýáââââ#â)â/â5â;âBâèãðæMçeçÅç?èWè·è1éIé©é!ê8ê�êòêëÅì-îžïDðkóðóXô¯ùëúþ<°%¦‡À�brz OÌH´ÖvÆ]'ÿ 4 ç ô ¥!1"V#Î#ß#Ž$%&Á)/*H01'5ú5—6s785<f<œ<=w=>>Ä>J?Ò?[@æ@qAüA‡BC³C,D©DNE¿E/FÕFNGËGpHáHQI÷IpJíJ’KLsLM’MN´N%O•OâT&U6URU®U¼UFV™V¨V×WÃX¯Y›Zb[¹[ô[\\\j\û\N]]]^^^!^'^-^3^9^?^F^L^S^Y^`^f^m^s^{^�^‰^�^—^�^¥^«^³^¹^Á^Ç^Ï^Õ^Ý^ã^ë^ñ^ù^ÿ^_ ___ _&_-_3_;_A_J_P_Y___d_j_o_u_z_€_ˆ_Ž_—_�_¦_¬_±_·_¼_Â_Ç_Í_Õ_Û_ä_ê_ó_ù_þ_` ````"`(`1`7`@`F`K`Q`V`\`a`g`o`u`}`ƒ`‰`�`•`›`¡`§`­`³`¹`Á`Ç`Ï`Õ`Ý`ã`ì`ò`û`a aaaa'a-a5a;aCaIaOaUa[aQâ$ä?äç3çZç�ç±çè%èLè‚è£èõèé>été•éçé ê.êaêÅêúê ëDëÜì{îìïðLð¹óÞó=ô�ùüùûQþŒtØhØÎj»ñz¦ÔLˆ.á~œr ï ü á!9"�#­#Ö#1$m$–$l%,&*50—041w5ž5°5Â5Ô5ç5I6z6Ÿ6ž708@<Ž<¨<½<ì<þ<K=f= >+>�>±>?7?™?½?!@F@«@Ñ@6A\AÁAçALBrB×BýBbCŠCD€DýD(EœE F}F¬F'G¢GHJH¾H/IŸIÎIIJÄJAKlKàKQLÁLðLkMæMcNŽNOsOãOþT.UFUbU…U¶UûU-VOVnV¢V=WfW)XRXY>YZ*ZíZ~[ã[ü[\4\d\©\Û\]#]W]ò]Kâä9äç-çRçˆç«ç÷çèDèzè�èéèé6élé�éÛéê&êYê²êôêë<ëÊìoîàï ðFð­óØó1ô—ùðùðúEþ€ônËþ[ÆÁód®Þ r“ÎD{&Ùýxø�P] é ö Ì!3"y#š#Ð#$$Z$�$_%&*/0Š0"1j5˜5ª5¼5Î5á5<6g6™6–7(8:<†< <·<æ<ø<>=`=ü=%>€>«>?1?Œ?·?@@@�@Ë@(AVA³AáA>BlBÉB÷BTC„C÷CqDîD"E�EFqF¦FG“GHDH²H#I“IÈI;JµJ2KfKÔKELµLêL]M×MTNˆNöNgO×OéT(U=UYUpU°UìUVIVYVœV.W`WXLXY8YòY$ZÞZi[Ú[ö[\\^\š\Æ\þ\]Q]ã]Sâ(äAäç5ç^ç”ç³çè'èPè†è¥èùèéBéxé—éëé ê2êeêæê ëHëîðï7ð½óàóAôŸùúUþ�vÜlÒU¿ü~±PŒ2î\  áÉ "…#Á#5$�$p%*70›0{5 5²5Ä5Ö5é5M6Ž6¢748B<”<¬<¿<î<=O=h= >->‘>³>?9?�?¿?%@H@°@Ó@;A^AÆAéAQBtBÜBÿBgCŒC D…DE*E¡EF‚F®F,G§G$HLHÃH4I¤IÐINJÉJFKnKåKVLÆLòLpMëMhN�NOxOèO UKUgUžUV@VˆVBWhW.XTXY@YZ,ZòZ’[ê[\L\®\õ\=]÷]ä ç~çÞçpèÐèbéÂéQê©ê4ëFî·ï„ó ôÈùþUÉ¡1§”i9bÎðàwAN ¿!p#ù#6%Û)b0A56�78:<~<'=�=X>Þ>d?ì?u@A‹AB¡B,CÍCGDÄDfE×EGFïFiGæGˆHùHiIJ‹JKªKL‹L3M­M*NÌN=O­OèTÔUÀVòWÞXÊY¶Zh[Ñ[‚\u]ä ç~çÞçpèÐèbéÂéQêªê4ëGî¸ï…ó ôÈùþVÊ¡1¨•j:cÏòáxDQ Á!q#ú#7%Ü)b0B56Ž7 8[<~<'=�=X>Þ>d?ì?u@A‹AB¡B,CÍCGDÄDfE×EGFïFiGæGˆHùHiIJ‹JKªKL‹L3M­M*NÌN=O­OÕUÁVòWÞXÊY¶Z®[Ò[ƒ\v]ìãôæiçÉç[è»èMé­é<ê“êë1î¢ïoóôó³ùþ@´Œ’T$M¹ÛËb,9 ª![#ä#!%Æ)M0,5ÿ5x7 8h<=z=C>É>O?×?`@ë@vABŒBC¸C2D¯DQEÂE2FÚFTGÑGsHäHTIüIvJóJ•KLvLM˜MN·N(O˜O¿U«VÝWÉXµY¡Z»[m\`]Ò Þ ì ú   $ 2 < I V ¹ j s | Û - 6 c l u ~ ‡ � € ´ ¾ È _ h q z ƒ Œ • ž § ° " + 4 = F O X a … Ç Ñ ? H Q Z ™ Ô Þ üêðìNðûålÖ€ ñ þ ;"Ø#˜$9&_1¡60U¸UQV¤Vþ[f\]Y]¡¡šïwÌT›Ú€< ?,ÅDlFrG±y¶|ó} ‚VƒÞƒ•Œ¿ŽØ�D‘¦‘“ –ñ™�Ÿž¢ÂLÄÖÇóË`Ì`Àb.*1®2—57 :�;…> @ @:CÃD?KQM“OŸQQS(UkW}Y¿[Ë]}_Ta—c©eëg÷i©k€mÃoÕqt%vØw¯yx€ ‚O®á´u» ÂÞÊñË ™îvËSšÙ; >,a.kFqGúHµ|ò}`UƒÝƒ6Œ`Ž×�C‘¥‘“ –ð™�žž¢Õ§KÄÕÇÊ_ÌÍSÍ¿ )1­2–57 :Ž;„> @;CÄD@KRM”O QRS)UlW~YÀ[Ì]~_Ua˜cªeìgøiªk�mÄoÖqt&vÙw°yy€ ‚P®â´v»Â¥ÍßÊòË’<è[,ä ç˜ç èŠèýè|éïéiêéêLë�î÷ïÄóEôúXþ“ àpÙÆ…W“9õg§ðØ ""Œ#<$w%*Ÿ0‚5Q6©7;8S=>•>?¡?*@µ@@AËAVBáBlCDŠDE¦EF‡F1G¬G)HÈH9I©ISJÎJKKêK[LËLuMðMmN O}OíOVJW3XY Z÷Z¶\ÿ]ñìûæ:&`1áIâ7ä+ç©çè›èé�éêëÃì ðÖó•ùéúlü¾ñÜ‘˜#X$&-01–5¨5º5Ì5ß5e63<µ<ä<ö<^=#>©>/?µ?>@É@TAßAjBõB‚C E¤FBHÆIdKèL†NàTnUVWV^WJX6Y"Z`[\Ä\ ]Q<U¡[D< U”[ÈËÒÖÚÞâæêîòöúþ!%,37>BIPT[_fmqx|ƒŠ‘˜œ£¸ÄÐÔÛâæí 3Le|�º¾ÅÉÐí !%,37>ELSZov„’™ §®µ¼ÊÑãçîõù!-UY`wƒ‡‹�“—ž¢©°ºÇËÒÖÚÞåéðôûÿ  (,48@DLPX\dhpx€„Œ”œ ¨°¸¼ÄÌÔØàèðôü  (,4<DS[ckowƒ‹�—Ÿ£«¯·»ÃÇÏÞãëó÷ÿ '-39?EKQW]ciou{�‡�“™Ÿ¥«²¹ÀÇÎÕÜãêñøÿ %+17=DKRY`gnu|ƒŠ‘˜Ÿ¦­´»ÂÉÐ×Þåìóú     $ + 2 9 @ G N U \ c j q x  † � “ ™ Ÿ ¥ « ± ¸ ¿ Æ Í Ó Ù ß å ë ñ ÷ ý     & - 4 ; A G M S Y _ f m t S<U¤[VâCä9ç?ç¶ç+è1è¨èé#éšéêêëíí:ðãó¢ùLûMûNûy Xÿ¾¿ÀÁÂÃÄÅÆÇÈÄ#„$X&:0–1ì5’6“6=k=0>¶>ðçó¦ùOû} \ÉÈ#ˆ$Y&>0—1¢5´5Æ5Ø5ð5”6Á<ð<=p=4>º>@?Ç?P@Û@fAñA|BC C>EÂF`HäI‚KM¤N§UBV‘VpW\XHY4ZU\÷\F]å¾âÁ ß¾Û ==†BAº¾æ¾7»HEľžݾB@ù6HDç¾Þ<¹¾à¾5Ø ƾÜ; ??ECǾ þ:侸¾?>Þ¾ EB8á¾·¾ó9 o$¸)u‚‚´core_intrinsicsÁderive_clone_copy_internalsÁú Ì Ûë‹–ŒUðï‡G»ŸxiŸµÛë‹–ŒUð/v¬•[ó]´½Ûë‹–ŒUðƒTtG�#)ñüÂb%üóZ©0Ûë‹–ŒUðg©çÈwo ð$crate::assertÁÉ ‡T]�±ù]ä�panic_internalsÁƒgeneric_assert_internalsÁ±œÛë‹–ŒUðB!…»ó ñüúcJ¤0Ûë‹–ŒUð›(¹ãé«k9e,¤¤}”V¯ä�ö�ð‰âÛë‹–ŒUðq:¥”�„»º”üÓ‡/ü…}ê 8Ûë‹–ŒUð°€4 �[$crate::format_argsÁñ2è]Åõ‘] fmt_internalsÁfmt_arguments_from_strÁžœÛë‹–ŒUðï,ŸŸ NìÛüµ°2µŽ ]Α�‹Ûë‹–ŒUðUAQßð$Ñyq,ªú}©Ø ä�fmt_helpers_for_deriveÁ¢g¡gÛë‹–ŒUð�Øó•.±�*±üÖè+ü€Ü© aÛë‹–ŒUð0ºryBgêê—¨Ûë‹–ŒUðZêkw§æAÉì”ú…ÿ‚]´œÛë‹–ŒUð­v…ÜëkްÛë‹–ŒUð.Ë 7ë6pq,Å)õä�g¡gÛë‹–ŒUðVÎþKJ]šÏÉì¯)‡´œÛë‹–ŒUð ~ÄÕ j¢3¼Ûë‹–ŒUð^�î}‹u§ñüžb"Y0Ûë‹–ŒUð•k:ֳοñü�c%…0Ûë‹–ŒUðÅ‘%®Æêl⡜Õ%¬!ÿ‘zÑË)BwÔul{µ(BÕ%BZ¸m&VEL¿>h-<ÙÖÏ�ü/ cQ®4èD0žØ„­UŒ{€1Ä»¡%¼«+4�†£´G¯ÿ¦5¨ìƒdé6Ð+�;eüG•7gó¦ê:y8Ìe19éþ6É9ÌPû\Ä2L5¬k ”ºS;Ï:¨#àF\òþ=¾ÿT˜ióŠM>;¶03ÐñS?Zmœdd<ÎaBâñk7u¿tŽBˆ|N+Äí•Dœ+*»©Ñ4E0Y�÷ÜEÇEÒ1òÔMxF¨ç);¼t…CÀ(/;’0 NÒæ™žØ@æRúðªhæÙVärw§ òÄYÔbÄ-D°§™]pž8O’$Ô]šì¦bF|_šÕ5G¡mb¦jXåS²!Ud¯¿2™Ýý›fÎýÜ4’‡h¾cÕ{”#Ôµiè*ìœg½=¹jà?Óƒ�Lí(jTÜÓ«µT«Æh温ç Ü43mtæuPk•ý`o&®ç•ŽÉoTP‚ð3Ä=q�ÝÖ Ó¼¿áo°„‘0}6G‰s˜[¾šÚ!‹uPM ‰·-™zZ÷·D{ý h|^é#RUr}Ÿò¸nd³¤|„>Ä΢>:Èüìš=!žð�Èr–à]Á�À_wK—)üIƒÞ%j /Æ#þ„hܰ¸%âŃzä¿pxBâ†ì9âÆ2®éˆ±ùWwU‹X¶a$PG¯‹ì,4TÇ5yš�ÐxŽvÄaŒ€Gƒ+QÒJø‘¤x/©Äð—Ô’0‡áŒðS}_‘dÝÎï—S*½–ŒA÷žt™6'ž­Ôš¶™¹–ašffDävœ2M¾y‚ƒ“Р~¾ÚÙ%½±f£^ ®ËM?<•£rá¡×²÷J‰¥ Í,|¤,û²)qà©®Çû³vVJªðªù¬—„rÚ²2ï�äwª5и`�:ý.1�ºÖÇñÔåDn2»Ø’‰N&CW½*I°ô@“Ÿµ½[ø*8ÍÿƒÃ|ÌÚÉ?Ž"Ĭˆ˜eîÅÀÖC…Ж2ƆªÖ+c„ưOÏ3”ä ÆŠ@æ}ÍúEȈ÷[ÀEsö‘Êì IÈ›ìÖ ÃòàÇÍ4¬ÑÈ[8ÐâÝ™Í8‰£ÖD*�ÅŠÙyØ-ÀÏÐͲ·½aÛ6Ђ!¦¦Ïɼ2îàÓ” ÊŽ ÄGÁÓ�» (nXHcÔD![^›Ç¡Ë6�6R/ùÖH´Çeñ8=ÖM¹ `H;nÒ¼%"KðÏ1×øõa$ŒsšÚ||Ž€(¨±îÛxòBf)áQÛˆÒ½¥·±ßݬ6<ÁŠ”Þ…ÞÀ¶ 'ÇÓ@�Ý­PÅ2÷ràºk6›–“NáX|]�,šóúÎy˜7»‡•-Ý6;>„Ž•ñåz×Ëø›•ÁSçü¥.?9�]ç:\‘�öó%én±îY«ê�±{ýQ mët?`Y�ë²,ç8£,Êúßí¼é¦‚€ãHøçP¨ÖMçïðïÚmÌç€u²òš:ãB�tÆîöêá°EÿÀo¦÷6ýµ‹óò—Ì÷¸ü—¸ê³7ù¼0ŸX‡éÇ’ùx>¥5Æø{™ûT=©&4²·ø˜ßÊ8ÃÇ[=ýB³<^BþFîeûûyŒÿð*×xè�ñ€ÿùuºšv>©p_›Æ²{Ih¤nEÔ-¨ÚiÜK0xk¯oFuµká1+, 3 %úFÕ²_¿ /×È»^Í]ÿ (ösbÈìü 3ç“í�™‹� Ÿ¿6 W½9|ƒ‚ò®æÞ\íÇ$s`0á~›¯Ò†ï¨Ðɶ'Ñ4µæ­³Ï aá?¹·0ûÖdošˆæþÜ8#ŸQÛ'•Ù›ã§9ñ(�‚>ÞÒÿL@*ÙaÈ#Š}Ý,+cµú¯G�Fÿ,K–W¥Ò>Ó0 PL[�”©”0ïøh¼¬÷„35ó+’�÷4 ëDŸkíŽÐ3Ïþ‚à X ½6‡Ä"¯`Ò6“<ϵJÅ?8ìéoù_:ûéCGA}CÚ:“'æÏPìS9<᫹]¡`³l;çˆ1,ò½¸?ÇNŸ=ˆût0A‰–8êΗ«A}À Ý!f/ÆC«DK�|E-��%>ÖE£©;6Ï ÛG ao^ÏXEGG ‡„ÝŒaHéEDÒ„ÑZÅIŸ~ÐTÁÛP�»œNW«Q+Æ3JÐÖÕtS�âü‰÷›T剽ÈåwU­UÐ?üâÊTUým“DÚüÛW•5añË"U)ÖDýV…%YâÙó™\ACZÏêèg2k�-Zá ú|¥æ¸XCŽ<9“°¢ì]½Û”A&B”º[u“—C 4&aYïž±EѱÈÞ`©V1 ~)³aÂò vcÝh¬jë”çÅdo}“²o…éd�½ÃöW¸;(e©£üO–›f/ƒ‘!�•KîhíÃâ™·í6(j`r&UŽlíptvŒ*û[nW96J©ÝŒqÃÆ2HL«3r™ƒúÚV:'qs‡NÞ5[TÓŸsQ»{<d�scpF�²•v/˜Jwå3!²wO(ý!¼5Wgwóç»|Ã0Ùt]llþ)‰¥zGûKzÇ9+ã{ƒÿŠ-Án. |‡ @S€æ,}©˜ö÷NÛ�¸xQ+t ŒD¶{:m˜ú+ÚM�¾�dؼÑ�§ ¾h\Hç[|sòÚNZÏróæ .Þãà„iÜ<ÕhÔèw…Û†Sq“ÙS„wrêï*�‡�w¦@Ʋýˆ£53³hO‰¤H�(ÔŠk£IbC¢ÄÚ‹;Á=Ûë‹–ŒUð¹úÈë�cCV¶cȰ¹ŠSÇâ4:¹ÇŠ£áô>®ÇŽ�/“t&þ§×v”õnþ â,<‰•%½™>½#†!•¯Kò~UC–9rÏŽÛ1ñ�ŠìYìÃÖ–=<¶?ò”C=6ÚC©Ûœé‰ ¥áwað ÁŸ8²ž~ ¢_¹•�íx£ÃA7Ê’z­™¥ëLâ–{õ¦K‘p¢´r¨Ã%¢-æÕ¬“5‘(ÞݯS“ }ÀôU°L§pmÞžw° {½�€d¬Ý³/…€þբ봑Ðôj߄ӵÓðO�V’ösÀ÷¨cäo¹mRØgñÀ¹ó}Œ¡…ƒ’»#îZX7¼5hK@R…½-Å­,°oÝF¾ ç4rZ9Òß¿Åô³_¼ DHÀ1a')I»�½ß“ÇýÑùéÁ§Í‚þM‘Äc ¡,_ÄEÔ&1%é/ŠÉ¯—CW×Êo)Óp«ÉÉ1•4Ë÷*ÍÑQjçO•í#Ôåèʽ²äÐÕÉ]Ÿ2º+ôÞÚÑ-n0e)8Ûù“ž„5®AÜ÷R¾8µc§•Û¿r¶'eR‹²Þýªl6"Û<Îßm?¡7P‹[áI>—LÁ˜Y0áã'Z…»;$uç§Z§C�èÿÚÀñ,¼cXëÇW<‡Ž´ìWÆsÝõG†íµ¬U"«ÔEí©mM?Oñaƒ*4�TlñOÑžèóÁEô‰QbŠÌ§ ßöUÒûùËC÷çøÃÊ'VzøÝÎcñ `2ú�“ßÈYo5ÿý ¸ˆ_ee3ÿtÿÿÿiÿÿÿ9ÿ\ ZR6.N3ÿÿ5`VIwKq5ÿ uj"ÿ ÿ1BPÿÿQ Ny} ÿ*[Nÿÿ5>,ÿÿÿÿÿLÿÿÿÿÿÿ;ÿÿbÿÿÿSÿÿ,ÿ_ÿnÿjviiT:ÿsAkH-ÿÿÿÿÿ[ÿybvÿ;5 qÿÿÿ0- /, .- /!PHKN(QTK-' 8.1)#8]K!E ,,LF*>,, -.>,,.1FHIS & ,,""++ ,C$ GC.7+ !.EG(&-'67,DFJP1 '6E9 $'''*LL(.-AD&LF*1((7 - ::  GG7 - ,, E?K'7 - 88 F**          3.P<<N%M<<N2N<<N* 11111'NA1H:NMA*H;#; H.E70 @ EELF#D7 6% $70)4GAC4DF?CEDDDEB?*TMVVVE01' GDDE; AL*<;1:)( $?:AE. $?9&9&BJE<E0 .% BCAGE5 .%/ % SA1 $$&5TMVVVER',KH?H 9A03 ;P# *Q&7J )"+"+"+ -1&,SND6z{!\)V I!)d SO. +---/-.B#$$M#C*Q&N7J &"+"+"+ .0 !!!"*.?#$$L!U^#J˜ ¦ ¹ñ>�?[TyFŸ!°ÊÜl -# îîx86_64-unknown-linux-gnuÁ–€R†�Ð÷BÝû>subtleÁ-d2b64395c76666cbÁÛë‹–ŒUðâïRóŽ œ¬bbuÎuðeeùùÂÊÍÍÍÅÍfÅÍfe�ËùÎ÷ÍÎÎçÎêêÍÍçÍçÍçÍ�ÍçËç–ÌÍäچ͚͚ÃÉÍ�e˯áÂÂÆÎÆœÂÍÆbçͦçËÚõFŽFÒÒÒFrust-end-file