Files
archy/core/target/debug/deps/libzerovec-187d4334a3106b07.rmeta
T

5631 lines
739 KiB
Plaintext
Raw Normal View History

2026-01-24 22:59:20 +00:00
rust
#rustc 1.93.0 (254b59607 2026-01-19)Á³VOÐêùÿ²?ÑL¼§Ì±-a7a40eb546f9e2b0ÁzerofromÁ9k,94äwâD~“ìF-e7a4aaab09db7e3aÁzerofrom_deriveÁb«íºê3
,³VˆX-03b1dd1f2d87713aÁë&Gf·Ã ¬ëñq:¤»b-bb76018b1173caf6Ázerovec_deriveÁÎ¥ìóJÏ?æE²ËÖªÜl-f6b5d17a820a0cf7ÁyokeÁÌFȯÁrJ¬oahÌJi-17a2be691e559186Ástable_deref_traitÁ•Ú¨ûEmðYlØ?"e›§k-80e318edb62c0e9cÁ yoke_deriveÁbŽÆÚÒ
2026-01-24 22:59:20 +00:00
¨à‹x -5e7d4687001d5481Áá,ˆL<çKá<ñKŒçKBoxÁ«<…á<Œ… ManuallyDropÁd‡áŒätestsÁ,ágà$ÖghashmapÁ<½L<ŸLÉL©LœŸL
äL<ÌLá<ÖLŒÌLmap2dÁ,‡M<ïLá<ùLŒïLsamplesÁ<£Mà$”MY get_serializable_bytes_non_emptyÁüÅÇ <ªÇá<´ÇŒªÇXownedÁ,÷áŒÔXdatabakeÁDʱ¤¯XserdeÁ,ó׌ÛXVarZeroVecOwnedÁ|ßጼ½±±¤Ñ½×,•×<‡Œý¾à$–à$‹½¢á<…Œû½­Ñ<­áŒ­½Ÿ<—጗½¯,éºà$Þºà$‡àcustomÁ4Ì¡¾¥ðáŒÈ¥œá¥ä«<…á<Œ…¥áŒ¶¥œáŒë¥­á¥memÁ¿áŒ¡¥encode_varule_to_boxÁ¤”%<ù$á<ƒ%Œù$¥à$“Xà$ˆX ZeroMapKVÁLž  á<„ Œú  ZeroSliceÁLÏ  á Œ¯ ZeroVecÁ<Ú &á$"$
test_utilsÁTºà¯,ÈX
à$½X
õ
¤¼áŒ˜âZeroMapBorrowedÁ|ö  á ŒÒ â¾  < á<— Œ âZeroMap2dBorrowedÁŒè  á ŒÂ âZeroMapÁ<â  á ŒÂ â ZeroMap2dÁLë (á&$à$»Y à$Y Š ¾   á ŒÑ Š <—  á< Œ÷ Š ¦ á ZeroHashMapÁ\äO<¶OÉLÀOœ¶O<¤P<÷Oá<PŒ÷O¦LâP<³Pá<½PŒ³P´ borrowÁ4óR<ÌRá<ÖRŒÌR´ boxedÁ,¬S<…Sá<SŒ…S´ ×,ÞS<¾S×<ÈSŒ¾SmapsÁ$ŠT<îSá<øSŒîSú|×b<¤bá<®bŒ¤b¯,Œ¥à$¨¤³cowÁ
VarZeroCowÁ
'aÁ

@
marker1Á
RawVarZeroCowÁbufÁȨ±È¨± parse_bytesÁfrom_bytes_uncheckedÁ new_borrowedÁ"¨"±"is_ownedÁ"as_bytesÁ"from_rawÁ(û(Š+¨+±+š+0¨0±0ï 4¨4±4Í
8¨8±8Õ <¨<± ?¨?±?¤ 
C¨C±CÐG¨G±Gencode_var_ule_as_slicesÁJJimpl FnOnce(&[&[u8]]) -> RÁGencode_var_ule_lenÁGencode_var_ule_writeÁO¨O±O zero_fromÁS¨S'bÁS±S
varzerovecÁX
componentsÁYYYYYYYYVarZeroVecFormatÁaIndexÁaLenÁY
IntegerULEÁdTOO_LARGE_ERRORÁdSIZEÁd MAX_VALUEÁd
iule_to_usizeÁdiule_from_usizeÁYjjœYmn mœp Yrs rœu Yw·wÍwØwèwüY} }·}Í}Ø}è}üY ·ÍØèüY¨Y¨ðÈY¨ð>Y ¨ð Y
ž¨žžðž©¢ ¢ žparse_bytes_with_lengthÁž»ž from_bytes_unchecked_with_lengthÁž¾ žis_emptyÁžgetÁž
get_uncheckedÁžget_things_rangeÁžget_indices_sizeÁžcheck_indices_and_thingsÁž£ ž
indices_sliceÁY ±¨±±ð± Y ¨ð½¥  size_hintÁY
½¨½½ð½¾ Y¨ÂÂðÂ
binary_searchÁÆ Âbinary_search_in_rangeÁÈ YʨÊÊðÊbinary_search_byÁÎimpl FnMut(&T) -> OrderingÁÊbinary_search_in_range_byÁИ Ð Ð Ê binary_search_in_range_uncheckedÁÔ˜ Y'write_serializable_bytes_without_lengthÁÖÖÖðYwrite_serializable_bytesÁÚÚÓ!ÚðY'compute_serializable_len_without_lengthÁÞÞÓ!ÞðÞ Þ Ycompute_serializable_lenÁääÓ!äðä XerrorÁéééìÍX
lengthlessÁîîîîîîôôðô
as_componentsÁ÷¨ô©ù¨ù ô»ôfrom_bytes_unchecked_mutÁôôŠôget_bytes_at_mutÁXî 
  
 VarZeroSliceÁð
 entire_sliceÁð new_emptyÁ‰$š¨»¾ é£ Ÿ¤ùŠ
as_varzerovecÁ¤¨©¦¨¨¨ð¨§¨Á­­ð­°˜ ­º ²˜ ´´ð´validate_bytesÁ· ´»´Š»»ð»Ø»öÀÀðÀÕÄÄðÇÇðǤ ËËðËÐ ÏÏðÏÍ
ÓÓðÓXœ×××××××××
VarZeroVecÁà
à¨ààðàì×VarZeroVecInnerÁæ¨ææðæBorrowedÁê
êì×í¨ííðíÈ×òòðòÍ×ö¨ööðöï×ûûðû>×ÿÿðÿšÿר𠩻as_sliceÁû‰$¤×¨¤ðÕרð×Ó!ðÕ × ŸŸÓ!ŸðŸÍŸ ŸÕ¥ ¥ ×
¨¨¨¨ð¨¤ × ­¨­­ð­ÐXXXXXXXXXX X
zerovecÁ½î¾¾¾¾æ Â
ÂÂì¾ÆÆ²&Æ
as_zerovecÁƩƻÆfrom_ule_sliceÁÆŠÆ as_ule_sliceÁƾ Æé¾ÑÑùÑ get_as_arrayÁÔÍÔ Ô Ô Ñ get_subsliceÁÑ get_ule_refÁÑcastÁÛÑtry_as_convertedÁݰ2ÑfirstÁѸ Ñ£ á¨Ñ split_firstÁ¾ä¨ää½ä¥ äÖ¾ê¨êê¾ ¾î¨îî next_backÁ¾òò§ô ¾ööøimpl FnMut(T) -> OrderingÁø ¾ûû¯(û»¾ÿ¾ Õ¾
Õ¾ ¨Õ¾ ¨Õ¾
;¤ ¾Ð¾˜˜¾>½½½½½½½½½½ ½
½ ½Ž ª¨ªª¨ª¿ªmarker2Á½°¨°½³¨³½¨š½EyepatchHackVectorÁ»»á½¾¨8¾as_arbitrary_sliceÁÀ¨¾´-¨¾truncateÁ½Å¨ÅÅȽɨÉɽÍÍͽнҨҤÒÒÕ½ ××Õ½
ÚÚÍÚ ÚÕÞ ½ à¨àà>½ ä¨ää¤ ½
è¨èèнì¨ìì½ð¨ððï½ô¨ôô ô const_lenÁôÖô©ô»ô´-ôûôas_maybe_borrowedÁôowned_capacityÁ½¨½¨½¨try_from_sliceÁˆ ½Š¨ŠŠclearÁŠ truncatedÁ½ zerosliceÁ½0uleÁcharsÁ from_alignedÁto_charÁš¯( ULEÁ to_unalignedÁfrom_unalignedÁ¡¤ £ÐÎ¥¥¥¥¥¥¥¥EncodeAsVarULEÁ­­û¯š¯¢­Ã² ³ ­Üµ ¥··û¹š¹¢¥¼¼û¾š¾¢¥ÁÁûÚâ¥ÆÆûȚȢÆÃÆÜ¥ÍÍûϚϢÍÃÍÜ¥ÔÔÔðÔûؚآÔÃÔÜ¥ÝÝðÝûàšà¢ÝÃÝÜmacrosÁåimpl_ule_from_arrayÁmultiÁçççççççîLENÁîFormatÁîcompute_encoded_len_forÁñ î&new_from_lengths_partially_initializedÁó¨ó î set_field_atÁööÓ!îvalidate_fieldÁùî get_fieldÁûî»îŠçÿæCÿñCÿÍçBlankSliceEncoderÁƒ
ƒìçûš¢ÃÜçŒæCŒñCŒ¯( Œ»nicheÁ
NicheBytesÁÍNICHE_BIT_PATTERNÁ NichedOptionULEÁ¨8ÍãF  validÁ£¨8£Í£Í§¨8§Í§ §ù§­¨8­Í°¨8°Í°È´¨8´Í´Õ¸¨8¸Í»¨8»Í»¯(¾ À¨8ÀÍÀ>Ĩ8ÄÍÄâ>Äí>Ä? ÊÊÍÊIntoIterÁʽʊ ä ÐÐÐÐÐÐÐ OptionULEÁ×
ר8×ì×íÐܨ8ÜùÜ Ðà¨8àÍÐã¨8ã¯(å Ðççâ>çí>ç?Ðì¨8Ðî¨8îÈÐñ¨8ñÕÐô¨8Ð OptionVarULEÁö
ö¨8öìöíöîÐü¨8üÐ ÿ¨8ÿÍÐ
¨8¯(»Ð ¨8ûš¢ÃÜÐ Ž¨8ŽÕÐ
¨8Ш8¤ Ш8ÐplainÁ Í Š Ã$¤Í¤¯(§Í§ §ïª impl_byte_slice_sizeÁimpl_const_constructorsÁimpl_byte_slice_typeÁimpl_byte_slice_unsigned_typeÁimpl_byte_slice_signed_typeÁ±¯(³â>³í>³?¸¯(¹ »â>»í>»? À À¨G 
į( Æâ>Æí>Æ? 
Ëâ>Ëí>Ë?Ïâ>Ð Ïí>Ï?Ôâ>Õ Ôí>Ô?Û¯(Ýâ>Ýí>Ý?â¯(äâ>äí>ä?slicesÁééëëÍë ë¯(éððÍð ðâ>ô ðí>ð?éøøÍø éü¯(ý ü©ÿ ü»é¯(» tuple_uleÁtuplevarÁ tuple_varuleÁvartupleÁ  Ó! ± ¯( »¥Ó!¥¥±¥û©š©¢¥Ã¥Ü®¨®Ó!®¦W®±® 
  
â>į(Äparse_bytes_to_sliceÁÄslice_from_bytes_uncheckedÁÄslice_as_bytesÁAsULEÁÉâ>Éí>É?EqULEÁ
SliceAsULEÁÎslice_to_unalignedÁÐЄZVarULEÁÓ¯(Ó©Ó»ÓŠÚÍÜparseÁÝÜlengthÁß
yoke_implsÁââââââââââì¨ììØì transformÁìtransform_ownedÁìmakeÁì
transform_mutÁóðó¤âö¨ööØöˆ\ö™\ö°\ö¼\ýðý¤â¨Øˆ\™\°\¼\ð¤zerofrom_implsÁŠ Š Š Š Š Š Š Š Š 'zfÁŠ ½^Š ½^Š Ÿ ½^Ÿ Ÿ 🠊 ¤ ½^¤ ¤ 𤠊 © ½^© © __zerovec_internal_reexportÁ´ vecsÁ 
   VarZeroVec16ÁÄ ¨Ä  VarZeroVec32ÁÇ ¨Ç VarZeroSlice16ÁÊ VarZeroSlice32ÁÌ  YIndex8ÁÐ
YYYÔ ÈYÖ ÍYØ ¢Ù µYYÜ ÕYÞ ˜Yà ¤ Yâ ÐYIndex16Áä
YYYè ÈYê ÍYì ¢í µYY ð ÕY!ò ˜Y"ô ¤ Y#ö ÐYIndex32Áø
Y$Y%Y&ü ÈY'þ ÍY(
¢
µY)Y*
ÕY+
˜Y,ˆ
¤ Y-Š
ÐYVarZeroVecComponentsÁŒ
¨Œ
Œ
ðŒ
¾ Œ
indicesÁŒ
thingsÁŒ

Y.
¨

ð
ÍYVarZeroSliceIterÁ
¨

ð
Ì
ö
 start_indexÁY/ 
¨ 
 
ð 
ÍéVarZeroVecFormatErrorÁ¥
MetadataÁ¦
¥
ValuesÁ¨
¨
ìé«
ÍîVarZeroLengthlessSliceÁ­
­
ð­

­
‰&î²
²
ðîµ
µ
ðµ
Õî¹
¹
ð¹
˜¾
ZeroSliceIterÁ½
½
¨½
½
ì¾Â
¨Â
Â
ÍCharULEÁÆ
Æ
ìÈ
Ê
ÍÍ
ÕÏ
˜Ð
 
Ó
ÈÔ
  ×
¢Ø
µ
from_arrayÁÚ
ÍÚ
Ú
Ú
Ú
çMultiFieldsULEÁà
à
æCà
ñCà
ìçå
æCå
ñCå
çé
æCé
ñCé
é
Õí
çï
æCï
ñCï
ï
˜ NichedOptionÁô
ô
¨8ô
Íô
ì
ù
¨8ù
Íù
ù
Í þ
¨8þ
Íþ
  ¨8 Í  È 
ˆ ¨8ˆ ͈ Œ ¨8Œ ÍŒ Œ Õ  ¨8 Í  ˜ ¨8 Í  ¢ µ ¨8 Í  ¤ ¡ £ ¨8£ Í£ £ Ч  RawBytesULEÁ©
© Í© ì¬ ® Í® ® Ͳ Ͳ µ ͵ µ Õ¸ º ͺ º ˜½ ¿ Í¿  Í  ÈÅ Å È ÍÈ Ë ÍË Ë ¤ Î  Ð ÍÐ Ð ÐÓ !Õ ÍÕ Õ ¢Ø µ"Ú Ú as_unsigned_intÁÚ ¨>Ú ·jÞ ÍÞ Þ Þ Þ #ä ä ³qä ¨>ä ·jè Íè è è è $î î ³qî ¨>î ·jò Íò ò ò ò %ø ø ³qø ¨>ø ·jü Íü ü ü ü &  ï' â>  í> ?()  
from_unsignedÁ*Ž Ž ï+ â>  í> ?,-  ós.š š ï/ â>ž  í> ?01£ £ ós2¦ ¦ ï3© â>ª © í>© ?45¯ ¯ ós6² ² ï7µ â> µ í>µ ?89» »  from_signedÁ:¾ ¾ ï;Á â>Â Á í>Á ?<=Ç Ç ¬v>Ê Ê ï?Í â>Î Í í>Í ?@AÓ Ó ¬vBÖ Ö ïCÙ â>Ú Ù í>Ù ?DEß ß ¬vFâ try_from_bytesÁGä ¥xHæ ¥xIè ¥xJê ¥xKì ¥x Tuple2ULEÁî
î Ó!î ¦Wî ìî íô Ó!ô ¦Wô ¯(ø Ó!ø ¦Wø â>ø í>ø ?þ Ó!þ ¦Wþ Í
Ó!
¦W
Õ
Ó!
¦W
Ó!
¦W
¤ 
Ó!
¦W
Ð
Ó!
¦W
È
Ó!
¦W Tuple3ULEÁ˜
˜
Ó!˜
¦W˜
k˜
ì˜
í˜
î  
Ó! 
¦W 
k 
¯(
¥
Ó!¥
¦W¥
k¥
â>¥
í>¥
? ¬
Ó!¬
¦W¬
k¬
Í ±
Ó!±
¦W±
k±
Õ

Ó!
¦W
kº
Ó!º
¦Wº
kº
¤ ¿
Ó!¿
¦W¿
k¿
ÐÄ
Ó!Ä
¦WÄ
kÄ
ÈÉ
Ó!É
¦WÉ
k Tuple4ULEÁÍ
Í
Ó!Í
¦WÍ
kÍ
Í
ìÍ
íÍ
îÍ
ï×
Ó!×
¦W×
k×
í~×
¯(Ý
Ó!Ý
¦WÝ
kÝ
í~Ý
â>Ý
í>Ý
?å
Ó!å
¦Wå
kå
í~å
Íë
Ó!ë
¦Wë
kë
í~ë
Õñ
Ó!ñ
¦Wñ
kñ
í~ö
Ó!ö
¦Wö
kö
í~ö
¤ ü
Ó!ü
¦Wü
kü
í~ü
ÐÓ!¦Wkí~ȈÓ!ˆ¦Wˆkˆí~ Tuple5ULEÁ
Ó!¦Wkí~—BìíîïðÓ!¦Wkí~—B¯( Ó! ¦W k í~ —B â> í> ?©Ó!©¦W©k©í~©—B©Í°Ó!°¦W°k°í~°—B°Õ·Ó!·¦W·k·í~·—B ½Ó!½¦W½k½í~½—B½¤ !ÄÓ!ĦWÄkÄí~Ä—BÄÐ"ËÓ!˦WËkËí~Ë—BËÈ#ÒÓ!Ò¦WÒkÒí~Ò—B Tuple6ULEÁØ
ØÓ!ئWØkØí~Ø—BØðØìØíØîØïØðØñ$æÓ!æ¦Wækæí~æ—Bæðæ¯(%îÓ!î¦Wîkîí~î—Bîðîâ>îí>î?&øÓ!ø¦Wøkøí~ø—BøðøÍ'Ó!¦Wkí~—BðÕ(ˆÓ!ˆ¦Wˆkˆí~ˆ—Bˆð)Ó!¦Wkí~—Bð¤ *Ó!¦Wkí~—BðÐ+ŸÓ!Ÿ¦WŸkŸí~Ÿ—BŸðŸÈ,§Ó!§¦W§k§í~§—B§ð Tuple2VarULEÁ®Ó!®¦W®ñC®®®¶C´ Ó!¦WñC˜Œ¡Œ¼Ó!¼¦W¼ñC¼¯(À ¼»Â  ÅÓ!ŦWÅñCÅÍÊÓ!ʦWÊñCÊÕÏÓ!ϦWÏñCÓÓ!Ó¦WÓñCÓ¤ ØÓ!ئWØñCØÐÝÓ!ݦWÝAEÁÝBEÁÝñCÝûãšã¢ÝÃæ ÝÜè ê¨êÓ!ê¦WêèŽêòŽêñCê Tuple3VarULEÁòÓ!ò¦WòkòñCò˜Œò¡ŒòŠò¶Cú  üÓ!ü¦WüküñCü˜Œü¡ŒüŠ
Ó!¦WkñC¯( »   ŽÓ!ަWŽkŽñCŽÍ Ó!¦WkñCÕ
šÓ!š¦WškšñCŸÓ!Ÿ¦WŸkŸñCŸ¤ ¥Ó!¥¦W¥k¥ñC¥Ð«Ó!«¦W«k«èŽ«òŽ«CEÁ«ñC«û³š³¢«Ã «Ü¸ º¨ºÓ!º¦WºkºèŽºòŽºÒ“ºñCº Tuple4VarULEÁÄÓ!ĦWÄkÄí~ÄñCĘŒÄ¡ŒÄŠÄÞĶCÎ ÐÓ!ЦWÐkÐí~ÐñCИŒÐ¡ŒÐŠÐÞÚÓ!Ú¦WÚkÚí~ÚñCÚ¯(à Ú»â â åÓ!å¦Wåkåí~åñCåÍìÓ!ì¦Wìkìí~ìñCìÕóÓ!ó¦Wókóí~óñCùÓ!ù¦Wùkùí~ùñCù¤ Ó!¦Wkí~ñCÐÓ!¦Wkí~èŽòŽÒ“DEÁñCûš¢Ã Ü ˜¨˜Ó!˜¦W˜k˜í~˜èŽ˜òŽ˜Ò“˜£™˜ñC˜ Tuple5VarULEÁ¤Ó!¤¦W¤k¤í~¤—B¤ñC¤˜Œ¤¡Œ¤Š¤Þ¤¿¤¶C° ²Ó!²¦W²k²í~²—B²ñC²˜Œ²¡Œ²Š²Þ²¿¾Ó!¾¦W¾k¾í~¾—B¾ñC¾¯(Å ¾»Ç Ç ÊÓ!ʦWÊkÊí~Ê—BÊñCÊÍÒÓ!Ò¦WÒkÒí~Ò—BÒñCÒÕÚÓ!Ú¦WÚkÚí~Ú—BÚñC áÓ!á¦Wákáí~á—BáñCᤠ!éÓ!é¦Wékéí~é—BéñCéÐ"ñÓ!ñ¦Wñkñí~ñ—BñèŽñòŽñÒ“ñ£™ñEEÁññCñûýšý¢ñà ñÜ #¨Ó!¦Wkí~—BèŽòŽÒ“£™æŸñC Tuple6VarULEÁÓ!¦Wkí~—BðñC˜Œ¡ŒŠÞ¿þ¶C  $¢Ó!¢¦W¢k¢í~¢—B¢ð¢ñC¢˜Œ¢¡Œ¢Š¢Þ¢¿¢þ%°Ó!°¦W°k°í~°—B°ð°ñC°¯(¸ °»º º &½Ó!½¦W½k½í~½—B½ð½ñC½Í'ÆÓ!ƦWÆkÆí~Æ—BÆðÆñCÆÕ(ÏÓ!ϦWÏkÏí~Ï—BÏðÏñC)×Ó!צW×k×í~×—B×ð×ñCפ *àÓ!à¦Wàkàí~à—BàðàñCàÐ+éÓ!é¦Wékéí~é—BéðéèŽéòŽéÒ“é£™éæŸéFEÁéñCéû÷š÷¢éÃú éÜü ,þ¨þÓ!þ¦Wþkþí~þ—BþðþèŽþòŽþÒ“þ£™þæŸþ›§þñCþVarTupleÁŽÓ!ަWŽëŽvariableÁÓ!¦WÍÓ!¦WšÓ!š¦WšÕžÓ!ž¦Wž˜¢Ó!¢¦W¢¤ ¦Ó!¦¦W¦Ð ªÓ!ª¦WªÈ VarTupleULEÁ®Ó!®±®ë®‰©
³Ó!³±³Í ·Ó!·± ºÓ!º±ºÕ
¾Ó!¾±¾˜ÂÓ!±¤ ÆÓ!ƱÆÐUleErrorÁÊ
InvalidLengthÁË˾ Ê
ParseErrorÁÎÒÈÔÍ ×Õ
Ù˜

%
&
)
*
/
7
7
7
;
;
B
B
F
F
J
J
J
M
N
N

°
»
¼
Á
Æ
Æ
È
È
Î
Î
Ð
Ð
Ô
Ô
Ö
Ö
Ú
Ú
Þ
ä
í
í
í
ü
ý
þ
ÿ

œ

ž
¡
¢
£
«
«
¬
¬
°
°
²
²
·
¹
º
¿
Ã
Ã
Ê
Ê
Î
Î
Ò
Ò
Ò
Ö
ñ
ò
õ
õ
õ
û
ÿ
ƒ

Œ







Ÿ
¥
¥
¬
¬
±
±
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ó
Ô
Ù
Ú
Û
Ý
ß
à
ã
è
é
í
ñ
ô
ô
ø
ý
þ
ƒ
ƒ


Š
Š
Ž
Ž







˜
š

º
À
Ä
È
Ì
Í
Ï
Ï
Ï
Ð
Ö
Ö
×
×
Ù
Ù
Ù
Ú
Þ
Þ
ç
ç
ë
ë
ï
ø
ü
ý
þ
ÿ


¢
¢
¤
¤
¯
¯
¯
²
µ
µ
¹
¹
¹
¼
¾
¾
¾
Á
Á
Ã
Ã
Ã
Æ
È
È
È
Ë
Ì
Ì
Í
Ï
Ï
Ï
Ò
Ó
Ó
Ô
Ø
Ø
Ø
Û
Ü
Ü
Ý
à
à
à
ã
ä
ä
ö
ö
ù
û
ý
þ






Š




¦
¦
¦
¬
³
·
·
¾
â
â
â
å
ð
ó
ó
þ








Œ






˜
˜
¢
£
¦
²
¹
Å
Ü
ã
ï
ý
ÿ



£
¤
©
©
©
¬
­
­
Å
Æ
Ç
È
Ï
Ò
Ô
Õ
Ö
×
Û
Û
Û


¤
¨
Õ
×
×
×
Ù
Ù
Ý
Ý
ß
á
á
ã
ã
é
ë
ë
ë
í
í
ñ
ñ
ó
õ
õ
÷
÷
ý
ÿ
ÿ
ÿ









˜
˜
˜
¤
¤
¤
¬
¬
¬
¸
¸
¼
Å
Å
Å
Ë
Ë
Ë
Î
Î
Ð
Ô
Ø
Ø
í
í
ó
ý
ý
ý






¡
¡
§
§
±
±
±
¸
¸
½
Å
Î
Î
Ó
Ó
Ø
Ø
Ü
æ
ð
ú
ã
å
ç
é
ë
í
÷





Œ
Œ



¤
°
°
°
µ
µ
¾
¾
Ã
Ã
È
Ü
ê
ê
ê
ð
ð
û
û



Ÿ
¯
¯
¯


Ã
Ã
Ê
Ê
Ñ
í
ÿ
ÿ
ÿ




ž
ž
¦
º
»
À
Â
É
É
É
Î
Î
×
×
Ü
Ü
ã
ã
ã
æ
è
è


ƒ







¤
¤
ª
ª
³
³
³

¸
¸
Ö
×
Ø
Ù
à
â
ë
ë
ë
ò
ò
ÿ
ÿ








¹
º
»
¼
½
Å
Ç
Ñ
Ñ
Ñ
Ù
Ù
è
è
ð
ð
ý
ý
ý



ª
«
¬
­
®
¯
¸
º
Å
Å
Å
Î
Î
ß
ß
è
è
÷
÷
÷
ú
ü
ü





¡
¥
¥
©
©
­



½
½
Á
Å
Å
É
É
Ó
Õ
Õ
Õ
Ø
Ø
Ú
ad­ÄÉÍÎÓ¨âÍáuê\ŠØ…ÅÄ£ÆÞ£ÆÞ

@¿#à›6¢¨±ìéÆúéÆ ¨¡Çà`éÆžéÆéÆ£éÆÉéÆéÆÃ鯭鯡Ç
鯍¡Ç


@¿#à›6¢¨±¨

@¿#à›6¢¤èÈþÐ Ð Ñ “b aŠQ9æàõá·ÉÞ·Éà`·É»b·É¬â·Éž·É·É£·ÉÉ·É·É÷Éþä ä å c ÁÀ;A®Î)áÏÊÞÏÊà`ÏÊ»bÏʬâÏÊžÏÊÏÊ£ÏÊÉÏÊÏÊÃÏÊþø ø ù ˆd –·>è{z.;áçËÞçËà`çË»bçˬâçËžçËçË£çËÉçËçËÃçËa·ÉaÏÊaçËdd© © ª ên¬ ì Ö±ËúÇÒOUd© © ª ên¬ ì Ö±ËúÇÒOUà`Œ
Œ
ƒe
¾ Y
¿eY
ÎeY

Y2fm?Ž ~¨ðþªÎÞªÎĪÎà`

‡f
ÌYž
öYŸ
ÇfYŠ5½Uf¨ý΃ÏÞK±Ï©K±Ïà`¥
¦
§
g¨
©
°gª
ìßzþáJÇÏžÐå`žÐ¬â­
­
Øg°

î±
‰&î(£Tªt_ðžúÐúУúÐÓÝ%
‰&Ž6Òßñ’K³Ñ¹Ñ¦˜àÑžàÑàÑ£àÑÉàÑàÑÃàÑà`àÑñàÑàÑÞààáÔ*åì 6
ä>(ùOè¨ý΃Ïà`ààáÔ*åì 6
ä>(ùOè8ý΃Ïú…Ó ¨Ý%
‰&Ž6Òßñ’Ký΃ÏÄÊÓìÊÓžààáÔ*åì 6
ä>(ùOè¨ðààáÔ*åì 6
ä>(ùO褭ճգ…ÓžààáÔ*åì 6
ä>(ùOè8­Õð 8
Ó!žààáÔ*åì 6
ä>(ùOè8ýγÕÓ!ÍÉ…Ó…ÓÃ…Óà`½
½
¾
åhÁ
ì¾ žóP¾7Šyô¨ýÎÞKÆ×©KÆ×òJÆ×ÓÂÂÃæ Åì¾ ÈE(³Ñ£©Øž©Ø©Øž©Ø
³ÑžÂÂÃæ Åì¾ ÈE(ýΪªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
¨ýΞÄÙÙà`©ØÉ©Ø©ØÃ©Øñ 8
ýÎÊÙÄ 8Ù¨âÄÙÄÙìÄÙÞÄÙñÄÙÙà`ªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
8ýΣ¸ÛžªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
¨­ÕªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
¤­ÕžªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
8­Õ 8
­Õž¸ÛýÎÍÄÄÙÉÄÙÄÙÃÄÙñÄÙÓÚúÄÙ ¨ÓÚà`Æ
Æ
Ç
´iÈ
ì fð°m8â›Æ¬âüÞžüÞüÞ£üÞáüÞÞüÞþüÞ»büÞÄüÞÉÉüÞüÞÃüÞ­³Ñ³Ñ­ 8ýÎýέ 8 8­Õ­Õ­ 8
ýÎÙ­¸ÛÙ­ 8
—BÝ%
‰&Ž6Òßñ’KýγխÊÓ˜Ô¬âà
à
á
åjä
ìç ¹ƒ}@e`ýÄæCñCžýáýá£ýáà`ýá­ƒƒæEìç ¸þøaŸþ
Óýáà`ÆG ãF¢úG8­ª´¼”Œ0¨8Íþ­ãÞ­ãž­ã­ã£­ãÄ­ãà`ô
ô
õ
ûkø
ì &І
¸‰ôPæãÍþ´äÞ´ä¬â´äž´ä´ä£´ä»b´äÉ´ä´äôäÄ´äÉ´ä®Jô
ô
õ
ûkø
ì &І
¸‰ôP³ÑÍà`×רûJÚìÐÛíÐ ÉZ_Û#ŸåúæãÄ©æÉø°ú°û°Ðü°ý°þ°ìHˈXêE>³Ñþ©æÞ©æž©æ©æ£©æà`öö÷ÞLùìÐúíÐûîÐ Fé­4yÊdîæãÓüç­ýæöö÷ÞLùìÐúíÐûîÐ Fé­4yÊdî¨8žüçüç£üçÉüçüçÃüçà`© © ª ên¬ ì Ö±ËúÇÒOUͬâëéžëéëé£ëéáëéÞëéþëéÉëéëéÃëé»bëéÄëéúëéÍú¥ÍÉÍúçÍÉÍú© © ª ên¬ ì Ö±ËúÇÒOUÉÍú© © ª ên¬ ì Ö±ËúÇÒOUÉÍú¥ÍÉÍúçÍÉÍúõëÉÍúÏìÉÍÄÉÍÄ£ £ ¤ Ϧ ì ™‘‹ÖqËîÉÏîÍÏîÏîÄÉÍÉ£ £ ¤ Ϧ ì ™‘‹ÖqËîÉÉÍÍÄÉÍÄÉÍijÑÍÉóðÍóðÓÓƒÙÄî î ï üxò ìó í t!KìL Ó!¦WÉæñìñà`®ñž®ñ®ñ£®ñÉ®ñ®ñîñÞ®ñþ®ñĘ
˜

·{
ìž
íŸ
î EÕAŸH>ÕÕæñìñkÉæñìñ§óà`ÞòžÞòÞò£ÞòÉÞòÞòÃÞòÞÞòþÞòÄÍ
Í
Î
À~Ó
ìÔ
íÕ
îÖ
ï ¾N@ Rze¶æñìñ§óí~Éæñìñ§óñôà`›ôž›ô›ô£›ôÉ›ô›ôÛôÞ›ôþ›ôÄŽ¢‚ìíîï˜ð  p­ŠÄ‘ƒæñìñ§óñô—BÉæñìñ§óñôÍöà`éõžéõéõ£éõÉéõéõÃéõÞéõþéõÄØØÙÛ†àìáíâîãïäðåñ ©úþXZŒTæñìñ§óñôÍöðÉæñìñ§óñôÍö¹øà`È÷žÈ÷È÷£È÷ÉÈ÷È÷ÃÈ÷ÞÈ÷þÈ÷Ó®®ì‹²˜Œ³¡Œ´¶C+MéãîDæñìññCà`·ùž·ù·ù£·ùÉ·ù·ù÷ù­èŽòŽ®®ì‹²˜Œ³¡Œ´¶C+MéãîDæñìññC
èŽòލ®®ì‹²˜Œ³¡Œ´¶C+MéãîDÓ!¦WñCÓòòõ÷˜Œø¡ŒùŠú¶CÑ& ?)œ
óæñìñ§óñCà`´üž´ü´ü£´üÉ´ü´üôü­ÀûÆûÒ“òòõ÷˜Œø¡ŒùŠú¶CÑ& ?)œ
óæñìñ§óñC
èŽòŽÒ“¨òòõ÷˜Œø¡ŒùŠú¶CÑ& ?)œ
ó›ü¡ükñCÓÄÄå”ʘŒË¡ŒÌŠÍÞζCtüþèe '·æñìñ§óñô²ûà`äÿžäÿäÿ£äÿÉäÿäÿÃäÿ­Ýþãþéþ£™ÄÄå”ʘŒË¡ŒÌŠÍÞζCtüþèe '·æñìñ§óñôñC
èŽòŽÒ“£™¨ÄÄå”ʘŒË¡ŒÌŠÍÞζCtüþèe '·›ü¡üÒÿí~ ñCÓ¤¤Çš«˜Œ¬¡Œ­Š®Þ¯¿°¶CŠÛƒÁäwæñìñ§óñôÍö§üà`̃ž̃̃£̃É̃̃Ã̃­®‚´‚º‚À‚ 柤¤Çš«˜Œ¬¡Œ­Š®Þ¯¿°¶CŠÛƒÁäwæñìñ§óñôÍö
ñC
èŽòŽÒ“ £™
柨¤¤Çš«˜Œ¬¡Œ­Š®Þ¯¿°¶CŠÛƒÁäw›ü¡üÒÿ¹ƒ—B ñCÓ›¡š˜Œ¡ŒœŠÞž¿Ÿþ ¶C*êX¶v”·æñìñ§óñôÍö¹øÏþà`퇞í‡í‡£í‡Éí‡í‡Ã퇭¹†¿†ņˆц ›§›¡š˜Œ¡ŒœŠÞž¿Ÿþ ¶C*êX¶v”·æñìñ§óñôÍö¹ø ñC
èŽòŽ Ò“
£™ æŸ ›§¨›¡š˜Œ¡ŒœŠÞž¿Ÿþ ¶C*êX¶v”·›ü¡üÒÿ¹ƒÚ‡ð
ñCà`ŽŽá¨ë‰©›ì›);i´àæñìñ¬âÇŒžÇŒÇŒ£ÇŒÉnjnjÃÇŒÞÇŒà`®®ܪ±ë²‰©ˆÿ‹§@æñ¡Ç¬âÖžÖÖ£ÖÉÖÖÃÖÓÖ­ÇŒ®®ܪ±ë²‰©ˆÿ‹§@æñèÈ
ŽŽá¨ë‰©›ì›);i´à›ü¡ü¨®®ܪ±ë²‰©ˆÿ‹§@›ü±Î³ÑþÊËƬÌ; Îë¬Ïé|ú?Õ}·áÀÞÀà`À¬âÀžÀÀ£Àå`ÀÏÀÀªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
ýΨÀààáÔ*åì 6
ä>(ùOèýÎÏʨÀ

@¿#à›6¢ýΨ
ªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
½^­Õ½^½Ý
ªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
½^ýν^Ù
 ½^Ù½^Ù
ààáÔ*åì 6
ä>(ùOè½^ý΃Ͻ^˜Ô
ààáÔ*åì 6
ä>(ùOè½^­Õ³Õ½^ààáÔ*åì 6
ä>(ùOè8­Õ³Õ
 ½^Ý%
‰&Ž6Òßñ’KýÎÏʽ^…—°ª³ª
Ô Ð è ä ü ø Œ
íàŪÓ
Æ
° ô
î× ©
î Ä
˜
Í
˟تŽÒÊ+
ÿàª0
öà𪧩 © Ž © š © ¦ © ² © ¾ © Ê © Ö © 4
Ö Ð ê ä þ ø ”
Œ
 

«
¥
ÏòàÂ
½
ÂͪÊ
Æ
ÿà
£ù
ô
à×ÿö® © þ î ¬
˜
å
Í
©øØÅ®ŽòåÄʤ½Ž³®ÔÊ8
Ü Ð ð ä „
ø µ
­
ÀààŸàªҪתڪÍ
Æ
é
à
´Œ ô
ñ׎öµ ©
î ±
˜
ë
Í
°ØÊ®òìÄÒ¤ÆšŽº®×Ê<
Þ Ð ò ä †
ø ¹
­
ÄàÿÂЪÏ
Æ
ï
à
¸ ô
ô×öº ©
î
˜
ñ
Í
·ˆØÏ®šòóÄÚ¤ÏžŽ¾®ÙÊ?
à Ð ô ä ˆ
ø ǨàÂ䪡Æ
ô
öË ©
î º
˜
ö
Í
½ØÓ®ŸòùÄá¤×¢ŽÂ®C
â Ð ö ä Š
ø Ë­àÂ誣Æ
£ ô
öÐ ©
î ¿
˜
ü
Í
ÄØØ®¥òÄé¤à¦ŽÆ®G
·¼
Á
Æ
ͪÔ
Ýàƒø°Ý
«

ñ
é
¥ŽO
S
ê
º
˜

þ
®Žªª
Ÿ ठ੠
Ò Ð æ ä ú ø ‹Œ
Ö
Æ
­þ
ô
ì×È ©
î É
˜
ˆÍ
Ò§ØÐÊÓ Ð ç ä û ø Ò
Æ
¿ © ÑÊØ Ð ì ä €
ø ×
Æ
ô
Õ © Û Ð ï ä ƒ
ø ²
­
Ì
Æ
å
à
ˆ ô
² © Ž·®ÖÊjÐ mä rø w}© © Œ
ûà
àªÀô

ä½
½
ê½
ë¥
áÊì¥
ÚÊ´ûÂŒà
öü ¼®òÚľ¤° ®»Ó˜
ɪìªî½
šÆ
»ãפ© ±¸£ ÄÛâ
ëô î  
˜
×
Í
æØÄô
çø°   © µ Á Í Ù ³»£ ÆË£ ÏÔÝä
ðø 
¥

Ý

 
î
Êô
Š  ¢ ® º Æ Ò Þ ·¿£ ÊÙÚáè
øÀ£ Ðìªöà
¨âì Þ ìˆú à` Rž£úÉÉæ­¦
YþPái»b*¬â *aMdÄÞK!©KÏå`Ó ¦˜NñòJÄÉ]®JƒÍPÎÀÃ/üï/!¤ï/,ï/ —ã 0üØ/9

´Ø/
¢—ã\, 0£0å1ü©0–
 ¾23œ€3
 t€3
'¡Ç7, ’3 œ3£3 üŸ.„ü¿/ÞüŸ0þ

@¿#à›6¢¡Ç$Ü. —ã,È.Îà óîÁ üæ«é—㸥«¹ —㻣Æ]ú­^£Æ5bytesÁvá@üÐB\êB
 ¡Çü

¡Ç ÇCÎC'üÑAý¯­$B£ÆêA£ÆŠ PhantomDataÁÑ{·Ë…YÚÁ¯¼@Ko\ "Attempted to build VarZeroVec out of elements that \
cumulatively are larger than a u8 in size"Á´¸
 ¤¸
˜$ü¤+y$ÖÇüÔ&zå$;ÖÇ]ر"Attempted to build VarZeroVec out of elements that \
cumulatively are larger than a u16 in size"Á´°$
 ¤°$
˜¥Í%üœ$+,¨$%|ã$Dã$ðÈüÌ$'Ý$%<ðÈ]ر"Attempted to build VarZeroVec out of elements that \
cumulatively are larger than a u32 in size"Á´ó)
 ¤ó)
˜çÍ%üß)+,ë)%D¦*
‰Êü* ˆ *%B‰Êu32::MAXÁ
¬
  úÐ £
ª
üü©
¼
í­
í­eã­9”ñ
—ã ˆ

ÿüºO
í­
¬º,×
í­d6dœ"œ"³Ñ¹Ñ <Idí­ ž"}ä"  àÑ ¨" °"±"ü“!ž¬½l¯!í­Þí­æͼàͼèϼ"ͼúK
)ƒͼEϼ^U,ß'¬Ð' ¬½ ä'ë'œüÉ&¢¬½,ƒ'í­,ò&í­bã­9”¼D—ã ÓDÔD£üŒDHí­,¬D¬½,¢Dí­d6üþF$˜G
æ³Ñ¹Ñ œGüóF+
à³Ñ¹Ñ G¤G¤ü¨F|ààáÔ*åì 6
ä>(ùOè³Ñ¹Ñ¤ÔF¬½DÇFæêëº+ììµáùý³Ñ¹Ñ¬½S¬üå<4Ìÿ<
¼ÿ<
ý΃Ï6:P
æýÎƒÏ ˜=üà<:
àýÎƒÏ ™= Ÿ= =ˆü»<eààáÔ*åì 6
ä>(ùOèý΃Ï$Ñ<æêëº+ììµáùýý΃Ï? ˜ÔB‹ÆK¢
ü€EwüšE\ ,ðE$ ‹Æ3 õEQ
æýÎƒÏ öEüûD}
àýÎƒÏ ÷E ýEþEŠü¯DÏŒÅ$ìDí­,ØDÌÅß‹ÆÞ‹Ææí­ßã­-Q
Ì› ° È³Ñ ³ÑÊFS` 
þÈ ² 
Œ¤› 
̳ў®² ³  ¹ º Èüç
S ©Ø »Ê¾ÉûÈ
ûÈýȱ ûÈ)R
þÈKZÈûÈvýÈ`<ÀÉ ôì

 “

ù³ÑR-  Éü±
_ªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
³Ñ
»Ê
¾Éê¾Éò üð£ü…
ü® 
$4´
‡q4D´ »a þÈr ÌüÛ, 
  
$á
Ýp 4
 å ôé 
äé
˜þÈ ,
 « 

»  
  
m
uÜ…
îoþÈ  ¥  Ë
Ó¤ðâÉÞñö  ˜ËüÔÅ»Êí­»ÊV¾ÉU¾É^üÎWüÎ` [í­\öõí­ö´ã­u
üá$üã"Œä0 ©Ø R_ ŒÌü’û»Ê¾É»Ê’Ôµ ÀÉÕ¾î.R<"ÀÉ ©"ª"Îüå!E¾ÉL‰"»Ê,ÿ!¾Éd6œý&$ý&#
*d'
γÑ5t'Q 'Ìý&
 '
ÝpþȈ,' •' 'œ'ÏüÒ&J,í&»Ê,ã&¾ÉÚ¾Éâ»ÊÜ#EœÅ+$Å+#
*dÊ+ùÖ/tÊ+K ×+ôÅ+
 DÙ+
ÞpþÈTÙ+ â+ è+é+Ðü–+S$¶+»Ê,¬+¾ÉÓ¾ÉÛ»ÊÕ#DüÏF3œîF$îF#
*dóFùÖ/tóFK €Gi
pôÏF
̰2ƒ˜ G ‡GˆGÛüêEž ÂÂÃæ Åì¾ ÈE(ÓÛl‰F»Ê,ÿE©Ü%¾É%¾É.»Ê)/üú*#üü*! Œý*Dý*Îà óîÁ üæ«é
æãO
V4†+
®“ÞgD†+ Œ “Þ +«ÑÞ œ+ËØ ¤+¥+Âü “Þ<¤* »»Ž8½á½K'L)óî1#æãD—*Âß\ÑÞ\ÑÞe “ÞaæÝb: ¿P÷ýÎ ÔÚAN[ ÓÚ ÁP¼¬P
 ”¬P
ùýΜ- ÂP ÈPÉP÷ü‡PBªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
ýÎ$P¼á*€á3€á<‚áÀP€áO
ÔÚq÷ƀᜂá`¬´ÖQ\ÖQ»»Ž8½á½K'L)óî1#ÔÚU
\DâQ
ÂÔÚgTâQƒ ëQäÖQ
 íQ
ÝpÔÚº,íQ ñQ ÷QøQøü¥QS,ÆQ ©â,¼Q¼á¼á ±ä)N ,Ò]üú] œú],ú]6 ÓÚG ˜^üã]7

´ã]
¢ÓÚ~, ™^ œ^üÁ^…,ë^
»ÔÚ Å_\Ý_ 
ÔÚ\ÿ_

 ÔÚü¦^ï
ªýÎ 
”`
  š`›`ùüüÎ]Í ©â$¿\¼á,§\Îà óîÁ üæ«éÓÚЛçÑ›çÚ ÓÚÖ¹êß±äWñéVŠÁ¯Ñ{·Ë…YÚÔÚRŠÁ¯Ñ{·Ë…YÚêèdîØî~üôm
ün tn,n
$4£nÏÎ/D£n ªn\ ÔÚm »nüÊn,\Ên ,Ên


$ÐnÎÏ
/ ,Ðn Ôn
ôØn 
äØn
˜ÔÚ ,  ¦      õn  c
kÜôm
îoÔÚwýš €oüám¡
 ”ámááÕ( o ‡oˆoûüÃlÅ
©â$€mí­,ìl¼á.¼á7Þì0Þì9õÒ3í­4ÓÒí­Óóã­k,}´•}\•}±ä"
)D¡}õä4T¡}J ª} «}üµ} ,Ï}
%̵}
ÌýÎ6GK Ô} Ú}Û}üüÆ|•üþ|] Ùlæ|‹æ,Ü|¼á¼á ªæ!‘ó˼áÊ6îXrÄÀ   Á  É 9
@ 
‹ËN  × ­ ± µ ¹  Ø   è 

ì   ð   A

  ò   
Ӊ 
Æ
 ó  ù ú ˜üó ü¨ R
üÞ$™  B3$ÜÜÛ11&Šu0ÁÇu1Á¾u2Áµ_u3Á­ã PPÐ4 2
Æ
 hPÝÍ(PüP„ øP` (P‡P‡    PÍ: xP«
0P³    
 )Í7 
AÍ S  i
p8P«
˜ }
Ž  HPŸÍ 'ÍØPŸ
f
  0PÌ& (LøPT ààç
ï » øà` <B0Pî Ú
øPõøP̲øPø~üÞÍHP´ÍPÌÿEüÞE§øFìÎxÉÈüÞŒŠ¯&.5arrÁ Û
ç»,Í
ÍÍ|͈͘œ

&
òÉ4œ¢Èœ
© œ£œ²Ý øœÅm¥Í œôßÑΘ*P иœ¥±
œ²8
© œ»ÝÍ¢éü¢ ø¢`
¢ 
  ¢Í=  «
³ ¢· 
 
 +Í9 
CÍ U  l
s«
Ý  
¢¹ ¢¦
ŸÍ (ÍØ¢Ÿ
j
¢º
 Ì¢Ñ( )Nø¢T
âà÷
ÿ È øâ` <B¢àî¢ý
¢þÞ ø¢õø¢Ì²ø¢ø¥ÍÍ´Í¢åŠz¥ÍyÙƒxè~âà¥Í¢ ž¯!Û€»/7>€€žÛ
»@ÍÍ(ÍÍ͘¦

&ƒõ1¦¢Ȧ
© ¦£¦²ç ø¦ÅmçÍ ¦ôß‚øÁ¾˜C и¦¥±
¦²8
© ¦»Ýͬéü¬ ø¬`
¬ 
  ¬Í=  «
³ ¬· 
 
 +Í9 
CÍ U  l
s«
ç  
¬¹ ¬¦
ŸÍ (ÍجŸ
j
¼
 ̬Ñ( )Nø¬T
äà÷
ÿ È øä` <B¬àî¬ý
¬þè ø¬õø¬Ì²ø¬øçÍʹͬî•zçÍy‚øxè~âàçÍ¢ ž¯!Û€»/7>€€žÛ
»@ÍÍ(ÍÍ͘°

&
¤Ì4°¢Ȱ
© °£°²ñ ø°Åmõë °ôßÑΘ*P и°¥±
°²8
© °»ÝÍéü ø¶`
 
  Í=  «
³ · 
 
 +Í9 
CÍ U  l
s«
ñ  
¹ ¦
ŸÍ (ÍضŸ
j
º
 ÌÑ( )Nø¶T
æà÷
ÿ È øæ` <Bàîý
þò ø¶õø¶Ì²ø¶øõëʹ͇¡zõëyû™xè~âàõ뢠ž¯!Û€»/7>€€žÛ
»@ÍÍ(ÍÍÍ16Á˜º

&
½Í4º¢Ⱥ
© º£º²û øºÅmÏì ºôßÑΘ*P иº¥±
º²8
© º»ÝÍÀéüÀ øÀ`
À 
  ÀÍ=  «
³ À· 
 
 +Í9 
CÍ U  l
s«
û  
À¹ À¦
ŸÍ (ÍØÀŸ
j
˼
 ÌÀÑ( )NøÀT
èà÷
ÿ È øè` <BÀàîÀý
Àþü øÀõøÀ̲øÀøÏìÍ´ÍÀ¡¬zÏìy•¥xè~âàÏ좠ž¯!Û€»/7>€€žÛ
»@ÍÍ(ÍÍÍ16Á¡(Å¡(

&£(Í‚1£(ů(àÅ•(
© Ű(Å¿( øÅÙ'f¥Í Åþ'Åñ'ÙƒÁ¾D¡(Ç¡(

&£(ƒõ1£(ǯ(àÇ•(
© ǰ(Ç¿( øÇÙ'fçÍ Çþ'Çñ'‚øÁ¾ç¯D¡(É¡(

&£(ï˜1£(ɯ(àÉ•(
© ɰ(É¿(¥ øÉÙ'fõë Éþ'Éñ'û™Á¾ç¯D16Á16Á16Á¡(Ë¡(

&£(‰¤1£(˯(àË•(
© ˰(Ë¿(± øËÙ'fÏì Ëþ'Ëñ'•¥Á¾ç¯D¡(Í¡(

&£(
ÖÂ4£(ͯ(àÍ•(
© Ͱ(Í¿(½ øÍÙ'f¥Í Íþ'Íñ'ÙƒÄÁç¯D¡(Ï¡(

&£(
ðÃ4£(ϯ(àÏ•(
© ϰ(Ï¿(É øÏÙ'fçÍ Ïþ'Ïñ'‚øÄÁç¯D¡(Ñ¡(

&£(
ŠÅ4£(ѯ(àÑ•(
© Ѱ(Ñ¿(Õ øÑÙ'fõë Ñþ'Ññ'û™ÄÁç¯D16Á16Á16Á¡(Ó¡(

&£(
¤Æ4£(Ó¯(àÓ•(
© Ó°(Ó¿(á øÓÙ'fÏì Óþ'Óñ'•¥ÄÁç¯DÔêð
ð
 ÔöÎÏ7öÔúýԽ
 Ö.<P `
DÔÇÔÌ&øÔç,øÔð! 


"
)ÐÔð
Ë
9 LP Ô
øÔä0
ê³ ÂÂÃæ Åì¾ ÈE(ÀÔÔ¥ øÔº²øÔÆ Ô¿  
 !
ÊøÕü)ر ÔØ  øÔ˜
ê³ÈÄÀ ÔÙ  Ôë Ôù Ôú ã øÔëøÔæØ
ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ÈÄÀ¸Ô¼í­«Pí­OÈÄ[ÈÄYí­WÀã­j¾ ¼Öêð
ð
 ÖöÎÏ7öÖúýֽ
 ø.<P `
DÖÇÖÌ&øÖç,øÖð! 


"
)ÐÖð
Ë
9 LP Ö
øÖä0
ê³ ÂÂÃæ Åì¾ ÈE(ÀÖÖ¥ øÖº²øÖÆ Ö¿  
 !
Êø×ü)ر ÖØ  øÖ˜
ê³›ÌÀ ÖÙ  Öë Öù Öú å øÖëøÖæØ
ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶›ÌÀ¸Ö¼í­«Pí­O›Ì[›ÌYí­WÀã­j¾ ¼Øêð
ð
 ØöÎÏ7öØúýؽ
 š/<P `
DØÇØÌ&øØç,øØð! 


"
)ÐØð
Ë
9 LP Ø
øØä0
ê³ ÂÂÃæ Åì¾ ÈE(ÀØØ¥ øØº²øØÆ Ø¿  
 !
ÊøÙü)ر ØØ  øØÂ˜
ê³îÓÀ ØÙ  Øë Øù Øú ç øØëøØæØ
ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶îÓÀ¸Ø¼í­«Pí­OîÓ[îÓYí­WÀã­j¾ ¼Úêð
ð
 ÚöÎÏ7öÚúýڽ
 ¼/<P `
DÚÇÚÌ&øÚç,øÚð! 


"
)ÐÚð
Ë
9 LP Ú
øÚä0
ê³ ÂÂÃæ Åì¾ ÈE(ÀÚÚ¥ øÚº²øÚÆ Ú¿  
 !
ÊøÛü)ر ÚØ  øÚ˜
ê³ÁÛÀ ÚÙ  Úë Úù Úú é øÚëøÚæØ
ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ÁÛÀ¸Ú¼í­«Pí­OÁÛ[ÁÛYí­WÀã­j¾ ¼Üêð
ð
 ÜöÎÏ7öÜúýܽ
ß/<P `
DÜÇÜÌ&øÜç,øÜð! 


"
)ÐÜð
Ë
9 LP Ü
øÜä0
ê³ ÂÂÃæ Åì¾ ÈE(ÀÜÜ¥ øÜº²øÜÆ Ü¿  
 !
ÊøÝü)ر ÜØ  øÜ˜
ê³”ãÀ ÜÙ  Üë Üù Üú ë øÜëøÜæØ
ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶”ãÀ¸Ü¼í­«Pí­O”ã[”ãYí­WÀã­j¾ ¼Þêð
ð
 ÞöÎÏ7öÞúý޽
 ü0<P `
DÞÇÞÌ&øÞç,øÞð! 


"
)ÐÞð
Ë
8 KO Þ
øÞä0
ê³ ÂÂÃæ Åì¾ ÈE(ÀÞÞ¥ øÞº²øÞÆ Þ¿  
 !
Êøßü)ر ÞØ  øÞ˜
ê³æêÀ ÞÙ  Þë Þù Þú í øÞëøÞæØ
ê³í³î³Òï³ìð³ñ³ò³ìäs{©¶æêÀ¸Þ¼í­«Ní­MÿæêYæêWí­UÀã­j¾ º4ú?
$û?ü×?*Â<ð?3
¥
©
%žÐ1À9@ü¹+1
àý΃Ï#á0ŒÅ<ÌÅDKD•-
æý΃Ï"ë/ÌÅ;‹ÆCJôí 
³ÑÃ)©Ø5ÀÉ=Düf&
½
ýξ
,½
½
¾
åhÁ
ì¾ žóP¾7ŠyôýÎkÙiÙiIterÁÜi÷ ®iÝi
end_or_lenÁ®iÞi_markerÁ®it¸N(ÔÚÏÖ”ï 
Æ
Ç
%üÞ1§ø9@ü¸E
à
æC´â#á
0ýá<­
­
Øg°

î±
‰&î(£Tªt_—ã´âˆÄÆ$
ƒ%æâ18?üÛ0*
ô
æãÍ#õ
0´ä<ø°ú°û°Ðü°ý°þ°ìHˈXêE>æãˆ¼±
׿ãØ,©æ8>ÒÒ MaybeUninitÁÒuninitÁüÒ˜ügÇ@ÇeÉRæãü¸$+
öæã#÷0üç<ŠÁ¯Ñ{·Ë…YÚæãjp—ãxü‹&
© ͪ ,ëé8¡ë@Gøà '
î æñìñ&ï 3®ñ?æñGìñOVøâ '
˜
æñìñ§ó-
:ÞòFæñNìñV§ó^eøä '
Í
æñìñ§óñô4Î
A›ôMæñUìñ]§óeñômtøæ '
æñìñ§óñôÍö;ŽHéõTæñ\ìñd§ólñôtÍö|ƒøè '
Øæñìñ§óñôÍö¹øBÙOÈ÷[æñcìñk§ósñô{Íöƒ¹øâŠ ´ ¶ ³ß=LѲ0<¹›Cœ˜æT¤O
­ Ý%dQ¯ Ô*T£Qà° Ô*á° æ LÉQ² žŽ <ÔQª³ make_uleÁDÊ|¹Î make_varuleÁ\”¤ºÏ üËð¬üËMJ Zero-copy vector abstractions for arbitrary types, backed by byte slices.ÁËüif `zerovec` enables a far wider range of types — beyond just `&[u8]` and `&str` — to participate inÁü‡`] zero-copy deserialization from byte slices. It is `serde` compatible and comes equipped withÁ proc macrosÁøËüüXU Clients upgrading to `zerovec` benefit from zero heap allocations when deserializingÁœÕ read-only data.ÁéËüí# This crate has four main types:ÁËü•[X - [`ZeroVec<'a, T>`] (and [`ZeroSlice<T>`](ZeroSlice)) for fixed-width types like `u32`Áüñda - [`VarZeroVec<'a, T>`] (and [`VarZeroSlice<T>`](ZeroSlice)) for variable-width types like `str`ÁüÖ2/ - [`ZeroMap<'a, K, V>`] to map from `K` to `V`Áü‰IF - [`ZeroMap2d<'a, K0, K1, V>`] to map from the pair `(K0, K1)` to `V`ÁÓËü×wt The first two are intended as close-to-drop-in replacements for `Vec<T>` in Serde structs. The third and fourth areÁüÏ intended as a replacement for `HashMap` or [`LiteMap`](https://docs.rs/litemap). When used with Serde derives, **be sure to applyÁüÕ NK `#[serde(borrow)]` to these types**, same as one would for [`Cow<'a, T>`].Á¤
蟬
vs [`ZeroVec<'a, T>`], [`VarZeroVec<'a, T>`], [`ZeroMap<'a, K, V>`], and [`ZeroMap2d<'a, K0, K1, V>`] all behave likeÁüŸ li [`Cow<'a, T>`] in that they abstract over either borrowed or owned data. When performing deserializationÁüŒ Œ from human-readable formats (like `json` and `xml`), typically these types will allocate and fully own their data, whereas if deserializingÁüœ
 from binary formats like `bincode` and `postcard`, these types will borrow data directly from the buffer being deserialized from,Áü¢ avoiding allocations and only performing validity checks. As such, this crate can be pretty fast (see [below](#Performance) for more information)Á¼¸ on deserialization.ÁÐËüÔ See [the design doc](https://github.com/unicode-org/icu4x/blob/main/utils/zerovec/design_doc.md) for details on how this crateÁÌ× works under the hood.Áñˤõ # Cargo featuresÁŠËüŽ30 This crate has several optional Cargo features:ÁüÂro - `serde`: Allows serializing and deserializing `zerovec`'s abstractions via [`serde`](https://docs.rs/serde)Áüµyv - `yoke`: Enables implementations of `Yokeable` from the [`yoke`](https://docs.rs/yoke/) crate, which is also usefulÁü¯B? in situations involving a lot of zero-copy deserialization.Áüò| - `derive`: Makes it easier to use custom types in these collections by providing the [`#[make_ule]`](crate::make_ule) andÁüòro [`#[make_varule]`](crate::make_varule) proc macros, which generate appropriate [`ULE`](crate::ule::ULE) andÁüåQN [`VarULE`](crate::ule::VarULE)-conformant types for a given "normal" type.Áü·ƒ - `std`: Enabled `std::Error` implementations for error types. This crate is by default `no_std` with a dependency on `alloc`.Á»Ëü¿ [`ZeroVec<'a, T>`]: ZeroVecÁüß%" [`VarZeroVec<'a, T>`]: VarZeroVecÁü…" [`ZeroMap<'a, K, V>`]: ZeroMapÁü¨+( [`ZeroMap2d<'a, K0, K1, V>`]: ZeroMap2dÁüÔ&# [`Cow<'a, T>`]: alloc::borrow::CowÁûËtÿ # ExamplesÁŽËü’PM Serialize and deserialize a struct with ZeroVec and VarZeroVec with Bincode:ÁãË ```Áüï! # #[cfg(feature = "serde")] {Áü‘'$ use zerovec::{VarZeroVec, ZeroVec};Á¹Ëü½0- // This example requires the "serde" featureÁüî30 #[derive(serde::Serialize, serde::Deserialize)]Áü¢" pub struct DataStruct<'data> {ÁÄÅ #[serde(borrow)]ÁüÞ" nums: ZeroVec<'data, u32>,ÁÄú£üš$! chars: ZeroVec<'data, char>,ÁÄ¿ú£üØ%" strs: VarZeroVec<'data, str>,ÁË܈ let data = DataStruct {Áü¤B? nums: ZeroVec::from_slice_or_alloc(&[211, 281, 421, 461]),Áüç@= chars: ZeroVec::alloc_from_slice(&['ö', '冇', 'म']),Áü¨41 strs: VarZeroVec::from(&["hello", "world"]),Á };Á¼ä let bincode_bytes =ÁüüOL bincode::serialize(&data).expect("Serialization should be successful");ÁüÌ(% assert_eq!(bincode_bytes.len(), 63);ÁõËüùGD let deserialized: DataStruct = bincode::deserialize(&bincode_bytes)ÁüÁ 85 .expect("Deserialization should be successful");Áüú 52 assert_eq!(deserialized.nums.first(), Some(211));Áü°!74 assert_eq!(deserialized.chars.get(1), Some('冇'));Áüè!85 assert_eq!(deserialized.strs.get(1), Some("world"));Áü¡";8 // The deserialization will not have allocated anythingÁüÝ"+( assert!(!deserialized.nums.is_owned());Áä‰# # } // feature = "serde"Á<¦#æ¡®#Ëü²#'$ Use custom types inside of ZeroVec:ÁÚ#Ë\Þ# ```rustÁüê#:7 # #[cfg(all(feature = "serde", feature = "derive"))] {Áü¥$0- use zerovec::{ZeroVec, VarZeroVec, ZeroMap};ÁÌÖ$ use std::borrow::Cow;Áüð$+( use zerovec::ule::encode_varule_to_box;Áœ%Ëü %-* // custom fixed-size ULE type for ZeroVecÁüÎ%! #[zerovec::make_ule(DateULE)]Áüð%`] #[derive(Copy, Clone, Par
d: u8Á,'¸¥'Ëüš'74 // custom variable sized VarULE type for VarZeroVecÁüÒ'&# #[zerovec::make_varule(PersonULE)]Áüù'NK #[zerovec::derive(Serialize, Deserialize)] // add Serde impls to PersonULEÁüÈ(ZW #[derive(Clone, PartialEq, Eq, Ord, PartialOrd, serde::Serialize, serde::Deserialize)]Á¼£) struct Person<'a> {Á¼») birthday: Date,ÁüÓ)! favorite_character: char,ÁÄõ)ú£ÜŽ* name: Cow<'a, str>,Á,ª*¸¥°*Ëü´*3”£¬è* struct Data<'a> {ÁÄþ*ú£ü—++( important_dates: ZeroVec<'a, Date>,ÁüÃ+GD // note: VarZeroVec always must reference the ULE type directlyÁÄ‹,ú£ü¤,41 important_people: VarZeroVec<'a, PersonULE>,ÁÄÙ,ú£üò,96 birthdays_to_people: ZeroMap<'a, Date, PersonULE>Á,¬-¸¥²-˶-ËÔº- let person1 = Person {ÁüÕ-.+ birthday: Date { y: 1990, m: 9, d: 7},Áü„.! favorite_character: 'Ï€',Áü¦. name: Cow::from("Kate")Á4Æ.ħÔÍ. let person2 = Person {Áüè./, birthday: Date { y: 1960, m: 5, d: 25},Áü˜/" favorite_character: '冇',Áü»/  name: Cow::from("Jesse")Á4Ü/ħã/Ëüç/ let important_dates = ZeroVec::alloc_from_slice(&[Date { y: 1943, m: 3, d: 20}, Date { y: 1976, m: 8, d: 2}, Date { y: 1998, m: 2, d: 15}]);Áüø0C@ let important_people = VarZeroVec::from(&[&person1, &person2]);Áü¼1KH let mut birthdays_to_people: ZeroMap<Date, PersonULE> = ZeroMap::new();Áüˆ2ZW // `.insert_var_v()` is slightly more convenient over `.insert()` for custom ULE typesÁüã2B? birthdays_to_people.insert_var_v(&person1.birthday, &person1);Áü¦3B? birthdays_to_people.insert_var_v(&person2.birthday, &person2);Áé3Ëüí3OL let data = Data { important_dates, important_people, birthdays_to_people };Á½4ËüÁ41. let bincode_bytes = bincode::serialize(&data)Áüó463 .expect("Serialization should be successful");Áüª5)& assert_eq!(bincode_bytes.len(), 160);ÁÔ5ËüØ5A> let deserialized: Data = bincode::deserialize(&bincode_bytes)Áüš68Ö©Ó6Ëü×6EB assert_eq!(deserialized.important_dates.get(0).unwrap().y, 1943);Áü7MJ assert_eq!(&deserialized.important_people.get(1).unwrap().name, "Jesse");Áüë7LI assert_eq!(&deserialized.important_people.get(0).unwrap().name, "Kate");Áü¸8_\ assert_eq!(&deserialized.birthdays_to_people.get(&person1.birthday).unwrap().name, "Kate");Á˜9Ëüœ9# } // feature = serde and deriveÁ<À9æ¡È9ËŒÌ9 # PerformanceÁÞ9Ëüâ9a^ `zerovec` is designed for fast deserialization from byte buffers with zero memory allocationsÁüÄ:JG while minimizing performance regressions for common vector operations.Á;Ëü“;  Benchmark results on x86_64:Á´;Ëü¸;(% | Operation | `Vec<T>` | `zerovec` |ÁŒá; |---|---|---|Áüó;<9 | Deserialize vec of 100 `u32` | 233.18 ns | 14.120 ns |Áü°<TQ | Compute sum of vec of 100 `u32` (read every element) | 8.7472 ns | 10.775 ns |Áü…=HE | Binary search vec of 1000 `u32` 50 times | 442.80 ns | 472.51 ns |ÁüÎ=B? | Deserialize vec of 100 strings | 7.3740 μs\* | 1.4495 μs |Áü‘>VS | Count chars in vec of 100 strings (read every element) | 747.50 ns | 955.28 ns |Áüè>IF | Binary search vec of 500 strings 10 times | 466.09 ns | 790.33 ns |Á²?Ëü¶?ÝÚ \* *This result is reported for `Vec<String>`. However, Serde also supports deserializing to the partially-zero-copy `Vec<&str>`; this gives 1.8420 μs, much faster than `Vec<String>` but a bit slower than `zerovec`.*Á”AËü˜AEB | Operation | `HashMap<K,V>` | `LiteMap<K,V>` | `ZeroMap<K,V>` |Á¬ÞA |---|---|---|---|ÁüôA>; | Deserialize a small map | 2.72 μs | 1.28 μs | 480 ns |Áü³B=: | Deserialize a large map | 50.5 ms | 18.3 ms | 3.74 ms |ÁüñBEB | Look up from a small deserialized map | 49 ns | 42 ns | 54 ns |Áü·CGD | Loo
Î ZeroFromÁDÑ
 îØ5 üÏ.ãåÏÑÀÂL´ŸÌÑ„™p”¯c”ÇNüë $üÜfc Copy-on-write type that efficiently represents [`VarULE`] types as their bitstream representation.ÁÃËüÇli The primary use case for [`VarULE`] types is the ability to store complex variable-length datastructuresÁü´B? inside variable-length collections like [`crate::VarZeroVec`].Á÷Ëüûfc Underlying this ability is the fact that [`VarULE`] types can be efficiently represented as a flatÁ bytestream.ÁòËüöol In zero-copy cases, sometimes one wishes to unconditionally use this bytestream representation, for exampleÁüæqn to save stack size. A struct with five `Cow<'a, str>`s is not as stack-efficient as a single `Cow` containingÁüØSP the bytestream representation of, say, `Tuple5VarULE<str, str, str, str, str>`.Á¬ Ëü° mj This type helps in this case: It is logically a `Cow<'a, V>`, with some optimizations, that is guaranteedÁüž
@= to serialize as a byte stream in machine-readable scenarios.Áß
Ëüã
if During human-readable serialization, it will fall back to the serde impls on `V`, which ought to haveÁìÍ  a human-readable variant.Á ¨±ªâ¡Ç ¡Ç¨Ü×
éÆ#à›6¢ 24”¿
¿


£ÆI<×


ŠÁ¯Ñ{·Ë…YڽǤŽl•£Æuê\ŠØ…ÅÄ”ÔÔú­üû"£Æü¡"£ÆäÈ£Æß¼ëÛ Û£Æ£Æ ô
üæ!/¨±‡ä ï!éÆßë!¼œ",Ÿ"Ü ÜéÆéÆ ¥"
¨¡Ç$¦"üç#.¨±‡ä ð#Ó¡Ç4ó#éÆ !ì#$&üî$=üœ$MJ Construct from a slice. Errors if the slice doesn't represent a valid `V`Á\õ$ ¨—ãê³í³î³Òï³ìð³ñ³ò³ìäs{©¶éÆÀ
¨¡Çã­,%üŸ.Aü·,A> Construct from a slice that is known to represent a valid `V`Áý,Ëd…- # SafetyÁ-Ëüž-GD `bytes` must be a valid `V`, i.e. it must successfully pass throughÁüê-0- `V::parse_bytes()` or `V::validate_bytes()`.Á¤³.úééÆ
¨¡Çã­t–üè6'ü·6,) Construct a new borrowed version of thisÁdï6½ÇéÆ
!¨¡Çü6üÔ=%¨#±$#$‡ä Ý=éÆ%&'Ù=ô¥>ü€>  Whether or not this is ownedÁD¬>Ý ÝéÆ" µ>"
%¨¡Ç$¶>ü‚@üí>,) Get the byte representation of this typeÁž?Ëü¦?30 Is also always a valid `V` and can be passed toÁüÞ? `V::from_bytes_unchecked()`ÁD‰@Þ ÞéÆ Þ—ã" @"
&¨¡Ç$“@üÑA4DáA£ÆéÆ""
'¨¡Ç@¥—”ÒC£Æ)*ôžDD¥Dß ß£Æ( ®D(
)$¯DüƒFDŠFà à£Æ à—ã( “F(
*$”FüþF8¨,±-,-‡ä ‡GØè4ŠGéÆ./íî/ƒG%'\½G4ÂG++¡Ç¬ÒG,ÕGá áéÆ á¡Ç+ ÛG+
/¨¡Ç$ÜGüßH>¨1±221‡ä èHØè4ëHéÆ3ü3äH!ì¤I$§I½ÇéÆ00
3¨¡Çî ,¬Iü˜KJ¨5±656‡ä ¡KØè4¤Kà`¡ÇT¶KéÆ7á`7K/1üéKCìKâãä âéÆ ãÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•äê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ѼѼÒ¼ štÀ.4 ðK4
7¨¡Ç$ñKþ ÷KüžMH¨9±:9:‡ä §MØè4ªMž¡Ç¡ÇL¼MéÆ; ;£M35üíM"ðMåæ åéÆ æéÆ8 óM8
;¨¡Ç$ôMî ,úMüÂN:¨=±>>=‡ä ËNØè4ÎN£¡ÇàNéÆÇN&(üOJ¨@±AA@‡ä ŠOØè4OɡǡÇTŸOéÆBËB†O35üÒOB\ÕOçè çéÆ è鯸°ú°û°Ðü°ý°þ°ìHˈXêE>üÕýÕþÕLessÁÿÕ€ÖÖ‚ÖƒÖ„ÖGreaterÁ…ÖiÒ6<Ë? áO?
B¨¡Ç$âOî ,èOüÐP<¨D±EDE‡ä ÙPØè4ÜPáÇîPéÆFÄFÕP/1ü“Q2Qéê ééÆ êéÆñþC šQC
F¨¡Ç$›Qî ,¡QüÝSK¨H±IIH‡ä íSØè4ðSéÆJMN¯²µMJNéS13ü¯
í—ã¬ÝTìíþ‚탃ƒ ñT
J¨¡Çƒƒþ‚$ÏT ÕTüãU%”æUî îéÆG ùUG
M¨¡Ç$úUüÂV.¤ÅVïð ïéÆ ð—ãG ÚVG
N¨¡Ç$ÛVdstÁáVüÞdB¨P±QPQ‡ä çdØè4êdéÆR
Rãd üµe"L¸e½ÇéÆOO
R¨¡Çî ,Âeü…fV¨T¤U±VUVTªâèÈ ’fÓèÈ4•f°ÈW
WŠfŽf,.üðf2Lóf ¨ôȰÈSS
W¨¤èÈî ,ýft¬MT°Mî×Ý%d‹³¯ Ô*T™à´° Ô*á´° ƒe¤ÊŒ
µc<öä ·cå ·ˆd<ÿø ¸ˆdù ¸“b4ˆÐ ¹“bÑ ¹‡f„
ºù„¢a»þf¬€¥
¼Ì‚T‘adÖÚÞäŒ
ä å ø ù Ð Ñ þf¬Ö¥
YZ¼ÕDüÕY\¤Y]Á¯Y^Á¯ŠY^Ó
ÞÕY_æΘY`Y[æUDÞY[²VDðY[â>·ÄY[ÀY,§4ÉY[åY,ÞAÍY[òYT„CÎY[³Z4ÝdÓY[Ü?tâ­Y[µŽGT¡Y[¸ÆG|»Y[ºûJLÞ×Y[¼ÞLdéöY[½â>÷ƒ·Y[سZ4Ɇ¸Y[Ù¶¬D؇ÊY[´i<‰Æ
Y[´åjtà
Y[ûkd­ô
Y[¹ûkõ
Y[¹ên\‡© Y[¾ênª Y[¾äÏjœ„^´Q̹D$„çüÐ+üúC@ This trait allows switching between different possible internalÁü¾" representations of VarZeroVec.ÁáËüåYV Currently this crate supports three formats: [`Index8`], [`Index16`] and [`Index32`],Áü¿PM with [`Index16`] being the default for all [`VarZeroVec`](super::VarZeroVec)Áü0- types unless explicitly specified otherwise.ÁÁËüÅLI Do not implement this trait, its internals may be changed in the future,Áü’=: and all of its associated items are hidden from the docs.Á„Úaa©âÀ•a¸•"Ê•¸•.Ê•)bcbc©âÀ•b¼“d‰–˜–©âÀ•c¬À d¼–´–Ë–´“ü‚*' The type to use for the indexing arrayÁ±Ëü¹B? Safety: must be a ULE for which all byte sequences are allowedÁ¡  Œ8°4†t€,˜aa¤À ü¯*' The type to use for the length segmentÁÞËüæB²–¡¯  ²  ¹ 8°t­ Å aaüÌ ¡¿    É 8°   ddªâÀ•üÌ ŒÄÀ•é d÷™)Šš÷™5Šš)efghiefghihiü¿ #¡®  ±  ¸ 8°   dd Œ¡
¡

 š
8°4”


dd¤Œ¡û
 þ
 8°4ÿ

L’ddüš ¡ Œ 8°4t‡lÀ•dd
hÀ•üÓ-¡Â Å Ì8°ø°ú°û°Ðü°ý°þ°ìHˈXêE>À•dd
iÀ• æü³ ·Éklbcjjôjjü!ÏÊnpbcmm¥Í ÂÏmm¥Í áüè!çËsubcT,•rrçÍ ©rrçÍ ÈìÏxyz{|efghi|{üó#ww’›Œ¤ww¤Ôwwü l ww
{üÝ ,ø°ú°û°Ðü°ý°þ°ìHˈXêE>ww
| ð üº")¥Íƒefghiƒ á"üê"#|ð"}}’›Œœ$$¢$}}¤Ì$LÒ$}}ü†%l‰%¥Í}}
$—%üè%,|ë%ø°ú°û°Ðü°ý°þ°ìHˈXêE>¥Í}}
ƒõ¡ û%üý')ç͈ŠefghiŠ ¤(ü­(#|³(’›Œß)$å)¤*L•*üÂ*lÅ*çÍ
$Ó*ü¤+,|§+ø°ú°û°Ðü°ý°þ°ìHˈXêE>çÍ
Šõ¡ ·+ü‹5>¨ŒðŽŒŽªâýÎ ”5©âƒÏ Ÿ5ªÎ5!üÍ5?¨ð⨠Ö5ó¨ á5ªÎßÒ5!#&(¼“6,6ñ ñªÎªÎ œ6
¨ý΃Ï$6üÄ6J¨ð⨠Í6ó¨ á6ÓýÎ4Ð6ªÎ˜Å˜É61368¤£7<¦7ªÎ
˜¨ý΃Ïü×7>¨šðœœšâ¨ à7ó¨ ô7Ï«4ã7ªÎÜ7!#&(¤ª8±8ªÎ
¨ý΃ÏüÊ9P¨Ÿ ð¡Ÿ ¡â¨ Ó9ó¨ ç9Ï«4Ö9aƒÏ„ê9ªÎ¢¥¦§¨©ª«¬­®¯°Ï9TVY[ü¥@J\¬@úéê³í³î³Òï³ìð³ñ³
ƒÏbž ÃŽž
°¨ý΃Ï$ÄŽüÔ–L¨²³ð´´³²â¨ Ý–ó¨ ñ–Ï«4à–箄ô–±ÏµÙ–.024ü§—1ª—YªÎ±Ï±±
µ¨ý΃ϊ ®—ü‹™Y¨·¸ð¹¹·¸â¨ ”™ó¨ ¨™Ï«4—™ç®„«™±Ïº»¼ßKàKäK»¼HJLNLë™$ð™Á·üƒš($†šó ó±Ïø°ú°û°Ðü°ý°þ°ìHˈXêE>±ÏßK ‹š
»¨ý΃Ï$šü±§-L´§ô ô±Ïø°ú°û°Ðü°ý°þ°ìHˈXêE> ¾§
¼¨ý΃Ï$¿§ü˨b¨¾¿ðÀÀ¿¾â¨ Ô¨ó¨ è¨Ï«4ר箄먱ÏÁªKÁШ68:<´´©·©õ õ±Ï½ »©½
Á¨ý΃Ï$¼©üªv¨ÃÄðÅÅÃÄâ¨ Šªó¨ ªÏ«4¼ªÃýÎÚªç®„æªªÎÆÈ†ªBDFHü²¬?l¹¬ö÷ öªÎ ÷ýÎê³í³î³Òï³ìð³ñ³ò³ìäs{©¶Â ǬÂ
ƨý΃Ï$ȬneedleÁ4ά<­Æ‚°Ç›°Ç¹°ÇÇÆÇýÎƒÏ ýÎñþ ýÎü¸­´¿­øù øªÎ ùýΆ¹ø°ú°û°Ðü°ý°þ°ìHˈXêE>Ç ߭Â
Ȩý΃Ï$à­“Ç4î­rangeÁ,‚®<æ®È‚°É›°É¹°ÉÉÈÉý΃πɘÉü‘¯j¨ËÌðÍÍËÌ⨠š¯ó¨ ¯Ï«4̯箄ꯪÎÎÐÔ–¯468:ü¾±]„űú úªÎ˜ Çʘ ÏÏ Ö±Ê©â¥ÍÔè±û¥Í ûýάí±û¥ÍõÍñþDú±
Ψý΃ϥÍ$×± predicateÁLݱy{üƒ´¢ÌŠ´ü üªÎ¥Í†¹ëÉʘ ÑÑ ­´ÊÓÍÔÇ´ý¥Í ýýά̴ý¥ÍäÏñþDÙ´
Шý΃ϥÍ$®´ÈÍL¼´ïÉ,ë´{}‚¹Ð‚°Ò›°Ò¹°ÒÒÐÒýÎƒÏ¥Í °¹Ð‚°Ó›°Ó¹°ÓÓÐÓý΃ϥͺÑÇÑü¹º¨üú Yþ þªÎ¥Í†¹Çʘ ÕÕ íºÊÓÍÔ‹»ÿ¥Í ÿýά»ÿ¥ÍºÓñþD»
Ô¨ý΃ϥÍ$îºÈÍL€»ïÉ,¯»{}üŸÎ«ü¦Î' 
›ü —ã×Ó!ØðÙÙר áΪâ³Ñ ÎΩâ›ü ÑÎó¨ ÔÎÓ³Ñ4‡Ï­›ü³ÑŒŸÏ箄¹Ï
ֳћüƒÏelementsÁD×ÎoutputÁ4çÎ{}ü¶àœĽàƒ äÔ ƒ—ãÛÓ!ÜðÝÜÛÝ éà¶Õ ÖàÈÕ Ùàó¨ ÜàãÕ4áôÕŒ§á箄Áá
ڳћüƒÏ¤ÕDßàµÕ4ïàWY[]_aüÕæ§üÜæ' äÔø°ú°û°Ðü°ý°þ°ìHˈXêE>ßÓ!àðáàáß —ç¶Õ „çÈÕ ‡çó¨ ŠçãÕ4¹çôÕŒÑç箄ëç
޳ћüƒÏ¤ÕDçMOQSUW‰ëÞ‚°â›°â¹°ââÞâ³Ñ›üƒÏ ›ü©Ù4ÑëÞ‚°ã›°ã¹°ããÞã³Ñ›üƒÏ©Ù©Ùüí˜Ä–í äÔ©ÙåÓ!æðçåæç Âí¶Õ ¯íÈÕ ²íó¨ µíãÕ4äíôÕŒüí箄–î
ä³Ñ›üƒÏ¤ÕD¸íMOQSUWïîä‚°è›°è¹°èèäè³Ñ›üƒÏ¤¥
å`éê”ÏüÃ1žÐüù&žÐíæ`íü¦D©ˆ žÐ Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•ˆ˜ùì ­ì
íþ ´̳­
ƒe¤â
Œ
îïÁ¯
îòÁ¯ŠîòÓ
Â
ÕîóÌœ+Yîð¦#éîðÉ#ˆîîðî,îðœ£×îðP+îñæUQ+îñ²VR+îñâ>S+ÄîñÀYT+ÉîñåYU+ÍîñòYV+Îîñ³ZW+ÓîñùÆ,aîð»Ü?o+­îñµŽGp+îñ¸ÆGq+îñºûJr+×îñ¼ÞLs+öîñ½â>t+·îñسZt+¸îñÙÝ%[.î𳯠Ô*a.àîð´° Ô*}.áîð´° ¶¬Ê+Êîñcp.ä îð·cˆ.å îð·ˆd~.ø îð¸ˆd–.ù îð¸“bŒ.Ð îð¹“b¤.Ñ îð¹‡fš.
îðºþf.¥
îð¼´i,Æ
îñ´åj‘,à
îñûk’,ô
îñ¹ûkª,õ
îñ¹ên–,© îñ¾ên®,ª îñ¾üÏ'
â

Ì
Û
·ü»J
õðöõö¶Õ À
©â¹Ñ Ô
ãÕ
a¹Ñ„×
úÐ÷ùüýþÿEGACü³ \
ø øúÐŒ
Œ
ƒe
¾ Y
¿eY
ÎeY

Y2fm?Ž ~ø³Ñ¹ÑôÖ
ô
÷³Ñ¹Ñ
¾ ä
%'üþ O
\…
ú ú—ãê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ úúÐÀô
ô
ù³Ñ¹Ñ¾ 
î
&(·
ù‚°û›°û¹°ûûùû³Ñ¹ÑžÐÀüF
¤œ
 —ã úÐô ¸
ô
ü³Ñ¹Ñã­çœüÂL
Ä×
Š Š—ã ŠúÐô ÷
ô
ý³Ñ¹Ñã­
üÁE

 úÐ ³Ñô ä
ô
þ³Ñ¹Ñ
¾ ë
ø¶õ
üº,

Œ ŒúÐ Œ—ãô ×
ô
ÿ³Ñ¹Ñ
üã S
„ø
 úÐ —ãô ‰!
ô
³Ñ¹Ñ$Ž!
¾ ”!
ø¶ž!
¤þ=‡f„ã
ƒƒe¤õŒ
‹+|œæÔÞÃÔÈÕüÕŠÜÉÜØÍÁ]ŒÁ¯\›Á¯ŠÓ
²Õަ˜æΘÌF5Y¦#) éÉ#2
îî« œª ×ù4æUú4²Vû4â>ü4ÄÀYý4ÉåYþ4ÍòYÿ4γZ5Óùo6a»Ü?5­µŽG5¸ÆG5ºûJ5×¼ÞL5ö½â>5·Ø³Z5¸ÙÔ*î7à´° Ô*
8á´° ¶¬W5Êcý7ä ·c8å ·ˆd 8ø ¸ˆd#8ù ¸“b8Ð ¹“b18Ñ ¹þf8¥
¼´i6Æ
´åj6à
ûk6ô
¹ûk6õ
¹ên 6© ¾ên#6ª ¾üÏ;ƒqtÜfT¿üÒ&ad>A.1ÌÜ„¼Î„Ò¿üþ/üåZW A zero-copy "slice", that works for unsized types, i.e. the zero-copy version of `[T]`ÁìÀ where `T` is not `Sized`.ÁÞËüâ`] This behaves similarly to [`VarZeroVec<T>`], however [`VarZeroVec<T>`] is allowed to containÁüÃQN owned data and as such is ideal for deserialization since most human readableÁü•GD serialization formats cannot unconditionally deserialize zero-copy.ÁÝËüáfc This type can be used inside [`VarZeroVec<T>`](crate::VarZeroVec) and [`ZeroMap`](crate::ZeroMap):ÁüÈjg This essentially allows for the construction of zero-copy types isomorphic to `Vec<Vec<T>>` by insteadÁü³%" using `VarZeroVec<ZeroSlice<T>>`.ÁÙËüÝur The `F` type parameter is a [`VarZeroVecFormat`] (see its docs for more details), which can be used to select theÁüÓ qn precise format of the backing buffer with various size and performance tradeoffs. It defaults to [`Index16`].ÁÅ
蟃
QN This type can be nested within itself to allow for multi-level nested `Vec`s.Á Ë á ® ˤ²  ## Nested SlicesÁÇ ËüË ]Z The following code constructs the conceptual zero-copy equivalent of `Vec<Vec<Vec<str>>>`Á© Ë\­ íü¹ ,) use zerovec::{VarZeroSlice, VarZeroVec};Áüæ 96 let strings_1: Vec<&str> = vec!["foo", "bar", "baz"];Áü 
HE let strings_2: Vec<&str> = vec!["twelve", "seventeen", "forty two"];Áüé
B? let strings_3: Vec<&str> = vec!["我", "喜歡", "çƒé¾èŒ¶"];Áü¬>; let strings_4: Vec<&str> = vec!["w", "ω", "æ–‡", "𑄃"];Áüë41 let strings_12 = vec![&*strings_1, &*strings_2];Áü 41 let strings_34 = vec![&*strings_3, &*strings_4];ÁüÕ30 let all_strings = vec![strings_12, strings_34];ÁËü>; let vzv_1: VarZeroVec<str> = VarZeroVec::from(&strings_1);ÁüÌ>; let vzv_2: VarZeroVec<str> = VarZeroVec::from(&strings_2);Áü‹>; let vzv_3: VarZeroVec<str> = VarZeroVec::from(&strings_3);ÁüÊ>; let vzv_4: VarZeroVec<str> = VarZeroVec::from(&strings_4);Áü‰IF let vzv_12 = VarZeroVec::from(&[vzv_1.as_slice(), vzv_2.as_slice()]);ÁüÓIF let vzv_34 = VarZeroVec::from(&[vzv_3.as_slice(), vzv_4.as_slice()]);ÁüLI let vzv_all = VarZeroVec::from(&[vzv_12.as_slice(), vzv_34.as_slice()]);ÁêËüî63 let reconstructed: Vec<Vec<Vec<String>>> = vzv_allÁ .iter()Áüµ41 .map(|v: &VarZeroSlice<VarZeroSlice<str>>| {Á¤ê v.iter()Áüÿ,) .map(|x: &VarZeroSlice<_>| {Áü¬%" x.as_varzerovec()ÁüÒ .iter()Áüò.+ .map(|s| s.to_owned())Áü¡1. .collect::<Vec<String>>()Á”Ó })Áüæ$! .collect::<Vec<_>>()ÁT })Áì– .collect::<Vec<_>>();Áü´+( assert_eq!(reconstructed, all_strings);ÁàËüä# let bytes = vzv_all.as_bytes();ÁüˆEB let vzv_from_bytes: VarZeroVec<VarZeroSlice<VarZeroSlice<str>>> =ÁüÎ0- VarZeroVec::parse_bytes(bytes).unwrap();Áüÿ(% assert_eq!(vzv_from_bytes, vzv_all);Áæ¡°ËÜ´ ## Iterate over WindowsÁÐËüÔMJ Although [`VarZeroSlice`] does not itself have a `.windows` iterator likeÁü¢RO [core::slice::Windows], this behavior can be easily modeled using an iterator:ÁõËæ¡ä use zerovec::VarZeroVec;ÁžËü¢=: let vzv = VarZeroVec::<str>::from(&["a", "b", "c", "d"]);Áüà41 # let mut pairs: Vec<(&str, &str)> = Vec::new();ÁËü™'$ let mut it = vzv.iter().peekable();ÁüÁ;8 while let (Some(x), Some(y)) = (it.next(), it.peek()) {Áüý  // Evaluate (x, y) here.ÁÜž # pairs.push((x, y));Á¸¥üÀ?< # assert_eq!(pairs, &[("a", "b"), ("b", "c"), ("c", "d")]);Á<€æ¡d‰ð¶Õ »êàÑŽ6Òßñ’K'), ¡ÏÊÜ´ŠÁ¯Ñ{·Ë…YÚ¹Ñ³Ñ”Š —ãü¡ @ð˜˜¶Õ ¦ »ê º ãÕÔꄽ àÑšœžŸ¡¢£¤¦ACFHü“!)üè &# Construct a new empty VarZeroSliceÁL ! àÑ
³Ñ¹Ñü’#Kl # àÑŒ
Œ
ƒe
¾ Y
¿eY
ÎeY

Y2fm?Ž ~³Ñ¹Ñ®#
š³Ñ¹Ñ$¶#üÉ&?ü‘%JG Uses a `&[u8]` buffer as a `VarZeroSlice<T>` without any verification.Áà%Ëdè%âêù%Ëü&C@ `bytes` need to be an output from [`VarZeroSlice::as_bytes()`].Á¤Ý&Ž Ž—ã ŽàÑ ù&
œ³Ñ¹Ñã­_ŸÔ£*üñ',) Get the number of elements in this sliceÁ¢(Ëlª(
# ExampleÁ¼(Ë\Ä(íôÔ( # use zerovec::VarZeroVec;Á÷(Ëüÿ(41 let strings = vec!["foo", "bar", "baz", "quux"];Áü¸)0- let vec = VarZeroVec::<str>::from(&strings);Áí)Ëìõ) assert_eq!(vec.len(), 4);Á<—*桪* àÑ ®*
³Ñ¹Ñ$¯*ô—-üî*52 Returns `true` if the slice contains no elements.Á¨+Ët°+á Ã+Ë<Ë+æ¡ô×+Ú£ú+Ëü‚,&# let strings: Vec<String> = vec![];Áü­,0ɤâ,Ëäê, assert!(vec.is_empty());Á<-æ¡Dž- àÑ §-
ž³Ñ¹Ñ$¨-üñ17üë-1. Obtain an iterator over this slice's elementsÁ¡.Ël©.®£».Ë\Ã.íôÓ.Ú£ö.Ëüþ.4Œ¤ü·/0ɤì/Ëüô/;8 let mut iter_results: Vec<&str> = vec.iter().collect();Áü´0'$ assert_eq!(iter_results[0], "foo");Áüà0'$ assert_eq!(iter_results[1], "bar");ÁüŒ1'$ assert_eq!(iter_results[2], "baz");Áü¸1(% assert_eq!(iter_results[3], "quux");Á<å1æ¡$ø1   àÑ

‡f
ÌYž
öYŸ
ÇfYŠ5½Uf ³Ñ¹Ñý1
Ÿ³Ñ¹Ñ$…2ü­7+üÚ2TQ Get one of this slice's elements, returning `None` if the index is out of boundsÁ³3Ël»3®£Í3Ë\Õ3íôå3Ú£ˆ4Ëü44Œ¤üÉ40ɤþ4Ëü†5;”ªüÆ5(% assert_eq!(vec.get(0), Some("foo"));Áüó5(% assert_eq!(vec.get(1), Some("bar"));Áü 6(% assert_eq!(vec.get(2), Some("baz"));ÁüÍ6)& assert_eq!(vec.get(3), Some("quux"));Áüû6! assert_eq!(vec.get(4), None);Á<¡7æ¡´7 àÑø°ú°û°Ðü°ý°þ°ìHˈXêE> ³Ñ ¸7
¡³Ñ¹Ñ$¹7ø¶¿7ü†=4üŒ8$! Get one of this slice's elementsÁµ8Ëd½8âêÎ8ËäÖ8 `index` must be in rangeÁ÷8Ëlÿ8®£‘9Ë\™9íô©9Ú£Ì9ËüÔ94Œ¤ü:0ɤÂ:ËüÊ:;”ªdŠ; unsafe {Áü›;0- assert_eq!(vec.get_unchecked(0), "foo");ÁüÐ;0- assert_eq!(vec.get_unchecked(1), "bar");Áü…<0- assert_eq!(vec.get_unchecked(2), "baz");Áüº<1. assert_eq!(vec.get_unchecked(3), "quux");Á,ð<¸¥<ú<æ¡l”= àÑ ³Ñ ¢=
¢³Ñ¹Ñ$£=ø¶©=üŒD%ü÷?FC Get a reference to the entire encoded backing buffer of this sliceÁÂ@ËüÊ@<9 The bytes can be passed back to [`Self::parse_bytes()`].ÁAËü“ADA To take the bytes as a vector, see [`VarZeroVec::into_bytes()`].ÁÜAËläA®£öAË\þAíôŽBÚ£±BËü¹B,) let strings = vec!["foo", "bar", "baz"];ÁüêB0- let vzv = VarZeroVec::<str>::from(&strings);ÁŸCËü§CFC assert_eq!(vzv, VarZeroVec::parse_bytes(vzv.as_bytes()).unwrap());Á<òCæ¡D™D àÑ —ã ¢D
£³Ñ¹Ñ$£Dü¨F@üÚD:7 Get this [`VarZeroSlice`] as a borrowed [`VarZeroVec`]Á™EËü¡EDA If you wish to repeatedly call methods on this [`VarZeroSlice`],ÁüêE96 it is more efficient to perform this conversion firstÁlµF¥ ¥àÑààáÔ*åì 6
ä>(ùO襳ѹÑÃF
¤³Ñ¹Ñ$ËF!üÊHEüªG?< Parse a VarZeroSlice from a slice of the appropriate formatÁîGËüöGOL Slices of the right format can be obtained via [`VarZeroSlice::as_bytes()`]Á\ÑH§ §—ãê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ §àÑÀÝH
¦³Ñ¹Ñî,áH üÈIf©ðª©ª¶Õ ÍI»ê ÐIãÕ4óIóёJÔêJàÑ«¬68;=ü‚O:üµJ]Z Binary searches a sorted `VarZeroVec<T>` for the given element. For more information, seeÁü—K41 the standard library function [`binary_search`].ÁÐKËlØK®£êKË<òKæ¡ôþKÚ£¡LËü©L+( let strings = vec!["a", "b", "f", "g"];ÁüÙL0ɤŽMËü–M.+ assert_eq!(vec.binary_search("f"), Ok(2));ÁüÉM/, assert_eq!(vec.binary_search("e"), Err(2));Á<ýM桉NËü‘N^[ [`binary_search`]: https://doc.rust-lang.org/std/primitive.slice.html#method.binary_searchÁl‰O àÑ ³ÑǨ —O¨
«³Ñ¹Ñ$˜OŸ žOüú[üøOZW Binary searches a `VarZeroVec<T>` for the given element within a certain sorted range.Á×PËüßPZW If the range is out of bounds, returns `None`. Otherwise, returns a `Result` accordingÁü¾QGD to the behavior of the standard library function [`binary_search`].ÁŠRËü’R=: The index is returned relative to the start of the range.ÁÔRËlÜR®£îRË<öRæ¡ô‚SÚ£ü¥S:7 let strings = vec!["a", "b", "f", "g", "m", "n", "q"];ÁüäS0ɤ™TËü¡TLI // Same behavior as binary_search when the range covers the whole slice:ÁüòTC@ assert_eq!(vec.binary_search_in_range("g", 0..7), Some(Ok(3)));ÁüºUDA assert_eq!(vec.binary_search_in_range("h", 0..7), Some(Err(4)));ÁƒVËü‹V*' // Will not look outside of the range:ÁüºVDA assert_eq!(vec.binary_search_in_range("g", 0..1), Some(Err(1)));ÁüƒWDA assert_eq!(vec.binary_search_in_range("g", 6..7), Some(Err(0)));ÁÌWËüÔW>; // Will return indices relative to the start of the range:Áü—XC@ assert_eq!(vec.binary_search_in_range("g", 1..6), Some(Ok(2)));ÁüßXDA assert_eq!(vec.binary_search_in_range("h", 1..6), Some(Err(3)));Á¨YËü°Y85 // Will return `None` if the range is out of bounds:ÁüíY@= assert_eq!(vec.binary_search_in_range("x", 100..200), None);Áü²Z>; assert_eq!(vec.binary_search_in_range("x", 0..200), None);Á<õZæ¡[Ëü‰[^çÆ´\ àÑ ³Ñ†¹ëɨ ¡\¨
¬³Ñ¹Ñ$¢\Ÿ °\ïÉ,¿\üÃ]Z®ð¯¯®¶Õ È]»ê Ë]ãÕ4î]Ôꄌ^àѰ²&(+-ü c]ü¤^_\ Binary searches a sorted `VarZeroVec<T>` for the given predicate. For more information, seeÁüˆ_74 the standard library function [`binary_search_by`].ÁÄ_ËlÌ_®£Þ_Ë<æ_æ¡ôò_Ú£ü•`+•ÅüÅ`0ɤú`Ëü‚aDA assert_eq!(vec.binary_search_by(|probe| probe.cmp("f")), Ok(2));ÁüËaEB assert_eq!(vec.binary_search_by(|probe| probe.cmp("e")), Err(2));Á<•bæ¡¡bËü©bda [`binary_search_by`]: https://doc.rust-lang.org/std/primitive.slice.html#method.binary_search_byÁ„§c˜ ˜àј Ç­˜ ±± ¸c­©â¿ÛÔÊc¿Û ³Ñ¬Ïc¿ÛÜñþDÜc
°³Ñ¹Ñ¿Û$¹cÈÍL¿cfhü˜s¢üÄd\Y Binary searches a `VarZeroVec<T>` for the given predicate within a certain sorted range.Á¥eËü­eZµÉüŒfG˜ÊØfËüàf=óÊ¢gËlªg®£¼gË<Ägæ¡ôÐgÚ£üóg:óËü²h0ɤçhËüïhLÎÌ|Ài assert_eq!(ÁüÔi<9 vec.binary_search_in_range_by(|v| v.cmp("g"), 0..7),Áœ•j S
×ßµc[{ä ×ß·cs{å ×ß·ˆdi{ø ×߸ˆd{ù ×߸“bw{Ð ×ß¹“b{Ñ ×ß¹‡f…{
×ߺþfz{¥
×ß¼´i{yÆ
ר´åj|yà
רûk}yô
ר¹ûk•yõ
ר¹êny© ר¾ên™yª ר¾üã&ÿÜßÌÏL­„žŸÇüÀ>; A zero-copy, byte-aligned vector for variable-width types.ÁÿËüƒ_\ `VarZeroVec<T>` is designed as a drop-in replacement for `Vec<T>` in situations where it isÁüãa^ desirable to borrow data from an unaligned byte slice, such as zero-copy deserialization, andÁüÅ74 where `T`'s data is variable-length (e.g. `String`)ÁýËühe `T` must implement [`VarULE`], which is already implemented for [`str`] and `[u8]`. For storing moreÁüêda complicated series of elements, it is implemented on `ZeroSlice<T>` as well as `VarZeroSlice<T>`ÁüÏUR for nesting. [`zerovec::make_varule`](crate::make_varule) may be used to generateÁü¥RO a dynamically-sized [`VarULE`] type and conversions to and from a custom type.ÁøËüüKH For example, here are some owned types and their zero-copy equivalents:ÁÈËüÌ*' - `Vec<String>`: `VarZeroVec<'a, str>`Áü÷-* - `Vec<Vec<u8>>>`: `VarZeroVec<'a, [u8]>`Áü¥ 74 - `Vec<Vec<u32>>`: `VarZeroVec<'a, ZeroSlice<u32>>`ÁüÝ =: - `Vec<Vec<String>>`: `VarZeroVec<'a, VarZeroSlice<str>>`Á
ËüŸ
{x Most of the methods on `VarZeroVec<'a, T>` come from its [`Deref`] implementation to [`VarZeroSlice<T>`](VarZeroSlice).Á ËüŸ XU For creating zero-copy vectors of fixed-size types, see [`ZeroVec`](crate::ZeroVec).Áø Ëüü c` `VarZeroVec<T>` behaves much like [`Cow`](alloc::borrow::Cow), where it can be constructed fromÁüà HE owned data (and then mutated!) but can also borrow from some buffer.Á©
Ëü­
u‘‚ü£qƒËÄ™ # Bytes and EqualityÁ²Ëü¶a^ Two [`VarZeroVec`]s are equal if and only if their bytes are equal, as described in the traitÁü˜_\ [`VarULE`]. However, we do not guarantee stability of byte equality or serialization formatÁüø! across major SemVer releases.ÁšËüžVS To compare a [`Vec<T>`] to a [`VarZeroVec<T>`], it is generally recommended to useÁüõa^ [`Iterator::eq`], since it is somewhat expensive at runtime to convert from a [`Vec<T>`] to aÁü×$! [`VarZeroVec<T>`] or vice-versa.ÁüËü€]Z Prior to zerovec reaching 1.0, the precise byte representation of [`VarZeroVec`] is stillÁüÞRO under consideration, with different options along the space-time spectrum. SeeÁü±>; [#1410](https://github.com/unicode-org/icu4x/issues/1410).ÁðË®£Ë\†íä’Ç—¯Ëü³A> // The little-endian bytes correspond to the list of strings.Áüõ1. let strings = vec!["w", "ω", "æ–‡", "𑄃"];Á§Ëü«3”£¬ßѵÄõú£üŽ%" strings: VarZeroVec<'a, str>,Á,´¸¥ºË¬¾ let data = Data {ÁüÔ,) strings: VarZeroVec::from(&strings),Á4ħˆË¼ŒÒ§ü¤Oò§ôËüø+( // Will deserialize without allocationsÁü¤AŒÂüæ8Ö©ŸËü£96 assert_eq!(deserialized.strings.get(2), Some("æ–‡"));ÁüÝ0- assert_eq!(deserialized.strings, &*strings);Áæ¡ËüšB? Here's another example with `ZeroSlice<T>` (similar to `[T]`):ÁÝËíäíÇ—ÜŠ use zerovec::ZeroSlice;Á¦Ëüª>; // The structured list correspond to the list of integers.Áüé let numbers: &[&[u32]] = &[Á´‰ &[12, 25, 38],Á´  &[39179, 100],Á¬· &[42, 55555],ÁÜÍ &[12345, 54321, 9],Á ];ÁðËüô3”£¬¨ѵľú£ü×-* vecs: VarZeroVec<'a, ZeroSlice<u32>>,Á,…¸¥Ë¬Ö˜ü¥(% vecs: VarZeroVec::from(numbers),ÁħÕ˼ÙÒ§üñOò§Á ËüÅ AŒÂü‡!8Ö©À!ËüÄ!96 assert_eq!(deserialized.vecs[0].get(1).unwrap(), 25);Áüþ!2/ assert_eq!(deserialized.vecs[1], *numbers[1]);Á<±"桹"Ëü½"fc [`VarZeroVec`]s can be nested infinitely via a similar mechanism, see the docs of [`VarZeroSlice`]Á̤# for more information.Á¾#Ë”Â# # How it WorksÁÕ#ËüÙ#YV `VarZeroVec<T>`, when used with non-human-readable serializers (like `bincode`), willÁü³$DA serialize to a specially formatted list of bytes. The format is:Áø$Ëüü$@= - 2 bytes for `length` (interpreted as a little-endian u16)Áü½%OL - `2 * (length - 1)` bytes of `indices` (interpreted as little-endian u16s)Áü&'$ - Remaining bytes for actual `data`Áµ&Ëü¹&nk The format is tweakable by setting the `F` parameter, by default it uses u16 indices and lengths but otherÁü¨'1. `VarZeroVecFormat` types can set other sizes.ÁÚ'ËüÞ'WT Each element in the `indices` array points to the ending index of its correspondingÁü¶(\Y data part in the `data` list. The starting index can be calculated from the ending indexÁü“)he of the next element (or 0 for the first element). The last ending index, not stored in the array, isÁüü)%" the length of the `data` segment.Á¢*Ëü¦*vs See [the design doc](https://github.com/unicode-org/icu4x/blob/main/utils/zerovec/design_doc.
ä>(ùOèáåæêëº+ììµáùý¨ý΃υӕÜ˹®…Óàà
á¨ý΃ÏÏ+ÙÛÞ Þ+ÏÊüë+$à๮ü“,;|£,¨çèðééçè⨠·,ó¨\Â,€®R®Y¹®µáùýêëëì’Ô¹®³,KMP Â,ÏÊææ
ë¨ý΃ϡݤݒԹ®ææαææ’Ôüº-5¨îïðððïî⨠Ã-ó¨ Î-…Óñßñ¿-!#&(¼ö-,ù-ª ª…Ó…Óí ÿ-í
ñ¨ý΃Ï$€.üÕ/j8«óðô«óô⨠Ú/ó¨ î/Ï«4Ý/箄ñ/à`ýÎT´0ÊÓõá`õ;=@BüÆ08É0¬­® ¬ÊÓ ­Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•®˜ùò Í0ò
õ8ý΃Ï$Î0þ Ô0üŒ3L¨÷øðù÷ùøâ¨ •3ó¨  3…Óúüú‘3!#&(üß3.$â3’Ô…Óöö
ú¨ý΃Ïî ,ç3ü7N8¯üðýýü¯â¨ ¢7ó¨ ¶7Ï«4¥7箄¹7ÊÓþÅþ+-02¤€8<ƒ8ÊÓûû
þ8ý΃Ïü´8L8°ð°â¨ ¹8ó¨ Í8Ï«4¼8箄Ð8ÊÓƒíîƒ2479\‡94Œ9ÿÿ˜Ôü­9&,°9± ±ÊÓ ±˜Ôÿ ¶9ÿ
ƒ8ý΃Ï$·9ü÷9F¨ð⨠€:ó¨ ”:Ï«4ƒ:箄—:…ÓˆŠŒü98:=?Ô»<üÄ:)& Creates a new, empty `VarZeroVec<T>`.Áò:Ëtú:á ;Ë<•;æ¡ä¡;Ç—Â;ËüÊ;1. let vzv: VarZeroVec<str> = VarZeroVec::new();Áä€< assert!(vzv.is_empty());Á<¡<æ¡È<…Ó
ˆ¨ý΃ÏüµA=ü¦==: Parse a VarZeroVec from a slice of the appropriate formatÁè=Ëüð=PM Slices of the right format can be obtained via [`VarZeroSlice::as_bytes()`].ÁÅ>ËlÍ>®£ß>Ë\ç>íô÷>Ú£š?Ëü¢?4Œ¤üÛ?0ɤ@Ëü˜@ assert_eq!(&vec[0], "foo");Áü¼@ assert_eq!(&vec[1], "bar");Áüà@ assert_eq!(&vec[2], "baz");Áü„A  assert_eq!(&vec[3], "quux");Á<©Aæ¡\¼Aúéê³í³î³Òï³ìð³ñ³ò³ìäs{©¶…ÓÀ
¨ý΃Ïî,ÈAü¯DAüùBHE Uses a `&[u8]` buffer as a `VarZeroVec<T>` without any verification.ÁÆCËdÎCâêßCËüçCC¹¡¤ÃDúé…Ó
Ѝý΃Ïã­…£ü½V-ü†V2/ Obtain this `VarZeroVec` as a [`VarZeroSlice`]ÁDÄV² ²…Ó ²˜Ô ÍV
¨ý΃Ï$ÎVôúaü±`GD Return whether the [`VarZeroVec`] is operating on owned or borrowedÁüý`IF data. [`VarZeroVec::into_owned()`] and [`VarZeroVec::make_mut()`] canÁüËa*' be used to force it into an owned typeÁDb³ ³…Ó Šb
Œ¨ý΃Ï$‹büäcD¡Óc Öc Ýc8°4×ctÑclëcŽ Ž…ÓŒ
Œ
ƒe
¾ Y
¿eY
ÎeY

Y2fm?Ž ~Žý΃Ïùc
¨ý΃Ï$d#%üŒmš¨¤ðªâ­Õ ™m©â³Õ œmÓ­Õ4åmž­Õ­ÕLƒna³Õ„•n÷Ô ‘m•mce_aü»n2¾n´µ ´÷Ô µ¹Õ Án
¨¤­Õ³Õ$Ânî ,Ènü–sr¨ð˜˜â¨ Ÿsó¨ ¢sÏ«4Îs£ýÎìs箄÷s…Ó›s68;=üŽt“88·šÓ!𜷜š’Ì “t©âÎÖ –t©âÂÖ ™t´Ì4ÕtÄÌLítñÎÖ­ÕDÿtaÂÖu‰Ö hjdf`bü¶u"¹u¸¹º ¸‰Ö ¹ ºÍÖ ¼u
88­ÕÎÖÂÖ$½uî ,Ãuƒv‚°ž›°ž¹°žžž­ÕÎÖÂÖ ÎÖ ­Õü8» Ó!¡ð¢Í£¢ ¡£»â¨ ¢v©âš× ¥v£Ì ¨vÍt«vÏ«4óvžýÎýÎL‹wñš×ýÎDwØÌ„®wÜÖ¥ ¥rtnpsur ±vüÔw$×w¼½ ¼ÜÖ ½™×Ÿ ÚwŸ
¥8ýΚ׳ÕÍ$Ûwî ,áw£x¥‚°§›°§¹°§§¥§ýΚ׳ÕÍ š×šÉü½xb¨©ªð««ª©â¨ Æxó¨ çxÏ«4ÉxÉýÎýÎTÛx箄êx…ӬˬÂxEGJLü¦y7\©y¾¿ ¾…Ó ¿…Ó­þ¨ µy¨
¬¨ý΃Ï$¶yî ,¼yü—zT¨®¯ð°°®¯â¨  zó¨ ºzÏ«4£z‚Ƶz箄½z…ӱıœz9;>@üòz'õzÀÁ À…Ó Á…Óñþ­ ùz­
±¨ý΃Ï$úzî ,€{üƒ!©©ÿ¨©ü¾ ܨüéJÒ¨Õ¨´¨·¨–¨™¨o¨äùe¨\¼M<ÀM¾ª»æ žåhlÒ½
ŸÔæÃ½¢ÔȽ¢ÕüÕ½£Üɽ¤Üؽ¤ÍŒÁ]½¥Á¯½¦Á¯Š½¦ NonZeroUsizeÁd÷º’½§,”콨ν©Ѩ½ æUÒ¨½ ²VÓ¨½ â>ԨĽ ÀYըɽ åY֨ͽ òYרν ³ZبÓ½ Ü?Ù¨­½ µŽGÚ¨½ ¸ÆGÛ¨½ ºûJܨ×½ ¼ÞLݨö½ ½â>Þ¨·½ Ø³ZÞ¨¸½ Ù¶¬Þ¨Ê½ ´iÞ¨Æ
½ ´åjߨà
½ ûkà¨ô
½ ¹ûkø¨õ
½ ¹ên䨩 ½ ¾ênü¨ª ½ ¾L½Âý
¾
ÕüÕ¾Àæ,Θ¾Áî>¾¾¿Ž ª¾¿Ž8”„%»¾¿¾¿ æU¾¿ ²V¾¿ â>ľ¿ ÀYɾ¿ åY;¿ òYξ¿ ³ZÓ¾¿ Ô&þ¿¢Ô>Ⱦ¿¢Üɾ¿¤Ü0ؾ¿¤Í Á]¾¿¥Á¯#¾¿¦Á¯<о¿¦÷Ü º’¾¿§#쾿¨Î&¾¿©Ü?­¾¿ µŽG¾¿ ¸ÆG¾¿ ºûJ×¾¿ ¼ÞLö¾¿ ½â>·¾¿ Ø³Z¬¸¾¿ Ù¶¬ƒ¬Ê¾¿ ´i‡¬Æ
¾¿ ´åjŒ¬à
¾¿ ûk‘¬ô
¾¿ ¹ûk­¬õ
¾¿ ¹ên¬© ¾¿ ¾ên¹¬ª ¾¿ ¾œÝ±„ö¢ü‰=: A zero-copy "slice", i.e. the zero-copy version of `[T]`.ÁÇË„Ë
This behavesÁüÜMJ similarly to [`ZeroVec<T>`], however [`ZeroVec<T>`] is allowed to containÁüªQÁþüüG›ÿÄËüÈföÿü¯jå€üšda using `VarZeroVec<ZeroSlice<T>>`. See the [`VarZeroVec`](crate::VarZeroVec) docs for an example.ÁÿËá Ëü–'$ Const-construct a ZeroSlice of u16:Á¾Ëæ¡äÊ use zerovec::ule::AsULE;ÁÜ缜ƒËü‡! const DATA: &ZeroSlice<u16> =Áü©KH ZeroSlice::<u16>::from_ule_slice(&<u16 as AsULE>::ULE::from_array([Áüõ! 211, 281, 421, 32973,Ád—  ]));Á¤ Ëü¨ '$ assert_eq!(DATA.get(1), Some(281));Áæ¡ÄÄ©â³Ñ
ɳÑ,…
©ØÈE(ÃÅÀÉ©Øûh¾ÀÉ©ØÂÂ
óÑz|
¾ÂÂÀÉü˜
(Çǽð
Îð
©ØÈÉÊËÌÍÎÏÐ+-üç
)ÜÇ
 Returns an empty slice.ÁLô
 ©ØÆÆ
ȳÑü±
0üÀ 41 Get this [`ZeroSlice`] as a borrowed [`ZeroVec`]Áù Ëü JG [`ZeroSlice`] does not have most of the methods that [`ZeroVec`] does,ÁüÐ NK so it is recommended to convert it to a [`ZeroVec`] before doing anything.ÁT¾
 ©تªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
Â³ÑÆ É
Æ
ɳÑ
ü•;ü–PM Attempt to construct a `&ZeroSlice<T>` from a byte slice, returning an errorÁüë%" if it's not a valid byte sequenceÁ\œÃ ×ãê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ éØÀÆ ¯Æ
ʳÑã­üÔ?ü¤EB Uses a `&[u8]` buffer as a `ZeroVec<T>` without any verification.ÁîËâêËü@= `bytes` need to be an output from [`ZeroSlice::as_bytes()`].Á¤èÄ Ä—ã Ä©ØÆ Æ
˳Ñã­¨ü’6üŸ52 Construct a `&ZeroSlice<T>` from a slice of ULEs.ÁÙËüáTQ This function can be used for constructing ZeroVecs in a const context, avoidingÁœº parsing checks.ÁÒËüÚ%" See [`ZeroSlice`] for an example.ÁtŸÅ ÅÀÉ Å©ØÆ µÆâÉîú©üÆ ü‘LI Returns this slice as its underlying `&[u8]` byte buffer representation.ÁâËìê Useful for serialization.ÁŒËl”®£¦Ëæ¡̺ use zerovec::ZeroVec;ÁØËüàOL // The little-endian bytes correspond to the numbers on the following line.Áü´IF let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];Áü‚/, let nums: &[u16] = &[211, 281, 421, 32973];ÁËü¾2/ let zerovec = ZeroVec::alloc_from_slice(nums);ÁõËüý*' assert_eq!(bytes, zerovec.as_bytes());Áæ¡Æ Æ©Ø Æ—ãÆ Ö Æ
ͳÑüå!-ü§!+( Dereferences this slice as `&[T::ULE]`.Ádò!Ç Ç©Ø ÇÀÉÆ ÿ!ÆùÖ$€"üÒ& ü°"1. Returns the number of elements in this slice.Áæ"Ëlî"®£€#Ë<ˆ#æ¡ä”#èì̵#ºþÓ#ËüÛ#I¿ÿü©$ let zerovec: ZeroVec<u16> =ÁüÍ$96 ZeroVec::parse_bytes(bytes).expect("infallible");Á%Ëü“%! assert_eq!(4, zerovec.len());Á|¹%ˆÞ¤Í% bytes.len(),Áüæ%B? zerovec.len() * std::mem::size_of::<<u16 as AsULE>::ULE>()Á4­&ÿÞ<¸&æ¡ß&È È©ØÆ ã&Æ
ϳÑ$ä&ü–+$ü¢'(% Returns whether this slice is empty.ÁÏ'Ël×'®£é'Ë<ñ'æ¡Ìý'ºþ›(Ëü£(I¿ÿüñ(ç„ü•)9üÓ)! assert!(!zerovec.is_empty());Áù)Ëü*PM let emptyvec: ZeroVec<u16> = ZeroVec::parse_bytes(&[]).expect("infallible");ÁüÖ*! assert!(emptyvec.is_empty());Á<ü*æ¡D£+É É©ØÆ ¬+Æ
гÑ$­+üí+(ÒÒ½ð ò+Îð,,©ØÓÔÙÚÛÝßàáã.0üì/,üœ,LI Gets the element at the specified index. Returns `None` if out of range.Áí,Ëlõ,®£‡-Ë<-æ¡Ì›-ºþ¹-ËüÁ-I¿ÿü.ç„ü³.9ñ.Ëüù.*' assert_eq!(zerovec.get(2), Some(421));Áü¨/%" assert_eq!(zerovec.get(4), None);Á<Ò/æ¡ó/Ê Ê©ØýæÑ ÷/Ñ
Ó³Ñ$ø/ö,þ/ü·5<ü”1PM Gets the entire slice as an array of length `N`. Returns `None` if the sliceÁüé1'$ does not have exactly `N` elements.Á•2Ël2®£¯2Ë<·2æ¡ÌÃ2ºþá2Ëüé2I¿ÿü·3ç„üÛ39Ì™4 let array: [u16; 4] =Áü·4DA zerovec.get_as_array().expect("should be 4 items in array");Á€5Ëôˆ5 assert_eq!(array[2], 421);Á<«5æ¡d¾5Ë Ë©Øø°ú°û°Ðü°ý°þ°ìHˈXêE>óðÑÍÕÕ Û5ÑÍtË5
Ô³ÑÍ$Ü5 Ñ5Þ6Ô‚°Ø›°Ø¹°ØØÔسÑÍþȳÑüñ;Hü„7SP Gets a subslice of el
½
¾
åhÁ
ì¾ žóP¾7Šyôâ³ÑÑÊ\Ñ
á³Ñ$Ò\üÞb7ü¯]TQ Returns a tuple with the first element and a subslice of the remaining elements.Áˆ^Ël^®£¢^Ë<ª^æ¡ä¶^èìÜ×^¼œ÷^Ëüÿ^!¤íü¥_KÎíüõ_!¢îd›`Ëîü¬`41 const EXPECTED_VALUE: (u16, &ZeroSlice<u16>) = (Ádå` 211,Áüö`KÎíäÆa 281, 421, 32973,Ádça ])),Á4øaÿÞüƒb<9 assert_eq!(EXPECTED_VALUE, DATA.split_first().unwrap());Á<Äbæ¡\åbÒ Ò©Øø°ú°û°Ðü°ý°þ°ìHˈXêE>³ÑǼÑ ñbÑ
ã³Ñ$òbüåf4¨åæåæ©âýÎ îfÉýÎ,ñfÆ×çèéßKàKäKèéêf;=L g$¥gääýÎü³g$¶gÓ ÓÆ×ø°ú°û°Ðü°ý°þ°ìHˈXêE>ýÎä »gä
è¨ýÎ$Àgü–h-L™hÔ ÔÆ×ºÂä £hä
é¨ýÎ$¤hüêh=¨ëìëìñ½ óh‚¾,öhÆ×íªKíïh!#´®i±iÕ ÕÆ×ê µiê
í¨ýÎ$¶iüåi?¨ïððïñ½ îi‚¾,ñiÆ×ñóJñêi!#ü«j$L®jÖ ÖÆ×‘¿î ¸jî
ñ¨ýÎ$½jü–k.óó½ð ›kÎð,¸kãÃÀk©ØôüÞp:üËkZW Binary searches a sorted `ZeroVec<T>` for the given element. For more information, seeÁüªl-* the primitive function [`binary_search`].ÁÜlËläl®£ölË<þlæ¡ÌŠmºþ¨mËü°mI¿ÿüþmç„ü¢n9ànËüèn30 assert_eq!(zerovec.binary_search(&281), Ok(1));Áü o41 assert_eq!(zerovec.binary_search(&282), Err(2));Á<Ùoæ¡åoËüío^çÆlåpר ×©Ø Ø³ÑÇò ópò
ô³Ñ$ôpŸ úp<Õqô‚°õ›°õ¹°õõôõ³Ñ þÈñþ ³Ñüˆr(÷÷½ð rÎð,ªr©Øøüôwwü·r_\ Binary searches a sorted `ZeroVec<T>` based on a given predicate. For more information, seeÁü›s0- the primitive function [`binary_search_by`].ÁÐsËlØs®£êsË<òsæ¡ÌþsºþœtËü¤tI¿ÿüòtç„ü–u9ÔuËüÜuA> assert_eq!(zerovec.binary_search_by(|x| x.cmp(&281)), Ok(1));Áü¢vB? assert_eq!(zerovec.binary_search_by(|x| x.cmp(&282)), Err(2));Á<évæ¡õvËüývd®Ù„ûw٠٩ذ4Çö°4ùù •xö©âþÍ̳xþͳѤ¸xþÍÇÎñþDÄx
ø³ÑþÍ$–xÈÍL¨xNP<¨yø‚°ú›°ú¹°úúøú³ÑþÍŸÉ þÍüÁ7üü½ð ÍÎð·é©ØýþÔÖýþ.0ü7tÚ Ú—ãºêû ¦€û
ý³Ñã­,Ÿ€ü†5¤Û Û—ã Û©Øû ¬û
þ³Ñã­ü/½ð ”‚Îð,´‚ãò¼‚©ØüÂP½ð È‚Îð,ƒØðL‰ƒ©Øƒ ƒ&(ü¨ƒ*«ƒÜÝ Ü©Ø Ý©Ø ®ƒ
ƒ³Ñ$¯ƒî ,µƒüG½ð •„Îð,Å„ØðLÍ„©Ø &(üì„!ï„Þß Þ©Ø ßƒÙ ò„
³Ñ$ó„î ,ù„üÇ…V¨ˆˆñ½ Ð…‚¾,‹†¶ÔL“†ÙŠ ŠÌ…-/ü²†,µ†àá àÙ áÄÙ ¸†
ЍýÎ$¹†î ,¿†üއV¨Œ
蟬
VS Typically, the zero-copy equivalent of a `Vec<T>` will simply be `ZeroVec<'a, T>`.Áÿ
Ëüƒ ro Most of the methods on `ZeroVec<'a, T>` come from its [`Deref`] implementation to [`ZeroSlice<T>`](ZeroSlice).Áö Ëüú ^[ For creating zero-copy vectors of fixed-size types, see [`VarZeroVec`](crate::VarZeroVec).ÁÙ ËüÝ `] `ZeroVec<T>` behaves much like [`Cow`](alloc::borrow::Cow), where it can be constructed fromÁü¾
HÝŽËl‹®£Ë<æ¡Ì¥ºþ¿ËüÃOçþü“-* let nums: &[u16] = &[211, 281, 421, 461];ÁÁËüÅ3”£¬ùѵÄú£ü¨ nums: ZeroVec<'a, u16>,Á¸¥ÎËüÒ&# // The owned version will allocateÁ¬ùÖ˜ü.+ nums: ZeroVec::alloc_from_slice(nums),Áħ¼ÅÒ§üÝOò§­Ëü±+ä™üÝAŒÂüŸ8Ö©ØËüÜ,) // This deserializes without allocation!Áü‰+š¬üµ41 assert_eq!(deserialized.nums.get(2), Some(421));Áüê(% assert_eq!(deserialized.nums, nums);Á<“æ¡Ë¼Ÿœ¬·Ë”»¬£ÎËüÒa^ `ZeroVec<T>` represents a slice of `T` as a slice of `T::ULE`. The difference between `T` andÁü´da `T::ULE` is that `T::ULE` must be encoded in little-endian with 1-byte alignment. When accessingÁü™c` items from `ZeroVec<T>`, we fetch the `T::ULE`, convert it on the fly to `T`, and return `T` byÁ value.ÁˆËüŒyv Benchmarks can be found in the project repository, with some results found in the [crate-level documentation](crate).ÁËüŠv“«ùH¨«¬«¬ñ½ ˜‚¾ÔÚ¨üü ÄÙʘ!ÚÆdG
­®¯?Aüµ"½ªª±ääÚ½ªªßên<ü½ªªŠÁ¯Ñ{·Ë…YÚ ¨ÔÚüK¨±²±²ñ½  ‚¾¨âÔÚÔÚÄÙœ79ü™D¨´µµ´ñ½ ©‚¾Ì÷ÄÙ¥ üâ+¨·¸·¸ñ½ 낾ÄÙ¹ºíîºç(*\” 4™ Ùü î îÄÙ îÄÙí Ë 
º¨ýÎäý$ K½¨8¼¼©âæã —%ÑßK'L)óî1#½Œê&ê&½»»æÝìí'¨8¿¿àú ò'ÑßÀÂÄüò(2”ü(½ï ïÑß ¨“Þ¾¨ÁÁ “)¾
Àæã¨$”))ü**DŠ*½Ã ÃÑß Ã“Þ¾“*¾
Âæã$*ü‹1"DŽ1½ð ðÑß¾ —1¾
Äæã$œ1maxÁ¢1ü´9+¨ÆÇÆÇñ½ ½9‚¾,À9ÄÙÈßȹ9!#¼æ9,é9ñ ñÄÙÄÙÅ ï9Å
ȨýÎ$ð9ü—=9¨ÊËÊËñ½  =‚¾,£=ÄÙÌóÌœ=!#ü×=!4Ú=ò òÄÙ òÙÉ á=É
̨ýÎ$â=üœ>F8óÎóÎñ½ ¡>‚¾,Ï>ì´T×>¸ÛÏá`Ï#%üé>4ì>ôõö ô¸Û õÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•ö˜ùÍ ð>Í
Ï8ýÎ$ñ>þ ÷>ü¯A18÷ÑÑ÷ñ½ ´A‚¾,ÖAòÎÞA¸ÛüåA\¨Ó¤ÔÕÔÓÕ©â­Õ òAÉ­Õ,¯BÄÌL·B˜ÜÖ ÖêAîA79üÖB,ÙBøù ø˜Ü ùçÜÒ ÜBÒ
Ö¨¤­Õ$ÝBî ,ãBüêCJ8ú8ûØúûØè„ ïCù„ ,¢DÄÌLªD½ÝÙ Ù#%üÉD"ÌDüýþ ü½Ý ý þÞ× ÏD×
Ù88­Õ$ÐDî ,ÖDü¥E\8ÿÛÍÜÜÛÿñ½ ªEÍt­E‚¾,ïE¶ÔL÷E¸ÛÞ Þ130 ³Eü–F$™F ¸Û ¡ÞÚ œFÚ
Þ8ýÎÍ$Fî ,£FüôF-¨áâáâñ½ ýF‚¾,€GÄÙãÅãùF!#¤¶G<¹GÄÙàà
ã¨ýÎüêG=¨åææåñ½ óG‚¾,öGû×TþGÄÙçËçïG)+ü®H7\±Hƒ ÄÙ ƒÄÙ­þä ½Hä
ç¨ýÎ$¾Hî ,ÄHüŸI/¨éêéêñ½ ¨I‚¾,«I‚ƳIÄÙëÄë¤I)+üÕI'ØI ÄÙ ÄÙñþè ÜIè
ë¨ýÎ$ÝIî ,ãIü®J5¨íîíîñ½ ·J‚¾,ºJÄÙïóï³J!#ìêJ4íJ ÄÙ ÓÚì ôJì
ï¨ýÎ$õJü¯K8¨ñòñòñ½ ¸K‚¾,»KÄÙóüó´K!#üîK$$ñKêÞÄÙðð
ó¨ýÎî ,öKüìM!¨õöõöñ½ õM‚¾,øMÄÙ÷øùúûüýþÿñM13Ô‡Pü”N0- Creates a new, borrowed, empty `ZeroVec<T>`.ÁÉNËtÑNá äNË<ìNæ¡ÌøNºþ–OËüžO*' let zv: ZeroVec<u16> = ZeroVec::new();ÁÜÍO assert!(zv.is_empty());Á<íOæ¡”PÄÙôô
÷¨ýÎü¥Q&üÏPQN Same as `ZeroSlice::len`, which is available through `Deref` and
¨ü²üÙ¿.¨ƒƒñ½ â¿‚¾,ÀÄÙÞ¿üÌÊ.¨ñ½ ÕÊÍýÎ,ôÊÄÙˆÑÊ$&üªÐ5üËUR Attempts to create a `ZeroVec<'a, T>` from a `&'a [T]` by borrowing the argument.ÁÛËËüãËRO If this is not possible, such as on a big-endian platform, `None` is returned.ÁºÌËlÂÌ®£ÔÌË<ÜÌæ¡Ìè̺þ†ÍËüŽÍOçþüâÍIÕœ ü°Î-¥ëâÎËüêÎ:7 if let Some(zerovec) = ZeroVec::try_from_slice(nums) {Áü©Ï%" assert!(!zerovec.is_owned());ÁüÓÏ.+ assert_eq!(bytes, zerovec.as_bytes());Á,†Ð¸¥<Ðæ¡t±Ð ¨øàø°ú°û°Ðü°ý°þ°ìHˈXêE>ÄÙ
ˆ¨ýÎî,ÀÐ\‹Ñˆ‚°›°¹°ˆýμá©âü¶Ù.¨ŒŒñ½ ¿Ù‚¾,ÞÙÄÙŽ»Ù!¼ô„üRO Remove all elements from this ZeroVec and reset it to an empty borrowed state.Á,û„Œ ŒÄÙŠ Š
¨ýÎ$†…ü¤.üû£41 Truncates this vector to `min(self.len(), max)`.ÁLɤÄÙÄÙŠŠ
ލýÎ$פ¶ýݤ´Ä²üí§eb Convenience wrapper for [`ZeroSlice::from_ule_slice`]. The value will be created at compile-time,ÁüÓ¨52 meaning that all arguments must also be constant.Á‰©Ë|© # ArgumentsÁ©Ëü¡©WT * `$aligned` - The type of an element in its canonical, aligned form, e.g., `char`.Áüù©da * `$convert` - A const function that converts an `$aligned` into its unaligned equivalent, e.g.,ÁüÞªEB const fn from_aligned(a: CanonicalType) -> CanonicalType::ULE`.Áü¤«96 * `$x` - The elements that the `ZeroSlice` will hold.ÁÞ«Ëtâ«á ñ«Ëüõ«<9 Using array-conversion functions provided by this crate:Á²¬Ë<¶¬æ¡ü¾¬41 use zerovec::{ZeroSlice, zeroslice, ule::AsULE};Áó¬Ëü÷¬ur const SIGNATURE: &ZeroSlice<char> = zeroslice!(char; <char as AsULE>::ULE::from_aligned; ['b', 'y', 'e', '✌']);Áüí­0- const EMPTY: &ZeroSlice<u32> = zeroslice![];Áž®Ëü¢®.+ let empty: &ZeroSlice<u32> = zeroslice![];ÁüÑ®TQ let nums = zeroslice!(u32; <u32 as AsULE>::ULE::from_unsigned; [1, 2, 3, 4, 5]);Áü¦¯(% assert_eq!(nums.last().unwrap(), 5);Á<ϯæ¡ׯËüÛ¯-* Using a custom array-conversion function:Á‰°Ë<°æ¡ü•°FC use zerovec::{ule::AsULE, ule::RawBytesULE, zeroslice, ZeroSlice};ÁܰËüà°:7 const fn be_convert(num: i16) -> <i16 as AsULE>::ULE {Áü›±&# RawBytesULE(num.to_be_bytes())Á,±¸¥ȱËü̱'$ const NUMBERS_BE: &ZeroSlice<i16> =Áüô±74 zeroslice!(i16; be_convert; [1, -2, 3, -4, 5]);Á<¬²æ¡&|´²P Û² °´ á² â²*ä² ç² ”³, ñ²8,ò²'÷²8æ Lù²'‚³8²&L„³ ³ ޳% •³ ›³ ̳ , œ³8alignedÁ<³& ¤³8¥³% §³, ©³8ª<ª³& ±³8ï$²³% ¶³ ¸³ ˳, ¹³ º³ ³, »³8Ÿ ¼³& ½³8ï$¾³$ ó ij, Ƴ dz ɳ$ ȳ- ʳ*γ ѳ ­´ , Û³8,ܳ'á³8æ Lã³'ì³ î³, ï³8—É <ð³ ÷³'ø³8û0tú³ ˆ´ §´8,‰´ ´ ¦´ ‘´ ’´ ¤´, “´ ”´ ¡´, •´8ª<–´ ´  ´, ž´8Ÿ Ÿ´$ ¢´
£´% ®´¤‚¹ü³´c` Creates a borrowed `ZeroVec`. Convenience wrapper for `zeroslice!(...).as_zerovec()`. The valueÁü—µVS will be created at compile-time, meaning that all arguments must also be constant.ÁîµËüòµ>; See [`zeroslice!`](crate::zeroslice) for more information.Á±¶Ëtµ¶á Ķ
´Ü?ð&­µåj1&à
ŽGý&¸ûk>&ô
¹ûkP&õ
¹ÆG'ºûJ'×¼ÞL'ö½ênl&© ¾ên~&ª ¾÷ ã#ÀÍ¥Á]ÁÓ
ªÕÂîªcÃâ>‰'·Ø³Zƒ'¸ÙL­Æ
Ç
›Cœ¸æÕüÕ¤‚>PÎ¥C4äå¶C,ðçãF,ûä 4†ÐçN,’ôS4é³)æUµ)²V·)â>¹)ÄÀY»)ÉåY½)ÍòY¿)γZÁ)ÓÜ?Ã)­µŽGÅ)¸ÆGÇ)ºûJÉ)×¼ÞLË)ö½÷˜ã#ÀÍÁ]ÁÓ
žÕÂcÃâ>-*·Ø³Z.*¸Ù¶¬/*Êåj*à
ûk*ô
¹ûk4*õ
¹ên!*© ¾ên:*ª ¾Ô±=œÑ-´êd
üÞ˜Ú
üó *ü 
GD Converts a [`char`] to a [`CharULE`]. This is equivalent to callingÁìì
 [`AsULE::to_unaligned()`]ÁŽ Ëü– JG See the type-level documentation for [`CharULE`] for more information.Ád€ üÞ¢üŠ\»äÖü€
JG Converts this [`CharULE`] to a [`char`]. This is equivalent to callingÁìÏ
 [`AsULE::from_unaligned`]Áñ
Ëüù
J·å <ÝüÞ
ÜÞüÞÅüŽ7t‘ —ãºêš §š
ã­¡‚°œ›°œ¹°œœœèŸèŸéŸCharTryFromErrorÁêŸì/ %ÎlK°=ÀœäžŸ ÊËÌ ŸƒüÞü¥"Ê
Ÿü‡/ˆì 
  unalignedÁL™ÜÞüޢˢü€7Ž ŽüÞ üÞ­þ¡ ¡
¢$î ,–¤áüޤĤüü'ÿ üÞ üÞñþ£ ƒ£
¤$„î þ­ù„õa¥§»Ý%d“¥©¯ Ô*T¡à¥ª° Ô*ᥪ° æ Â¥«² žŽ ª¥¬³ ‚> ¥¦Î¥¥¦Cµå¥¦¶C´ç¥¦ãF³¥¦ä ²Ð¥¦çN±¥¦ôS°é¥¦b2¥¦æUd2¥¦²Vf2¥¦â>h2Ä¥¦ÀYj2É¥¦åYl2Í¥¦òYn2Î¥¦³Zp2Ó¥¦ŽG[2¥¦¸ÆG]2¥¦ºûJ_2×¥¦¼ÞLa2ö¥¦½÷. ã#¥¦ÀÍ1 Á]¥¦ÁÓ
4 Õ¥¦Âî7 ªc¥¦Ãâ>Ã2·¥¦Ø³ZÄ2¸¥¦Ù¶¬Å2Ê¥¦´iÆ2Æ
¥¦´åjÈ2à
¥¦ûkÊ2ô
¥¦¹ûkã2õ
¥¦¹ênÐ2© ¥¦¾êné2ª ¥¦¾üâ#ü‹5lo@C),ü´3üÅ[X Allows types to be encoded as VarULEs. This is highly useful for implementing VarULE onÁü¡TQ custom DSTs where the type cannot be obtained as a reference to some other type.ÁöËüúkh [`Self::encode_var_ule_as_slices()`] should be implemented by providing an encoded slice for each fieldÁüæ^[ of the VarULE type to the callback, in order. For an implementation to be safe, the slicesÁüÅTQ to the callback must, when concatenated, be a valid instance of the VarULE type.ÁšËüžJG See the [custom VarULEdocumentation](crate::ule::custom) for examples.ÁéËüí}z [`Self::encode_var_ule_as_slices()`] is only used to provide default implementations for [`Self::encode_var_ule_write()`]Áüë jg and [`Self::encode_var_ule_len()`]. If you override the default implementations it is totally valid toÁüÖ
ol replace [`Self::encode_var_ule_as_slices()`]'s body with `unreachable!()`. This can be done for cases whereÁüÆ jg it is not possible to implement [`Self::encode_var_ule_as_slices()`] but the other methods still work.Á± Ëüµ \Y A typical implementation will take each field in the order found in the [`VarULE`] type,Áü’
da convert it to ULE, call [`ULE::slice_as_bytes()`] on them, and pass the slices to `cb` in order.Áü÷
if A trailing [`ZeroVec`](crate::ZeroVec) or [`VarZeroVec`](crate::VarZeroVec) can have their underlyingÁüá'$ byte representation passed through.ÁËüjg In case the compiler is not optimizing [`Self::encode_var_ule_len()`], it can be overridden. A typicalÁüøtq implementation will add up the sizes of each field on the [`VarULE`] type and then add in the byte length of theÁÜí dynamically-sized part.ÁËì # Reverse-encoding VarULEÁ«Ëü¯OL This trait maps a struct to its bytes representation ("serialization"), andÁüÿ\Y [`ZeroFrom`](zerofrom::ZeroFrom) performs the opposite operation, taking those bytes andÁüÜ41 creating a struct from them ("deserialization").ÁËd•âê¢Ëü¦FC The safety invariants of [`Self::encode_var_ule_as_slices()`] are:Áüí# - It must call `cb` (only once)Áü‘gd - The slices passed to `cb`, if concatenated, should be a valid instance of the `T` [`VarULE`] typeÁüùYV (i.e. if fed to [`VarULE::validate_bytes()`] they must produce a successful result)ÁüÓ;8 - It must return the return value of `cb` to the callerÁËü“gd One or more of [`Self::encode_var_ule_len()`] and [`Self::encode_var_ule_write()`] may be provided.Áüû{x If both are, then `zerovec` code is guaranteed to not call [`Self::encode_var_ule_as_slices()`], and it may be replacedÁÔ÷ with `unreachable!()`.ÁËü–@= The safety invariants of [`Self::encode_var_ule_len()`] are:Áü×@= - It must return the length of the corresponding VarULE typeÁ˜ËüœB? The safety invariants of [`Self::encode_var_ule_write()`] are:ÁüßTQ - The slice written to `dst` must be a valid instance of the `T` [`VarULE`] typeÁ­®­®÷™ü´¤ ⨠ÔÏ«­÷™*÷™²µ¯²µ²¯µDFü’KüîJG Calls `cb` with a piecewise list of byte slices that when concatenatedÁü½DA produce the memory pattern of the corresponding instance of `T`.ÁËüŽTQ Do not call this function directly; instead use the other two. Some implementorsÁüç&# may define this function to panic.ÁÄ• À•þ‚ƒƒ­š°¢±°± ±­¶ƒ ®ǃÔ¼þ‚ 
—ã¬Áþ‚í“
 ƒƒ Õ
¯À•ý΃ƒþ‚cbÁ¸ˆŠü­%üãEB Return the length, in bytes, of the corresponding [`VarULE`] typeÁ”° À•­ í
²À•ýβ‚°³›°³¹°³³²³À•ýÎ 
—㲂°´›°´¹°´´²´À•ýÎ í­ü½ 2üµMJ Write the corresponding [`VarULE`] type to the `dst` buffer. `dst` shouldÁü‡ 1. be the size of [`Self::encode_var_ule_len()`]Á¤À  À• —ã­ Õ ­
µÀ•ýη…à lØ!µ‚°›°¹°µÀ•ýÎü–
 —ãüÛ*7¸¸¶Õ ç*ãÕ4ê*³Ñ¹¯¹ü™+JÄœ+˜ ˜³Ñ¢š·šº¢»»º ¸+·©â‡œ
µ+©â‚œ
ÔÃ+š‚œ
 
š—ã¬È+š‚œ
÷œ
 ‡œ
Ü+
¹³Ñ‡œ
‚œ
$¹+Ë“
¿+ŒŽˆŠü,;8½½â¨ œ,Ï«4Ÿ,Ãྯ¾üÒ,JÄÕ,œ œÃàþ‚ƒƒ¼š¿¢À¿À ñ,¼¶ƒ î,ǃÔü,žþ‚ 
ž—ã¬-žþ‚ÛŸ
 ƒƒ •-
¾8ý΃ƒþ‚$ò,Ë“
ø,ˆŠüÉ-?8Ÿ8 Â ŸÂ’Ì Õ-´Ì4Ø-ØàïÃü.JÄ’.¡ ¡Øà¢šÁšÄ¢ÅÄÅ ®.Á©â÷¡
«.©âò¡
Ô¹.¢£ò¡
 ¢
£—㬾.¢£ò¡
ç¢
 ÷¡
Ò.
Ã88­Õ÷¡
ò¡
$¯.Ë“
µ.˜üÒ:U8¤ÇǤñ½ Þ:‚¾,—;ýÎ<Ÿ;óàÈË̯²µËÈÌ<>ü®;Iı;¥ ¥óàþ‚ƒƒÆšÉ¢ÊÉÊ Í;ƶƒ Ê;ǃÔ×;¦§þ‚ ¦
§—ã¬Ü;¦§þ‚ö¥
 ƒƒ ð;
È8ý΃ƒþ‚$Î; Ô;ˆüâ<%”å<¨ ¨óàÆ ø<Æ
Ë8ýÎ$ù<üÉ=.¤Ì=©ª ©óà ª—ãÆ á=Æ
Ì8ýÎ$â=·…è=üàD\8«Î«Îñ½ ìD‚¾,¬E§¤
<´E¸ÛÏÒÓ¯²µÒÏÓ9;üÃEIÄÆE¬ ¬¸Ûþ‚ƒƒÍšÐ¢ÑÐÑ âEͶƒ ßEǃÔìE­®þ‚ ­
®—ã¬ñE­®þ‚Òª
 ƒƒ …F
Ï8ý΃ƒþ‚$ãE éEˆü÷F%”úF¯ ¯¸ÛÍ GÍ
Ò8ýÎ$ŽGüÈG.¤ËG°± °¸Û ±—ãÍ àGÍ
Ó8ýÎ$áG·…çGüìH”8²Õ—BÖð×Ö²Õ×⨠øH©âžá ûH£Ì þHÏ«4½I­žáýÎŒÕIØÌ„ïI˜áØÛܯ²µÜÛØfhbdgiü‡JIÄŠJ³ ³˜á¢šÔšÙ¢ÚÚÙ ¦Jԩ⼯
£J©â·¯
Ô°J´µ·¯
 ´
µ—㬵J´µ·¯
¬°
 ¼¯
ÉJ
Ø8ýΞá³Õ¼¯
·¯
$§J ­Jü€L%”ƒL ˜áÔ –LÔ
Û8ýΞá³Õ$—Lü–M.¤™M·¸ ·˜á ¸—ãÔ ®MÔ
Ü8ýΞá³Õ$¯M·…µMüÀS„8¹Þðß¹Þß⨠ÌSó¨ ÏSÏ«4›T箄³TÊÓàã䯲µãàäACFHüËTIÄÎTº ºÊÓò¡
÷¡
Ýšá¢âáâ êTݰ¢
çTÁ¢
ÔôT»¼ò¡
 »
¼—ã¬ùT»¼ò¡
ʵ
 ÷¡
U
à8ý΃Ï÷¡
ò¡
$ëT ñTŠŒüÿU%”‚V½ ½ÊÓÝ •VÝ
ã8ý΃Ï$–VüÞV.¤áV¾¿ ¾ÊÓ ¿—ãÝ öVÝ
ä8ý΃Ï$÷V·…ýVŠ,ü‹ üËb_ Given `Self` (`$aligned`), `Self::ULE` (`$unaligned`), and a conversion function (`$single` orÁü®[X `Self::from_aligned`), implement `from_array` for arrays of `$aligned` to `$unaligned`.ÁŠËüŽC@ The `$default` argument is due to current compiler limitations.ÁüÒ(% Pass any (cheap to construct) value.Á&|ûr ¬
 ² ê, ³8—É <´& »8¼$ ¾, À8çë & Ê8Ë$ Í, Ï8>& ×8ï$ Ü, Þ8singleÁ& å8ª *ì ï ƒ + ù ú ë8¡û ÿ8ï4  ˆ ê
7Convert an array of `Á¼‰$  8µ « ¬ µ, ­8—É $ 7` to an array of `Á¤¸$ Ì8µ × Ø ã, Ù8çë $ ä7`.Á8õ88 ÿ8·jT Œ8,8Í & 8,  œ ¯8€€&   ¢ ®, £8—É % «8Í ­(± ´ ¼8% ¹8Í » ¾ ý8Ì8Ð8Û
 Û Ý é, Þ8>% æ8Í è% ê8ø8ü8»  7ì % + Ñ Ò ó8ä Ù ò8Æ'à8indexing_slicingÁ„â8%,8»  8Í   à 8Û
 ¥ §8» ¦ ©, «8Ä»
 ² ¹8€€³  ¸8» ·% º8» ÌÎ7í Ñ% Ò8Û
%  Š  ´ , 8—É & 8$ , ˜ 8çë L™ & ¢ 8£ $ ¥ , § 8>& ¯ 8ï* ¹ 
8CœÃ  Ö  ×  Š
 , Ø 8—É $ à , â 8çë $ ì , î 8>$ ö 8'ü 8¨>%
%
¿3ƒà
á
Øg´ü­
çéù„¥açêà »ÍÂÁ]çìÓ
ÇÕçí‚>¸4çèÎi4¥çèCh4åçè¶Cg4ççèãFf4çèä e4ÐçèçNd4çèôSc4éçèôEçèæUFçè²VFçèâ>-FÄçèÀY@FÉçèåYSFÍçèòYfFÎçè³ZyFÓçèÜ?ŒF­ç赎G£Fçè¸ÆGºFçèºûJÑF×çè¼ÞLèFöçè½÷ú6ã#çèÀîÓ6ªcçèÃâ>ÿF·çèØ³ZG¸çèÙ¶¬2GÊçè´iFGÆ
çè´ûktGô
çè¹ûktGõ
çè¹ên¢G© çè¾ên¢Gª çè¾üÝ5!옄»þïòü­LæCïñCððïæC„²©â´âa´â„Ìýáñóöùûýþ=¸46ü” >ü€QN Compute the amount of bytes needed to support elements with lengths `lengths`Á¼› æCîî
ñæC´âlengthsÁ<³ ü¤ üË TQ Construct a partially initialized MultiFieldsULE backed by a mutable byte bufferÁü« &ôËÏ
ô—ã ôýáîÒ î
óæC´â÷Î
µÕ *,üîŽüÕhe Given a buffer of size obtained by [`Self::compute_encoded_len_for()`], write element A to index idxÁÂËâêäÛ - `idx` must be in rangeÁüü_\ - `T` must be the appropriate type expected by the custom derive in this usage of this typeÁdüÀÁ Àýá ÁÎÖî÷Ó!øø÷ Åî’Ì ªâÎÖ ´Ì­ÎÖ­ÕŒ 
öæC´â­ÕÎÖø¶Ø˜`b\^üó]ü×EB Validate field at `index` to see if it is a valid `T` VarULE typeÁ¡ËâêºËô - `index` must be in rangeÁt Âýáºêîúú ¤î’Ì ´Ì4“
ùæC´â­Õö.0üðFü¡-* Get field at `index` as a value of type TÁÓËâêìËôôíÕ
ü—FC - Element at `index` must have been created with the VarULE type TÁLþà Ãýá íÕîüü œî’Ì ˆ´Ì4‹
ûæC´â­Õ$ö.0ü²9ü Construct from a byte sliceÁ±ËâêüÊUR - byte slice must be a valid VarZeroLengthlessSlice<[u8], Format> with length LENÁ¤ÀÄ Ä—ã Äýáî Üî
ýæC´âã­üÁ ü™ # Get the bytes behind this valueÁDÈ Å Åýá Å—ãî Ñ î
þæC´âü†![æCñCöÍ
„‹!„Î
4!•Î
„¥!ýáá`#‘!#%üè!4ë!ÆÇÈ Æýá ÇÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•Șùÿ ï!ÿ
æC´â$ð!þ ö!ŒÍ$çæâ¸þøaŸþæâ7çæâƒƒ
,ß$烃üè$6æâН²µŠü¥%IĨ%É Éæâ¢ššˆ¢ˆ Ä%©â²â
Á%©â­â
ÔÎ%ÊË­â
 Ê
Ë—ã¬Ó%ÊË­â
¢ã
 ²â
ç%
²â
­â
$Å% Ë%ˆüÙ&%”Ü&Ì Ìæâ ï&
Š$ð&ü©'/¤¬'ÍÎ Íæâ Ηã Á'
$Â'_dstÁ$È'ü¯-^æCñCŽŽöÍ
„»-„Î
4Í-•Î
„Õ-ýáÔÖ.Á-.0ü”07ü”.li Note: MultiFieldsULE is usually used in cases where one should be calling .validate_field() directly forÁü…/:7 each field, rather than using the regular VarULE impl.ÁÄ/ËüÌ/52 This impl exists so that EncodeAsVarULE can work.Át—0Ï Ï—ãºêŒ ­0Œ
æC´âî,¦0¡1‚°›°¹°æC´â ÜúüÂ15¤Ì1РЗã Ðýጠè1Œ
æC´âã­,á1ÁEô
õ
 þÿé ˜ÀY,ñ Éâ>ø Ęâ>·˜ØüÏ" dÖ …dä cœé TVCEüî$ üÿ^ [ The [`ULE`] types implementing this trait guarantee that [`NicheBytes::NICHE_BIT_PATTERN`]ÁüÞ? < can never occur as a valid byte representation of the type.Áž Ëü¢* ' Guarantees for a valid implementation.ÁüÍI F 1. N must be equal to `core::mem::sizeo_of::<Self>()` or else it willÁ¤—  cause panics.Áü¬b _ 2. The bit pattern [`NicheBytes::NICHE_BIT_PATTERN`] must not be incorrect as it would lead toÁ¼  weird behaviour.Áü§N K 3. The abstractions built on top of this trait must panic on an invalid N.Áüö] Z 4. The abstractions built on this trait that use type punning must ensure that type beingÁÌÔ  punned is [`ULE`].Á Íšš÷™üîN Ì” ÷™!÷™'&  ü™ ŒŸ ÍüÒA ü¾M J [`ULE`] type for [`NichedOption<U,N>`] where U implements [`NicheBytes`].ÁüŒ 1 . The invalid bit pattern is used as the niche.Á¾ Ëü _ \ This uses 1 byte less than [`crate::ule::OptionULE<U>`] to represent [`NichedOption<U,N>`].Á¢
Ë
®£´
Ë<¸
æ¡ìÀ
 use core::num::NonZeroI8;ÁüÞ
# use zerovec::ule::NichedOption;ÁÌ‚ ºþœ Ëü  * ' let bytes = &[0x00, 0x01, 0x02, 0x00];ÁüË 4 1 let zv_no: ZeroVec<NichedOption<NonZeroI8, 1>> =Áü€ O L ZeroVec::parse_bytes(bytes).expect("Unable to parse as NichedOption.");ÁÐ ËüÔ 6 3 assert_eq!(zv_no.get(0).map(|e| e.0), Some(None));Áü‹
C @ assert_eq!(zv_no.get(1).map(|e| e.0), Some(NonZeroI8::new(1)));ÁüÏ
C @ assert_eq!(zv_no.get(2).map(|e| e.0), Some(NonZeroI8::new(2)));Áü“6 3 assert_eq!(zv_no.get(3).map(|e| e.0), Some(None));Á æ¡ ¨8žÍŸŸžàú ì Ì”t„ æãÍ Äæãÿ ­ã8­ª´¼”Œ0 ¢MOR Š  ƒó
 æãüín ¨8¤Í¥¤¥àú ò Ì”t Ýú
 óú
 à`æã„‹ ­ã¦á`¦;=@ £ üâD å ÑÒÓ Ñ­ã ÒÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•Ó˜ù£ é £
¦æãÍ þ ð üÌB ¨8¨Í©¨©àú Ñ Ì” Ýú
 óú
ä ­ãª«¬)+. ï üÊ" ü•0 - New `NichedOptionULE<U, N>` from `Option<U>`ÁÑ ¿ü­ã§§
ªæãÍoptÁÕ ìÿ ìÝ  Convert to an `Option<U>`Á ­ã¿ü§§
«æãÍ üÝ" ü¹  Borrows as an `Option<&U>`.Á4ä Ô Ô­ãø°ú°û°Ðü°ý°þ°ìHˈXêE> Ôæã§ ë §
¬æãÍ ü›K ¨8®Í¯®¯àú   Ì” Ýú
 óú
³ ­ã "% ¾ üëL ¨8±Í²±²àú ð Ì” Ýú
 óú
ƒ ­ã³ß³+-0 Ž ¼¾ Õ Õ­ã­ã° Ç °
³æãÍ üï\ ¨8µÍµàú ô Ì” Ýú
 óú
 žæãæãL ­ã· ·?AD ž üÒ" Õ Ö× Ö­ã ×­ã´ Ø ´
·æãÍ î  ü¤N ¨8¹Íº¹ºàú © Ì” Ýú
 óú
¼ £æã ­ã025 Ì üŽ&Q Ä÷  Safety for ULE traitÁü V S 1. NichedOptionULE does not have any padding bytes due to `#[repr(C)]` on a structÁüç "  containing only ULE fields.ÁüŠ!S P NichedOptionULE either contains NICHE_BIT_PATTERN or valid U byte sequences.ÁüÞ!- * In both cases the data is initialized.ÁüŒ"c ` 2. NichedOptionULE is aligned to 1 byte due to `#[repr(C, packed)]` on a struct containing onlyÁ”ð"  ULE fields.Áüƒ#M J 3. validate_bytes impl returns an error if invalid bytes are encountered.ÁüÑ#B ? 4. validate_bytes impl returns an error there are extra bytes.Áü”$< 9 5. The other ULE methods are left to their default impl.ÁüÑ$b _ 6. NichedOptionULE equality is based on ULE equality of the subfield, assuming that NicheBytesÁü´%Y V has been implemented correctly (this is a correctness but not a safety guarantee).Á¨8¼Í½¼½àú š& Ì”t²& Ýú
l& óú
­& ­ã¾Å¾+-0 ¸& üæ&C té& Ø Ø—ãºê» ÿ& »
¾æãÍã­,ø& <â* ¾‚°¿›°¿¹°¿¿¾¿æãÍí­ºêü—16 ¨8ÁÍÂÁÂàú œ1 Ì”tŸ1 ´äÃÅà ¥1 ¤Ô1 <×1 ´äÀÀ
ÃæãÍü‡2\ ¨8ÅÍÆÅÆàú Œ2 Ì”t–2 Éæã,2 æãÊÍlÕ2 ´äÇÈÉÊËÌÈÉZ\_ œ2 Dê2 ï2 ÄÄÆG ãF¢úG8­ª´¼”Œ0¸“ Íü–3" d™3 ´ä´äÊÄÄ
ÈæãÍ$¦3 ü€4/ tƒ4 ÿ” ´äÄÄ
ÉæãÍçë L’4 üº7; ËÍÌË̽ð ¿7 Ì”tÂ7 êåÍÎϰJ¯J±JÏ)+. È7 lü7 D8 ÊÊýæ°JL·8 $¼8 ÊʳÑüË8$ LÎ8 êåêå°JÊÊ
ϳÑÍ$Ø8 T‚\רö÷ÕüÕÐÒÁ¯\„ÐÓÁ¯ŠÐÓÓ
ÕÐÕêüÒÐÖ‚>P]ÐÑÎ]¥ÐÑC]åÐѶCÿ\çÐÑãFþ\ÐÑä ý\ÐÐÑçNü\ÐÑôSû\éÐÑôEÐÑæUFÐѲVFÐÑâ>-FÄÐÑÀY@FÉÐÑåYSFÍÐÑòYfFÎÐѳZyFÓÐÑÜ?ŒF­ÐѵŽG£FÐѸÆGºFÐѺ÷`_ã#ÐÑÀÍc_Á]ÐÑÁîQ_ªcÐÑÃâ>ÿF·ÐÑØ³ZG¸ÐÑÙ¶¬2GÊÐÑ´iFGÆ
ÐÑ´åj]Gà
ÐÑûktGô
ÐѹûktGõ
Ðѹên¢G© ÐѾên¢Gª ÐѾœÝ2Ìö"ô•þïòþü¶MJ This type is the [`ULE`] type for `Option<U>` where `U` is a [`ULE`] typeÁË®£Ëí̦ºþÀËüÄ(% let z = ZeroVec::alloc_from_slice(&[Á”í Some('a'),Áœ€ Some('á'),Áœ” Some('ø'),Á
None,Áœ¶ Some('Å‚'),Á ]);ÁÒËüÖ+( assert_eq!(z.get(2), Some(Some('ø')));Áü‚%" assert_eq!(z.get(3), Some(None));Á桨8ÙÙàú Æ©æÉZ_Û#ŸåúØÚÛÞý©æþSÐÞý©æ××
ØæãoqÐ××Ð××ÞýÔá¨8ÝÝàú æþæã©æÞß ì¨ü‚! Obtain this as an `Option<T>`Á¯©æ¿üÜÜ
Þæãüê "ü§ >; Construct an `OptionULE<U>` from an equivalent `Option<T>`Áñ ¿ü©æÜÜ
ßæã–ÿ
õ üµ B¨8ááàú º ®¤ ·ü
„Ä ©æâá`â#%üþ D ÙÚÛ Ù©æ ÚÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•Û˜ùà à
âæã$† þ Œ ü´(ü¥30 zeroed or valid-T byte sequences to fill it)Á¨8ääàú Àóú
éæåÅåüã7Ü Ü—ãºêã üã
åæãã­Ðå‚°æ›°æ¹°ææåææã üè"èè½ð íÎðýæéêëÊËÌëê-/D‘çç×רûJÚìÐÛíÐ ÉZ_Û#ŸåúþÈü³*ý昬 çç
ê³Ñü3˜¬ ýæçç
ë³Ñî ü‡#¨8ííàú Œ®¤ $©æü¯$¨8ïïàú ´®¤ ©æðßð¼ÚÝ Ý©æ©æî ãî
ðæãü‹4¨8òòàú ®¤ $“ç… ©æó ó#%üÆ"ÉÞß Þ©æ ß©æñ Ìñ
óæãî ü˜&¨8õõàú ®¤ ㇠§©æÅþüÃJG A type allowing one to represent `Option<U>` for [`VarULE`] `U` types.ÁŽ Ë\’ íüž # use zerovec::ule::OptionVarULE;Áä Ç—ß Ëüã B? let mut zv: VarZeroVec<OptionVarULE<str>> = VarZeroVec::new();Á¦!Ëüª!&# zv.make_mut().push(&None::<&str>);ÁüÑ!'$ zv.make_mut().push(&Some("hello"));Áüù!'$ zv.make_mut().push(&Some("world"));Áü¡"&á² È"ËüÌ"2/ assert_eq!(zv.get(0).unwrap().as_ref(), None);Áüÿ";8 assert_eq!(zv.get(1).unwrap().as_ref(), Some("hello"));Á<»#æ¡dÃ$¨8øøªâæã Ð$Óæã4Ó$üçFé­4yÊdî÷ùúû…ÿ—ãüçÅþqÐ…ÿ—ãüçöö
÷æãtä$Ðöö…ÿ$ô$Ðöö$ú$Ðöö—ãü‚%(¨8ýý©¶ ‡%º¶ 4Š%üçþüØ%"ü±%" Obtain this as an `Option<&U>`Á4ß%à àüçø°ú°û°Ðü°ý°þ°ìHˈXêE> àæãü æ%ü
þæã$ç%üì'P¨8©¶ ñ'º¶ 4ô'·ü
„†(üçá`#%üÃ(DÆ(áâã áüç âÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•ã˜ùÿ Ê(ÿ
æã$Ë(þ Ñ(ü×.:¨8ƒƒ©¶ ã.º¶ 4æ.üçÔÖ&(ü¦/7t©/ä ä—ãºê ¿/
æãî,¸/ü®55¤¸5å å—ã åüç Ô5
æãã­,Í5ü£7w¨8ˆˆ½ð ¯7ªâªé ²7­³ÑªéŒð7Óªé4Š8ý振²µŒ^`Z\ü¡8IĤ8æ æýæþ‚ƒƒšŠ¢Š À8¶ƒ ½8ǃÔÊ8çèþ‚ ç
è—ã¬Ï8çèþ‚Á ƒƒ ã8
³Ñªéƒƒþ‚$Á8 Ç8ŠŒüÕ9%”Ø9é éýæ ë9
Œ³Ñªé$ì9ü­<.¤°<êë êýæ ë—ã Å<
³Ñªé$Æ<·…Ì<ü°@B¨8©¶ µ@º¶ 4¸@ç… LÊ@üç #%üù@"ü@ìí ìüç íüçŽ ÿ@Ž
æã$€Aî ,†AüÑA4¨8©¶ ÖAº¶ 4ÙA㇠ëAüçüŠBD¨8©¶ Bº¶ 4’BÉæãæãT¤BüçË/1üÕB7\ØBîï îüç ïüç­þ äB
æã$åBî ,ëBüËC6¨8©¶ ÐCº¶ 4ÓCÃæãåCüç˜Ä˜+-üˆD'Dðñ ðüç ñüçñþ D
˜æã$Dî ,–D„t© ª ›CœÛææ Âœ² ž NonZeroI8ÁLí’ž NonZeroU8ÁL¡»Ÿ‚>ÏušÎ€u¥šCuåš¶C~uçšãF}ušä |uКçN{ušôSzuéšôEšæUFš²VFšâ>-FÄšÀY@FÉšåYSFÍšòYfFΚ³ZyFÓšÜ?ŒF­šµŽG£Fš¸ÆGºFšºûJÑFך¼ÞLèFöš½÷xã#šÀÍxÁ]šÁÓ
xÕšÂîxªcšÃâ>ÿF·šØ³ZG¸šÙ¶¬2GÊš´iFGÆ
š´åj]Gà
šûktGô
š¹ûktGõ
š¹ÔÔL„ô<üŠ!!üÁ#Í¡¡Íë颣 ÌüùD€ò òëé ò—ã   
¢ÍüÄ@ÄËó ó—ã ó
ëé  ë 
£Íã­üÅ
2Í¥¥“Ð
ëé¦Å¦ ×
üŒ7tô ô—ãºê¤ ¥¤
¦Íã­ü“5ͨ¨“Ð ëéªüª žüÝ"¡ëëé§§
ªÍle_bytesÁDåü¢!¤¯ Ä Ý Ê æ , Ë8unsignedÁ& Ô8Õ$ ×, Ù8è& Þ8Ø *è ë Ú88ên , 8è$‡   Ô+  œ Ä8¡ ¡8ï © ª Ã7Gets this `RawBytesULE` as a `Áü« $ Ë8µ Ö × á, Ø8ÑÓ $ â7]`. This is equivalent to calling [`AsULE::from_unaligned()`] on the appropriately sized type.Áüä_+ Ò Ó Ú8þ8è8 ì8³q þ  ÿ8$€(, 8ÑÓ   ê ¥, ¦8ÑÓ 8°, ³8,´'¹8÷=»'¾8ÀY Å'Æ8? Ö Ü
×8+ ù ú ¡8¡û ÿ8ï4  ˆ  7 Converts a `Át‰$ 8µL™ ¢ £ ­, ¤8ÑÓ $ ®7n` to a `RawBytesULE`. This is equivalent to calling [`AsULE::to_unaligned()`] on the appropriately sized type.Áü°p+ ¯ ° ·8þ8Å88 Ï8¨> Þ ï8˜& ä, æ8ÑÓ (ñ8 ù ±8$‹  £8˜, 8 to_le_bytesÁ\ ¡ ¢8›CœÀ Ó Ô É , æ8ÑÓ $ ï8ên\ Œ, 8è $ 8ên ° » ± º7ì ²% ³, µ8è% Ê% Ûüà$¼í  Œ!  £ , Œ8baseÁ$& 8$ , 8è$—& 8Ø *¥ ¨ ‰!88æ  À, Á8Œß  Æ È ƒ!<øúüÖT<Ôûœ·<Ë×<P This cannot be generic over T because of current limitations in `const`, but ifÁüçS<U this method is needed in a non-const context, check out [`ZeroSlice::parse_bytes()`]ÁüÇX< instead.Ád¬<ËÅ<* See [`ZeroSlice::cast()`] for an example.ÁüÕ-88,“8 8¥x ª ·8ã­& ° ² ³ 8¦´(¹8ý  Ã8$ È8¶¬ Ò Ô ù 8æ8¾ ê î8ã­ õ8¾ ö ù ú% û+  Ž ¨8è,  §8Æ4•'8
modulo_oneÁT8º8¾ ½ Á, Ã8èÉ7ì Ì Î ¥8Òä æ 8" î 8'ô8»¤ö Š 8ã­,‹8 ¬ ë 8 Š٠8¶¬'Î8Ƭ Þ Ø 8ø& ú8ï  ƒ  ¤ 7<const construct: Á¤„ $ ˜ , š 8è$ $ Ÿ 7¡ $ ¥ 8¾ ¿ $  % Š!ü!!¤œ! ±! Ñ( ·! á!, ¸!8 single_fnÁL¹!& Â!8Û,Ã!$ È!, Ê!8!$Ë!& Ï!8Ð!$ Ò!, Ô!8è$Õ!& Ù!8Ø <Ú!*ã! æ! Î(!8$ð!8ž$õ! ù!, ú!8!$û! ÿ!8
"8ên\…" ", "8è$" " ˜" œ#+ ¦" §" ®"8þ4¨"8 ¼"8ï$¿" Ã" Ð"8˜,Ä"& É", Ë"8!$Ì"(Ò"8$Õ" Ú" #8$ì" ð" „#8˜,ñ" ö"8ýÜ \÷" # ƒ#8$¦#8ÀY,«#8
±#, µ#8!$¶# »# &8!$É#8â>Î# Ò#8ên\Ô# ß#, à#8è$á# å#% æ#+ ô# õ# ü#8þ4ö#8 Š$8í>d$ ™$ ž$8$š$( $8$£$'§$8â>©$ ­$ ë$8ên\¿$ Ê$ Ý$8$Ë$ Ï$8ýÜ \Ð$ Û$ Ü$+ ù$ ú$ %8þ4û$8 %8?t%  % µ%8çë L¡%& ª%8$¬%'°%8â>²%(·%8$º% ¿% & Ñ%, Ò%8!$Ó% ×%'Ø%8
from_le_bytesÁlÚ% ç% ó%8çë Lè% ñ%7ì ò%8"4'8$'8åY,—'8
', ¡'8!$¢' §' ¨'8$³'8ên\¸' Ã', Ä'8è$Å' É' Ë' È( 8Ù'8,Ý'8 ã', æ'8™é Lç' ð' ù'8ç¯ ñ'& ò', ô'8!$õ'(û'8$þ' ƒ( ¾(8ên\•(  ( °(8ç¯ ¡( ¢(8ýÜ \£( ®( ¯(% Ï(üÔ(*ìá( ÿ( ç) …) ) , †)8!$‡)& )8Œ)$ Ž), )8è$)& •)8Ø <)*Ÿ) ¢) ä)8žP¤¬) À) Á) Ý)8óslÂ)$ Ï), Ñ)8!$Ò)$ Ö), Ø)8è$Ù)% Þ)% å)üê)(Ü÷) “* ù* ™* ±* , š*8!$*& Ÿ*8 *$ ¢*, ¤*8è$¥*& ©*8Ø <ª**³* ¶* ö*8žP¤À* Ô* Õ* ï*8¬v\Ö*$ á*, ã*8!$ä*$ è*, ê*8è$ë*% ð*% ÷*´­4²Å²üØ48tÛ4õ õ—ãºê± ò4±
²_bytesÁ4ê4Œ«5´µÊË̵DÃ5È5³³üæ5"dé5ʳ³
µ$ö5ü°6/t³6«ú ³³
çë LÂ6Ä©7ì†;Ïî¹Å¹ü¸;7t»;ö ö—ãºê¸ Ñ;¸
¹ã­,Ê;”<¹‚°º›°º¹°ºº¹º—« ºêij=Ïî¼½¾ÊË̽¾DÒ=×=»»Ïîüõ="dø=ÏîÏîÊ»»
½$…>ü¿>/tÂ>åý Ïî»»
¾çë LÑ>üŒ?Ïîü°? Ïî À?ü×? ŒÝ?ÀÀ×ï õ?´±CÅÅÅüÜC8tßC÷ ÷—ãºêÄ öCÄ
Ÿø 4îCŒ¯DÇÈÉÊËÌÈÉDÇDÌDÆÆüêD"díDÊÆÆ
È$úDü´E/t·EŽ ÆÆ
Éçë LÆEÄ­FÄÊF×ïÌÍÎÊËÌÍÎDéFîFËËÏîü‘G"d”G×ï×ïÊËË
Í$¡Gü·H/tºHñ‚ ×ïËË
Îçë LÉH”×LÐÒÓÊËÌÒÓDðLõLÏÏçÍ ‡MüM"d MÊÏÏ
Ò$­Mü€N/tƒNÒ„ ÏÏ
Óçë L’N”óNÕרÊËÌרDŒO‘OÔÔõë £Oü¹O"d¼O
~™ÕéêÂîªcéêÃâ>ÿF·éêØ³ZG¸éêÙ¶¬2GÊéê´iFGÆ
éê´åj]Gà
éêûktGô
éê¹ûktGõ
éê¹ên¢G© éê¾ên¢Gª éê¾ü²2ìÍíìí½ð ¾Ì”ijÑÁóðïÅï+-0 Ìüù7ú ú—ãºêë ë
ï³ÑÍã­,‹ü­/ñÍòñò½ð ²Ì”Îðóðôö÷ÊËÌ÷ö57: ÂèððþÈÍü"dóðóðÊðð
ö³ÑÍ$üì/€– óððð
÷³ÑÍçë LþüÐ 6ùÍúúù½ð Ü Ì”Í³Ñóð "% ì Ô¿ýÿÔÕÖÿýüî7û û—ãºêü ü
ýã­,€Ôý‚°þ›°þ¹°þþýþƒÄƒÄ Utf8ErrorÁ„Ä valid_up_toÁs…Ä error_lenÁs8(JÒó]ÄÀü7ü ü—ãê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ üÀü ³ü
ÿã­ƒÿ‚°›°¹°ÿÁ™ ü®5ü¬JG Invariant: must be safe to call when called on a slice that previouslyÁüû  succeeded with `parse_bytes`Á¤¸ý ý—ã ýü Ôü
ã­üø/üb_ Note: VarULE is well-defined for all `[T]` where `T: ULE`, but [`ZeroSlice`] is more ergonomicÁü€2/ when `T` is a low-level ULE type. For example:Á³Ë
```no_runÁìÅ # use zerovec::ZeroSlice;ÁôãÚ£ô‚ # use zerovec::ule::AsULE;Áü¡  // OK: [u8] is a useful typeÁüÂ/, let _: VarZeroVec<[u8]> = unimplemented!();ÁòËüö;8 // Technically works, but [u32::ULE] is not very usefulÁü²@= let _: VarZeroVec<[<u32 as AsULE>::ULE]> = unimplemented!();ÁóËì÷ // Better: ZeroSlice<u32>Áü•96 let _: VarZeroVec<ZeroSlice<u32>> = unimplemented!();Áæ¡×ËüÛ# [`ZeroSlice`]: crate::ZeroSliceÁƒƒ½ð ®“ £ƒÙÔÖ&(ü¼7t¿þ þ—ãºê Õ
³Ñîü°5¤ºÿ ÿ—ã ÿƒÙ Ö
³Ñã­ÌË ULE impls for tuples.ÁåËüé]Z Rust does not guarantee the layout of tuples, so ZeroVec defines its own tuple ULE types.ÁÇËüË\Y Impls are defined for tuples of up to 6 elements. For longer tuples, use a custom structÁü¨*' with [`#[make_ule]`](crate::make_ule).ÁÓËá æËæ¡ÌòºþŒËÌ // ZeroVec of tuples!ÁüªRO let zerovec: ZeroVec<(u32, char)> = [(1, 'a'), (1234901, '啊'), (100, 'अ')]Á­Œ .copied()ÁœŸ .collect();Á³Ëü·74 assert_eq!(zerovec.get(1), Some((1234901, '啊')));Áæ¡ôEî ï ˜
Í
Î
ŽØÙÍÁ]ˆÓ
ŸÕ‚>”¦Î¥Cå¶CçãFä ÐçNôSéôEæUF²VFâ>-FÄÀY@FÉåYSFÍòYfFγZyFÓÜ?ŒF­µŽG£F¸ÆGºFºûJÑF×¼ÞLèFö½÷Ö¨ã#ÀªcÃâ>ÿF·Ø³ZG¸Ù¶¬2GÊ´iFGÆ
´åj]Gà
ûktGô
¹ûktGõ
¹ên¢G© ¾ên¢Gª ¾L™ú´¥ ¼ Î$  õ , Ã8ÿ
& È8Û$ Î, Ð8¾ Ñ& Ô8Ø $ Ü Þ ô, à á ð, â8 ã& ä8Û, ë8» ì& í8î$ ñ ò*÷ ú Ë$Æ+   Ä8¡ Š8ï   Ã7ULE type for tuples with ÁÜ”$ ¯, ±8¾ ²$ µ7
elements.Á+ Î Ï ß8Ñ
 Ô Þ8k Õ$ Ö8ó + é ê Œ8è ð 8Æ'÷8exhaustive_structsÁ”ù8 8, «8ÿ
 °, ± ² µ, ³8ϱ ´$  · ¸ ¹ Å, º » Â8¼, À8ϱ Á$ Ã Ä% Æ8"8 º, » ¼ Ä, ½8ϱ ¾& ¿8â>Á$ Å Æ Ç8â>É8
Í, Ñ8ÿ
 Ö, × Ø Û, Ù8ϱ Ú$ Ü Ý Þ à ð 8 î8¯( ÿ Œ8ã­,€&   ˆ 8¦(Ž8ý4‘  ˜ $ š8¶¬ ¤ ¦ æ8Š8 ule_bytesÁ ˜7ì, ¡ ¢ ¹
£8Ó
¥'¨8é'± ³, ´8ϱ µ  · ¸ º% »8Í8ã­ Õ8¾ Ö Ù Ú Ü8¾¹ è7ì ë í Æ88Š  ³8¶¬'8[4˜'ž  8 ¥ ¦ ²8ã­ ¬8¾ ­ ° ±% ´8
Ø8chunkÁ8â8ã­ ê8chunksÁ ñ û8¾¹  ý Á 888»  7ì Ÿ%  ,  · ®8Ñ8 Õ ×8» Ù% Ú8» ôö8Ó
ù'ü8é' , ˆ8ϱ  Š  Œ% + § ¨ É8ä ¯ È8Æ'8ÎÁ
„¸ õ, ö8ϱ ÷ ø'ù8¯(   Š8ó¼ ,‹  8®¾ !8» - % ˜ ¯8ÒÓ Õ Ø Ö ×8 ÿ,   , 8ϱ ƒ& 8ÀY,†$ Œ  Ž8ÀY,8
 š ¢,  œ Ÿ, 8ϱ ž$   ¡ ¤ Î8!8â>· », ½8ÿ
 Â, Ã Ä Î Å, Æ8ϱ Ç È'É8â>Ë$ Ï Ð Ñ% Ò+ á â é8þ8 ÷8í>  8$‡(8$'8â> š , ¬8ÿ
 ± ó, ² ³ ð8 Í, Î8» Ï Ð8í> Ý Þ$ ñ ò+   ˜8þ4’8 ¦8? · Ì8çë L¸& Á8'Ç8â>É(Î8 Ö Ä è , é ê ³ , 8ϱ  ƒ'8?t†  ¡8çë L• ž, Ÿ8»  $ ´ µ8 Ý, Þ ß ô, à8ϱ á& â8Íä'ç8 ï8â>ñ$ õ ö ÷8Íù'ü88
, ˆ8ÿ
$‰ , Ž  , 8ϱ $     §
8 ¥8ͨ « Í
 ¬8$ ±8þ ³& ´ 8·8Í»'¾8œ É:8Ê Ì(Ï8ý Ø Ù Ú$ Û8ÍÝ'à8 ç é  û ˆ, ü ý 8 , ƒ8» $   8ÍŠ  8þ Ž8$„ ˆ,  Š ž, 8ϱ Œ& 8ÛL 8â>$ Ÿ   ¡8Û8
­, ±8ÿ
 , · ¸ », ¹8ϱ º$ ¼ ½ ¾ À ½8 Î8ÕÑ Ó ç Ô8$ Ù8î & à â8(é8õ ñ ³ ƒ ,   8$† Š, 8» Œ$ Ž  8Õ  ¥   ¤,  ˜ ¡8î ,™ ž, Ÿ8»  $ ¢ £8 Ì, Í Î Û, Ï8ϱ Ð& Ñ8Ó Ö8â>Ø$ Ü Ý Þ8à8
ã, ç8ÿ
 ì, í î ñ, ï8ϱ ð$ ò ó ô ö ÷8$‚ ,  ˆ , 8ϱ Š& 8ÜT ˜8â>š$ ž Ÿ  8Ü8
­, ±8ÿ
 , · ¸ », ¹8ϱ º$ ¼ ½ ¾ À æ
8 Î8¤  Ü ð Ý8$ â8î & é ë8(ò8Ó û8³'8Ð'8ÕD‡   Ü £ °, ¤ ¥ ­8 ª, «8» ¬$ ® ¯ ±8¤  ½ Î ¾ ¿ Í, À Á Ê8î  Ç, È8» É$ Ë Ì8 õ, ö ÷ , ø8ϱ ù& ú8Ôü 8â>$   ˆ8ÔŠ8
Ž, 8ÿ
$“ , ˜  œ, š8ϱ $  ž Ÿ ¡ ¯ 
8 ¯8в µ É 8$ »8î &  Ä8(Ë8³'Ò8ÐÔ'×8Õ â ¥  ô , õ ö þ8 û, ü8» ý$ ÿ  8Ѓ     ˆ  ,  Š  8î ,‹  , 8» $  8 ¾ , ¿  À  È , Á 8ϱ  & à 8â>Å $ É  Ê  Ë 8u8
Ó , × 8ÿ
 Ü , Ý  Þ  á , ß 8ϱ à $ â  ã  ä  æ  º!8 ô 8È ü  ‚! ý 8(„!8$‡! Œ! °!
ž!8$Ÿ!8$Å! É!, Ê! Ë! Ó!, Ì!8ϱ Í!& Î!8â>Ð!$ Ô! Õ! Ö!8$Ø!8
Ý!, á!8ÿ
$â! æ!, ç! è! ë!, é!8ϱ ê!$ ì! í! î! ð! ñ!+ ü! ý! ”"8¢þ! " “"8<" Š"7á<Œ"8$ž" ¢":¨£"$ ¥", §" ¨" Â", ©"8ϱ ª"& «"8Ô­" ±"8ÀY,³" ¹":7<»"$ Ã" Ä" Å"8,Ç"'Ì"8
Î"'Ñ"8¾ LÓ" Ü":¨Ý" ß"8
á" å" í", æ" ç" ê", è"8ϱ é"$ ë" ì" ï" Å$'8!$ý"8 ContainerÁL# Œ#8,Ž#'“#8Ž <•# œ#:¨#$ Ÿ# ¡# ©#, ¢# £# ¦#, ¤#8ϱ ¥#$ §# ¨# ª#% «#8!$¹#8SliceÁ,¾# Ä#8,Æ#'Ë#8æ LÍ# Ö# ×# ß#, Ø# Ù# Ü#, Ú#8ϱ Û#$ Ý# Þ# à#% á#8!$ï#8GetTypeÁ<ô# ü#, þ#8ÿ
$ÿ# ƒ$, „$ …$ $ †$, ‡$8ϱ ˆ$ ‰$'Š$8â>Œ$$ $ $ $% “$8!$¡$8 OwnedTypeÁL¦$ °$ ²$ º$, ³$ ´$ ·$, µ$8ϱ ¶$$ ¸$ ¹$% »$% Ì$„ÖüË
 [`VarULE`] impls for tuples.Áì
Ëüðc
` This module exports [`Tuple2VarULE`], [`Tuple3VarULE`], ..., the corresponding [`VarULE`] typesÁüÔ1
. of tuples containing purely [`VarULE`] types.Á
ËüŠk
h This can be paired with [`VarTupleULE`] to make arbitrary combinations of [`ULE`] and [`VarULE`] types.Áö
Ëüú6
3 [`VarTupleULE`]: crate::ule::vartuple::VarTupleULEÁF®òĤc<Ø
ä Ž·cå Ž·ù„á
a»Íþ
Á]Á¯\•
Á¯ŠÓ
¬
ÕîØD¿

îØ5‚>ŒÎæÇ¥ŒCåÇ匶CäÇçŒãFãÇŒä âÇÐŒçNáÇŒôSàÇéŒôEŒæUFŒ²VFŒâ>-FÄŒÀY@FÉŒåYSFÍŒòYfFÎŒ³ZyFÓŒÜ?ŒF­ŒµŽG£FŒ¸ÆGºFŒºûJÑF׌¼ÞLèFöŒ½÷ã#ŒÀîªcŒÃâ>ÿF·ŒØ³ZG¸ŒÙ¶¬2GÊŒ´iFGÆ
Œ´åj]Gà
ŒûktGô
Œ¹ûktGõ
Œ¹ên¢G© Œ¾ên¢Gª Œ¾
üÄ.
¨«|
ṅ
_
;”µ
,ÌÊ
d×
 ä
·U
 Ì
 , Í
8ÿ
& Ò
8Û
$ Ø
, Ú
8¾ Û
& Þ
8Ø
$ æ
 è
, ê
 ë
, ì
8 í
& î
8Û
, õ
8ϱ ö
& ÷
8Û
, þ
8T_altÁ,ÿ
&
8Û,†
, Œ
8»
& Ž
8
$

*˜

´U
ï+ ¥
 ¦
8¡§
«
8ï4­
 ³
 ´
Œ
7VarULE type for tuples with Áôµ
$ Ó
, Õ
8¾ Ö
$ Ù
7/ elements. See module docs for more informationÁüÛ
1
+
 ˜
ª
8Ñ
$™

©
8þ
+ ´
 µ
×
8è
 »
Ö
8Æ
'Â
8Ú´ ”Ä
8ë
8
, ö
8ÿ
 û
, ü
 ý
, þ
8 ÿ
&
-
8Œ
$ ˆ
 Š
8ñC
&
8ù„”
¥
8c
 ®
 °
Ã
 , ¾
 ¿
Ô
 , À
8ϱ Á
& Â
8Á¯
 Ï
, Ð
8 Ñ
 Ò
$ Ó
 Õ
8¶C,—
& œ
8åj
 ¬
, ­
8¾ ®
$ ±
8ñC
 ¹
8
 Ò
, Ó
 Ô
é
, Õ
8 Ö
& ×
8³Z
à
- â
8Œ
$ è
 ê
8ñC
& ò
8ù„ô
 
, 
8ÿ
$‡
 
, Œ
 

, Ž
8 
$ 
 
8ñC4”
 š
 œ
ê
, ª
 «
ß
 + ½
 ¾
ï
8¡¿
Ã
8ï
 Ë
 Ì
î
7
Get field Á
$ Ù
, Û
8» Ü
$ Ý
7
of this tupleÁ
8
8 
, ˆ
8ϱ 
 Š

 
8
(
 
, 
8 
 
Ï
8"
 ð
½
 8
 Ž
8¶C,
 
8 EL•
'ž
  
, ¡
8 ¢
 £
 ¤
§
, ¥
8» ¦
 à
8"
8
 µ
, 
 ·
Ì
, ¸
8 ¹
& º
8³Z
Ã
- Å
8Œ
$ Ë
 Í
8ñC
& Õ
8ù„×
 ç
8³Z
8
ð
, ô
8ÿ

 ù
, ú
 û
ÿ
, ü
8 ý
$ þ
 
8ñC4
 ˆ
 
Ï"
8  
8¯(
 ±
¾
8ã­
& ·
 ¹
 º
½
8¦»
(À
8ý
 É
 Ê
Ë
$ Ì
8¶¬
 Ö
 Ø
Ë
8ý
8¶C,

 
8åj
 ˜
, 
8¾ š
$ 
8ñC
 ¥
8§
8³Z
 °
'±
8©
 ¾
Ä
8ã­,¿
- Å
% Æ
, Ø
 Ù
¥
8"
 Ä

 8¶C
 ã
8E
'ò
 ô
, õ
8 ö
 ÷
 ø
û
, ù
8» ú
- ü
% ý
¦
8Ò¸
 º
½
 »
¼
8"
8 á
8»¤ä
 ø

8ã­
& þ
 
 

8¦
(
 Š
8$
 
Å"
$8
8¶C
À
 Â
8åj
 Ñ
, Ò
8¾ Ó
$ Ö
8ñC
 Þ
8à
8³Z
 é
'ê
8»¤ì

8ã­,
%
8Ó
û!
'þ!
8ùL€"
'‰"
 "
 Œ"
8åjt"
 "
, œ"
8¾ "
$  "
8ñC4¢"
 ¨"
$ ©"
 «"
8$¬"
 °"
 ±"
·"
8¶C,²"
8$Ú"
 Þ"
, ß"
 à"
#
 , á"
8 â"
& ã"
8Íå"
'è"
8,ê"
ð"
8³Z4ò"
ù"
- û"
8Œ,ü"
$ #
 ƒ#
8ñC4…#
& #
8ù#
 #
8ÍŸ#
'¢#
8,¤#
8
ª#
, ®#
8ÿ
$¯#
 ³#
, ´#
 µ#
¹#
, ¶#
8 ·#
$ ¸#
 º#
8ñC4¼#
 Â#
 Ä#
Ö$

8 Ò#
8ÍÕ#
 Ø#
ú#

 Ù#
8$Ú#
$ Þ#
8þ à#
& á#
 ã#
8ä#
8Íè#
'ë#
8œLí#
 ö#
:8÷#
 ù#
(ü#
8ý4ÿ#
 …$
 †$
‡$
$ ˆ$
8ÍŠ$
'$
8,$
 ”$
 $
Ì$
 ¨$
·$
, ©$
 ª$
µ$
8$«$
 ¯$
, °$
8ϱ ±$
 ²$
³$
$ ´$
 ¶$
 ¸$
8͹$
 ¼$
¾$
8þ ½$
8$³%
 ·%
, ¸%
 ¹%
Ú%

, º%
8 »%
& ¼%
8ÛL¾%
È%
8³Z4Ê%
Ñ%
- Ó%
8Œ,Ô%
$ Ù%
 Û%
8ñC4Ý%
& ã%
8ù„å%
 õ%
8ÛL÷%
8
&
, …&
8ÿ
$†&
 Š&
, &
 Œ&
&
, &
8 Ž&
$ &
 &
8ñC4“&
 ™&
 &
'
8 ©&
8Õ¬&
 ®&
Â&
 ¯&
8$°&
$ ´&
8î ,¶&
& »&
 ½&
8$¾&
(Ä&
8õ$Ç&
 Ì&
“'
 ß&
î&
, à&
 á&
ì&
8$â&
 æ&
, ç&
8ϱ è&
 é&
ê&
$ ë&
 í&
 ï&
8Õð&
 ò&
…'
 ó&
 ô&
„'
, õ&
 ö&
'
8î ,÷&
 ü&
, ý&
8ϱ þ&
 ÿ&
€'
$ '
 ƒ'
8$¨'
 ¬'
, ­'
 ®'
È'

, ¯'
8 °'
& ±'
8³'
¶'
8³Z4¸'
¿'
- Á'
8Œ,Â'
$ Ç'
 É'
8ñC4Ë'
& Ñ'
8ù„Ó'
 ã'
8å'
8
è'
, ì'
8ÿ
$í'
 ñ'
, ò'
 ó'
÷'
, ô'
8 õ'
$ ö'
 ø'
8ñC4ú'
 €(
 (
ƒ(
8$Ž(
 (
, “(
 ”(
¶(

, •(
8 (
& —(
8ÜT™(
¤(
8³Z4¦(
­(
- ¯(
8Œ,°(
$ µ(
 ·(
8ñC4¹(
& ¿(
8ù„Á(
 Ñ(
8ÜTÓ(
8
Þ(
, â(
8ÿ
$ã(
 ç(
, è(
 é(
í(
, ê(
8 ë(
$ ì(
 î(
8ñC4ð(
 ö(
 ø(
¢*

8 †)
8¤ \‰)
 ”)
¨)
 •)
8$)
$ š)
8î ,œ)
& ¡)
 £)
8$¤)
(ª)
8Ó4­)
 ³)
8³$´)
'¸)
8к)
'½)
8ÕD¿)
 Ç)
 É)
˜*
 Û)
ê)
, Ü)
 Ý)
è)
8$Þ)
 â)
, ã)
8ϱ ä)
 å)
æ)
$ ç)
 é)
 ë)
8¤ \ì)
 ÷)
Š*
 ø)
 ù)
‰*
, ú)
 û)
‡*
8î ,ü)
 *
, *
8ϱ ƒ*
 „*
…*
$ †*
 ˆ*
8$­*
 ±*
, ²*
 ³*
Î*

, ´*
8 µ*
& ¶*
8Ô¸*
¼*
8³Z4¾*
Å*
- Ç*
8Œ,È*
$ Í*
 Ï*
8ñC4Ñ*
& ×*
8ù„Ù*
 é*
8Ôë*
8
ï*
, ó*
8ÿ
$ô*
 ø*
, ù*
 ú*
þ*
, û*
8 ü*
$ ý*
 ÿ*
8ñC4+
 ‡+
 Š+
œ,

8 ˜+
8Ð+
 ž+
²+
 Ÿ+
8$ +
$ ¤+
8î ,¦+
& «+
 ­+
8$®+
(´+
8³$·+
'»+
8н+
'À+
8ÕDÂ+
 Ë+
,
 Ý+
ì+
, Þ+
 ß+
ê+
8$à+
 ä+
, å+
8ϱ æ+
 ç+
è+
$ é+
 ë+
 í+
8Ðî+
 ñ+
„,
 ò+
 ó+
ƒ,
, ô+
 õ+
,
8î ,ö+
 û+
, ü+
8ϱ ý+
 þ+
ÿ+
$ €,
 ,
8"4ý-
8$„.
 ˆ.
, ‰.
 Š.
Ž.
, .
8 Œ.
$ .
 .
, .
 .
š.
, “.
8Øõ ,”.
$ ™.
 .
8ñC4.
 £.
8Ü?t¥.
 ³.
, ´.
8ÿ
$µ.
 ¹.
, º.
 ».
¿.
, ¼.
8 ½.
$ ¾.
 À.
8ñC4Â.
È.
8
Ë.
 Ï.
Ý.
, Ñ.
 Ò.
Ù.
, Ó.
8Øõ ,Ô.
$ Ú.
 Û.
8$,ç.
, ù.
 ú.
/
, û.
8 ü.
& ý.
8³Z4ÿ.
†/
- ˆ/
8Œ,‰/
$ Ž/
 /
, ž/
 Ÿ/
»/
 ,  /
8Øõ ,¡/
& ¦/
8Ü?t¨/
 ¶/
, ·/
8 ¸/
 ¹/
$ º/
 ¼/
8ñC4Ê/
& Ð/
8ù„Ò/
$ â/
 ì/
Î9
8 ú/
8ûÄý/
 •0
8š 0
 —0
 ˜0
½0

 ™0
8$š0
$ ž0
8  0
& ¡0
8$£0
84¨0
 ®0
·0
 ¯0
 °0
¶0
 ±0
 ²0
µ0
8¦³0
(¹0
8š ¼0
(¿0
8š Â0
 Ä0
±1
8ß\1
 ¡1
 ¢1
£1
+ À1
 Á1
È1
8þ4Â1
8 Ö1
8ÔÙ1
 ë1
ñ1
 ì1
8$í1
(ó1
8,ö1
 ü1
Š4
 8åjt¡3
'¯3
 ±3
, ²3
8¾ ³3
$ ¶3
8ñC4¸3
 ¾3
'¿3
8ÿC¼Á3
 Ø3
ü3
 Ù3
û3
, Ú3
 Û3
ø3
8$Ü3
 à3
, á3
8» â3
 ã3
8Ôä3
 ö3
÷3
$ ù3
 ú3
+ ™4
 š4
¡4
8þ44
8 ¯4
8ܤ²4
 Æ4
Ü4
 Ç4
8$È4
$ Ì4
8·…Î4
& Ñ4
 Ó4
8Ô4
 Ø4
Û4
8¦Ù4
 Þ4
Ä9
8ð4
8÷Î
<ô4
ü4
 þ4
 5
, ÿ4
 €5
5
8$5
 …5
, †5
8» ‡5
 ˆ5
8Ô‰5
 5
œ5
$ ž5
 Ÿ5
% ¡5
8Æ6
8¶C,Ê6
Ð6
8åjtÒ6
'à6
 â6
, ã6
8¾ ä6
$ ç6
8ñC4é6
 ï6
'ð6
8£Düò6&
 ˜7
¥7
8÷Î
<™7
$  7
8·…¢7
% ¦7
, ¸7
 ¹7
µ9
8"4¾8
 Å8
£9

8¶C,ß8
 ä8
8ÞDdå8
'ñ8
 ó8
, ô8
8 õ8
$ ö8
, ø8
8Øõ ,ù8
 þ8
 ÿ8
Œ9
, €9
8» 9
$ 9
 „9
8$…9
 ‰9
, Š9
8» 9
% 9
¶9
+ Ù9
 Ú9
ñ9
8¢Û9
 Þ9
ð9
8<ß9
ç9
7á<é9
8$û9
 ÿ9
, €:
 :
:
, :
8 ƒ:
& „:
8³Z4†:
:
- :
8Œ,:
$ •:
 —:
8ñC4™:
& Ÿ:
8ù„¡:
 ±:
8á,³:
'¸:
8š4º:
'À:
8œ<Â:
8
Ê:
, Î:
8ÿ
$Ï:
 Ó:
, Ô:
 Õ:
Ù:
, Ö:
8 ×:
$ Ø:
 Ú:
8ñC4Ü:
 â:
 ä:
‰<
8!$ò:
8OwnedÁ,÷:
ý:
8á,ÿ:
'„;
8¿,†;
';
8ä;
 ;
8$;
 •;
% ;
8 ¤;
8to_ownedÁD§;
 ¯;
µ;
 °;
8$±;
(·;
8$º;
'¾;
8µ
,À;
 Æ;
ÿ;
8õ
¤Ø;
 ì;
ñ;
8$í;
8$”<
 ˜<
:¨™<
$ <
, <
 ž<
¢<
, Ÿ<
8  <
$ ¡<
 £<
, ¥<
 ¦<
®<
, §<
8Øõ ,¨<
$ ­<
 ¯<
8ñC4±<
 ·<
8îØD¹<
 Â<
:¨Ã<
$ Å<
, Ç<
8ÿ
$È<
 Ì<
, Í<
 Î<
Ò<
, Ï<
8 Ð<
$ Ñ<
 Ó<
8ñC4Õ<
Û<
8
Þ<
 â<
î<
, ã<
 ä<
ë<
, å<
8Øõ ,æ<
$ ì<
 í<
8$,ø<
, =
 “=
¨=
, ”=
8 •=
& =
8³Z4˜=
Ÿ=
- ¡=
8Œ,¢=
$ §=
 ©=
, ¿=
 À=
Ú=
 , Á=
8Øõ ,Â=
& Ç=
8îØDÉ=
 Ñ=
:¨Ò=
$ Ô=
, Ö=
8 ×=
 Ø=
$ Ù=
 Û=
8ñC4ñ=
& ÷=
8ù„ù=
 Š>
Â?
8 ˜>
8L>
 ¤>
Å>
 8î ,¥>
& ª>
 ¬>
:¨­>
, °>
8ÿ
$±>
 µ>
, ¶>
 ·>
»>
, ¸>
8 ¹>
$ º>
 ¼>
8ñC4¾>
 Ä>
(Ç>
8$Ê>
 Ï>
¸?
 á>
ª?
, ÷>
 ø>
—?
, ù>
8Øõ ,ú>
'ÿ>
8L?
 Š?
•?
8î ,?
 ?
, ?
8ϱ ?
 “?
”?
$ ?
 ˜?
+ Í?
 Î?
å?
8¢Ï?
 Ò?
ä?
8<Ó?
Û?
7×<Ý?
8$ï?
 ó?
, ô?
 õ?
@
, ö?
8 ÷?
& ø?
8×,ú?
'ÿ?
8 SerializeÁL@
$ Š@
 Œ@
8ñC4Ž@
 ”@
8×,@
'@
8û¿
L@
8
§@
, «@
8ÿ
$¬@
 °@
, ±@
 ²@
¶@
, ³@
8 ´@
$ µ@
 ·@
8ñC4¹@
 ¿@
8$,É@
, Û@
 Ü@
ñ@
, Ý@
8 Þ@
& ß@
8³Z4á@
è@
- ê@
8Œ,ë@
$ ð@
 ò@
, âA
 ãA
…B
8
äA
 çA
:¨èA
 êA
 ìA
:¨íA
, ðA
8 ñA
& òA
8îØDôA
 üA
:¨ýA
$ ÿA
, B
8 B
 ƒB
$ „B
 †B
8ñC4”B
& šB
8ù„œB
 µB
ŽF
8 ÃB
8 serializeÁLÆB
 ÏB
8 ÐB
 ÑB
 ÒB
çB
 ÓB
8$ÔB
$ ØB
8
serializerÁTÚB
& äB
8π
æB
(éB
8ý4ìB
 òB
8π
óB
'ôB
8ÒöB
$ øB
8π
úB
'ûB
8,ýB
 C
8$,„C
8π
ŠC
& C
8×,C
'C
8
SerializerÁT”C
 ŸC
„F
8±C
8ÔÄ
T´C
 ¾C
8is_human_readableÁŒ¿C
 ÐC
ÑC
 ÓC
—E
8éC
8thisÁ$íC
òC
 ôC
±D
, ŽD
 D
™D
8$D
 ”D
, •D
8ϱ D
 —D
˜D
$ šD
 D
% ²D
 ÈD
 ÉD
ÒD
, ÊD
 ËD
ÏD
 ÌD
, ÍD
8 ÎD
$ ÐD
 ÑD
8ÔD
8×,×D
'ÜD
8û¿
LÞD
 çD
'èD
8Ä
LêD
 óD
…E
 ôD
8Ç
$õD
$ ùD
8ÔÄ
TûD
8$™E
 žE
öE
8ÔÄ
T´E
 ¾E
8serialize_bytesÁ|¿E
 ÎE
äE
8$ÏE
 ÓE
8¶C,ÔE
 ÙE
8ŠDÚE
 âE
ãE
+ ™F
 šF
ÉF
8¢F
 žF
ÈF
8àŸF
 ¢F
ÇF
8<£F
«F
7×<­F
$ ´F
8<¶F
¾F
7á<ÀF
8$ÓF
 ×F
:'deÁØF
$ ÛF
, ÝF
 ÞF
óF
, ßF
8 àF
& áF
8³Z4ãF
êF
- ìF
8Œ,íF
$ òF
 ôF
8ñC4öF
 üF
8×,þF
'ƒG
8 DeserializeÁ\…G
 G
:òË
G
 ”G
8
G
8á,šG
'ŸG
8¿,¡G
'¦G
8ä¨G
 «G
, ¬G
8ÿ
$­G
 ±G
, ²G
 ³G
·G
, ´G
8 µG
$ ¶G
 ¸G
8ñC4ºG
ÀG
8$,ÏG
, ¾H
 ¿H
ðH
8á,ÁH
'ÆH
8¿,ÈH
'ÍH
8äÏH
 ÒH
, ÓH
8 ÔH
 ÕH
& ÖH
8×,ØH
'ÝH
8ŠÍ
\ßH
 êH
:òË
ëH
 îH
$ ïH
 ñH
8ñC4ƒI
& ‰I
8ù„‹I
 œI
ÄO
8 ªI
8 deserializeÁ\­I
 ¸I
8DesÁ¹I
 ¼I
 ½I
ÏI
8 deserializerÁd¾I
& ÊI
8äÐ
ÌI
(ÑI
8ý4ÔI
 ÚI
8$ÛI
$ ßI
8äÐ
áI
'äI
8,æI
 ëI
8$,íI
8äÐ
óI
& öI
8×,øI
'ýI
8 DeserializerÁdÿI
 J
:òË
ŒJ
 J
 J
ºO
8£J
8†Ñ
d¦J
 ²J
8ÍÆ
Œ³J
 ÄJ
ÅJ
 ÇJ
òL
8ÝJ
8Ç
$áJ
æJ
 èJ
 éJ
…K
, ëJ
 ìJ
K
 8á,íJ
'òJ
8¿,ôJ
'ùJ
8äûJ
 þJ
, ÿJ
8 €K
 K
$ ƒK
 „K
8‡K
8×,ŠK
'K
8ŠÍ
\K
 œK
'K
8ÇÐ
\ŸK
 ªK
·K
8†Ñ
d«K
- ¸K
% ¹K
8ÏK
8this_refÁDÓK
ÜK
 ÞK
L
, øK
 ùK
ƒL
 úK

ûK
8Ç
$üK
 €L
, L
8» L
$ „L
 …L
% œL
8Ò²L
 ´L
àL
8,µL
'ºL
8÷=¼L
'¿L
8õ
¤ÁL
 ÕL
ßL
 ÖL
8ÄÕ
D×L
8$ôL
 ùL
¬O
8£N
8 deserializedÁd§N
´N
 ¶N
 ·N
, ¸N
8ÿ
$¹N
 ½N
, ¾N
 ¿N
ÃN
, ÀN
8 ÁN
$ ÂN
 ÄN
8ñC4ÆN
ÌN
'ÎN
8ÇÐ
\ÐN
 ÛN
èN
8†Ñ
dÜN
- éN
% êN
8Ò€O
 O
šO
8Î×
dƒO
 O
8to_boxedÁDO
 ˜O
™O
+ ÏO
 ÐO
çO
8¢ÑO
 ÔO
æO
8<ÕO
ÝO
7×<ßO
8$ñO
 õO
:¨öO
$ øO
:òË
úO
& ýO
:¨ÿO
$ P
, ƒP
 „P
™P
, …P
8 †P
& ‡P
8³Z4‰P
P
- P
8Œ,“P
$ ˜P
 šP
8ñC4œP
& ¢P
8ù„¤P
 ´P
8×,¶P
'»P
8ŠÍ
\½P
 ÈP
:òË
ÉP
 ÌP
8
ÎP
 ÒP
:¨ÓP
, ÖP
8ÿ
$×P
 ÛP
, ÜP
 ÝP
áP
, ÞP
8 ßP
$ àP
 âP
8ñC4äP
 êP
 ìP
®U
8 úP
8ÇÐ
\ýP
 ˆQ
8äÐ
‰Q
 ŒQ
 Q
ŸQ
8†Ñ
dŽQ
& šQ
8äÐ
œQ
(¡Q
8ý4¤Q
 ªQ
8$«Q
$ ¯Q
8äÐ
±Q
'´Q
8,¶Q
 »Q
8$,½Q
8äÐ
ÃQ
& ÆQ
8×,ÈQ
'ÍQ
8®Ò
dÏQ
 ÛQ
:òË
ÜQ
 ßQ
 áQ
¤U
8óQ
8†Ñ
döQ
 R
8ÍÆ
ŒƒR
 ”R
•R
 —R
ÖS
8­R
 °R
ÄS
8×,±R
'¶R
8deÁ¸R
'ºR
8,¼R
'ÁR
84ÃR
 ÉR
ÃS
8ï4ãR
 éR
 êR
¬S
7ëR
$ îR
8µLðR
 ùR
 úR
€S
, ûR
8ÿ
$üR
$ S
7' can only deserialize in zero-copy waysÁüƒS)
$ ­S
8$ØS
 ÝS
U
8óS
8ã­,÷S
ýS
 ÿS
 €T
 T
„T
8¦T
 …T
'†T
8ÇÐ
\ˆT
 “T
 T
8†Ñ
d”T
- ¡T
% ¢T
, ¸T
8ÿ
$¹T
'½T
 ¿T
, ÀT
 ÁT
ÅT
, ÂT
8 ÃT
$ ÄT
 ÆT
8ñC4ÈT
 ÎT
'ÏT
8©\ÑT
 ÜT
âT
8ã­,ÝT
 ãT
8
<äT
 ëT
„U
8×,ìT
'ñT
8­à
óT
'õT
8,÷T
'üT
84þT
% µU
„èüËUR Types to help compose fixed-size [`ULE`] and variable-size [`VarULE`] primitives.Á¡Ëü¥]Z This module exports [`VarTuple`] and [`VarTupleULE`], which allow a single sized type andÁüƒ@= a single unsized type to be stored together as a [`VarULE`].ÁÄËá ×Ëæ¡üã85 use zerovec::ule::vartuple::{VarTuple, VarTupleULE};ÁäœÇ—¹Ë̽ struct Employee<'a> {Á„×
id: u32,Á´è name: &'a str,Á4ÿħË¬Š let employees = [Á”  Employee {Á´³ id: 12345,ÁìÊ name: "Jane Doe",Á },Á”óØé
´† id: 67890,Áì name: "John Doe",Áµê
ÕžÍËüÑ+( let employees_as_var_tuples = employeesÁ¤ý .into_iter()ÁÜ’ .map(|x| VarTuple {ÁÄ® sized: x.id,ÁìÇ variable: x.name,Áà’ìðò’ŽËü’:7 let employees_vzv: VarZeroVec<VarTupleULE<u32, str>> =ÁüÍ2/ employees_as_var_tuples.as_slice().into();ÁËü„ '$ assert_eq!(employees_vzv.len(), 2);Á¬ Ëü° MJ assert_eq!(employees_vzv.get(0).unwrap().sized.as_unsigned_int(), 12345);Áüþ DA assert_eq!(&employees_vzv.get(0).unwrap().variable, "Jane Doe");ÁÃ
蟂
MJ assert_eq!(employees_vzv.get(1).unwrap().sized.as_unsigned_int(), 67890);Áü• DA assert_eq!(&employees_vzv.get(1).unwrap().variable, "John Doe");Á æ¡FŽ®é  ˜transmute_copyÁtü  ¹˜îØD› 
îØ5ÀY,² ÉÜ?t¹ ­œµ¶¬ ʳZ4Ó Óž³Z¸žÙâ>Û ÄŸâ>·ŸØüç $ä攑 Öüª 5µ·¤¦Ž}TVü¸dÓ!¡±¢¢¡©âæñ ćä ÇÉæñæñØèÖ£¤ÔÖ£¤IKNPü£7 —ãºê  ¼ 
£æñ¡Çã­üò5¤ü —ã Ö  ˜ 
¤æñ¡Çã­,‘ü–,™Ó!¦¦W§±¨¦§¨’õ
¢,©âìñ ¥,”ˆ ¨,«õ
,í,»õ
<õ,­ìñèÈŒ…-¥ˆ4Ÿ-ÇŒ©¬­¯²µ©­¬npjloqü¶-IĹ- ÇŒò¡
÷¡
¥šª¢«ª« Õ-¥°¢
Ò-Á¢
Ôß-ƒò¡
 ƒ
—ã¬ä-ƒò¡
µú
 ÷¡
ø-
©æñìñèÈ÷¡
ò¡
$Ö- Ü-Žüê.%”í. ÇŒ¥ €/¥
¬æñìñèÈ$/üì/.¤ï/ ÇŒ —㥠„0¥
­æñìñèÈ$…0·…‹0üÊ4’¨¯Ó!°¦W±±²²°¯±ÈÕ Ó4©â¡ü Ö4ªâ¨ Ù4É›ü,œ5›ü<¤5Ó¨4´5
¡ü¨¨|Ì5¬³
³Ï4~z|vxüã52Læ5 ¨ï¬®®
³¨›ü¡ü¨î ,ð5t‚FG´ÚŒF¬ú]Gü™2£F£FtGtGºFºFüÕ!ÑFÑFèFèF”€¢Gä™|osbf¤¦ü¸[X Fixed-width, byte-aligned data that can be cast to and from a little-endian byte slice.ÁËü˜ [X If you need to implement this trait, consider using [`#[make_ule]`](crate::make_ule) orÁüô +( [`#[derive(ULE)]`](macro@ULE) instead.Á 
Ëü¤
DA Types that are not fixed-width can implement [`VarULE`] instead.Áé
Ëüí
.+ "ULE" stands for "Unaligned little-endian"Áœ Ë âê­ Ëü±  Safety checklist for `ULE`:ÁÑ ËüÕ FC 1. The type *must not* include any uninitialized or padding bytes.Áüœ [X 2. The type must have an alignment of 1 byte, or it is a ZST that is safe to construct.Áüø [X 3. The impl of [`ULE::validate_bytes()`] *must* return an error if the given byte sliceÁüÔ
63 would not represent a valid slice of this type.Áü‹[X 4. The impl of [`ULE::validate_bytes()`] *must* return an error if the given byte sliceÁüç_\ cannot be used in its entirety (if its length is not a multiple of `size_of::<Self>()`).ÁüÇa^ 5. All other methods *must* be left with their default impl, or else implemented according toÁü©*' their respective safety guidelines.ÁüÔC@ 6. Acknowledge the following note about the equality invariant.Á˜Ëüœqn If the ULE type is a struct only containing other ULE types (or other types which satisfy invariants 1 and 2,ÁüŽkh like `[u8; N]`), invariants 1 and 2 can be achieved via `#[repr(C, packed)]` or `#[repr(transparent)]`.ÁúËÄþ # Equality invariantÁËü›_\ A non-safety invariant is that if `Self` implements `PartialEq`, the it *must* be logicallyÁüû>; equivalent to byte equality on [`Self::slice_as_bytes()`].ÁºËü¾_\ It may be necessary to introduce a "canonical form" of the ULE if logical equality does notÁüžZW equal byte equality. In such a case, [`Self::validate_bytes()`] should return an errorÁüù`] for any values that are not in canonical form. For example, the decimal strings "1.23e4" andÁüÚb_ "12.3e3" are logically equal, but not byte-for-byte equal, so we could define a canonical formÁü½41 where only a single digit is allowed before `.`.ÁòËüö]Z Failure to follow this invariant will cause surprising behavior in `PartialEq`, which mayÁüÔQN result in unpredictable operations on `ZeroVec`, `VarZeroVec`, and `ZeroMap`.Á-FÄÄ÷™ü¦³¸•þÀ•Ê•Ä÷™:¸•6¢”,Ê•*÷™R¸•N¢”DÊ•ÆÇÈÅÆÇÈÈÆÇÅü©8üò$! Validates a byte slice, `&[u8]`.ÁËü£]Z If `Self` is not well-defined for all possible bit values, the bytes should be validated.Áü…^[ If the bytes can be transmuted, *in their entirety*, to a valid slice of `Self`, then `Ok`Áüè<9 should be returned; otherwise, `Err` should be returned.Át¬ˆ ˆ—ãºêÄ ÂÄ
ÅÀ•ã­ü¹!BüçTQ Parses a byte slice, `&[u8]`, and return it as `&[Self]` with the same lifetime.ÁÀËüÈ]Z If `Self` is not well-defined for all possible bit values, the bytes should be validated,ÁüªTQ and an error should be returned in the same cases as [`Self::validate_bytes()`].ÁƒËü‹NK The default implementation executes [`Self::validate_bytes()`] followed byÁüÞ)& [`Self::slice_from_bytes_unchecked`].ÁŒ Ëü” ZW Note: The following equality should hold: `bytes.len() % size_of::<Self>() == 0`. ThisÁüó A> means that the returned slice can span the entire byte slice.Á¤¼! —ãê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ 
À•ÀÄ Ø!Ä
ÆÀ•ã­,Ñ!üÛ+=ü±#\Y Takes a byte slice, `&[u8]`, and return it as `&[Self]` with the same lifetime, assumingÁü’$^[ that this byte slice has previously been run through [`Self::parse_bytes_to_slice()`] withÁdõ$ success.Á†%ËüŽ%TQ The default implementation performs a pointer cast to the same region of memory.Áç%Ëdï%âê€&Ëtˆ& ## CallersÁ&Ëü£&^[ Callers of this method must take care to ensure that `bytes` was previously passed throughÁü†'MJ [`Self::validate_bytes()`] with success (and was not changed since then).ÁØ'Ëœà' ## ImplementorsÁø'Ëü€(_\ Implementations of this method may call unsafe functions to cast the pointer to the correctÁüä(1. type, assuming the "Callers" invariant above.Áš)Ëü¢)GD Keep in mind that `&[Self]` and `&[u8]` may have different lengths.Áî)ˬö) Safety checklist:Á*Ëü˜*UR 1. This method *must* return the same result as [`Self::parse_bytes_to_slice()`].Áüò*VS 2. This method *must* return a slice to the same region of memory as the argument.ÁÔå+Š Š—ã ŠžÄ ‡,Ä
ÇÀ•ã­,€,üª1*ü‚.>; Given `&[Self]`, returns a `&[u8]` with the same lifetime.ÁÅ.ËüÍ.T쟦/Ëd®/âê¿/ËüÇ/WT Implementations of this method should call potentially unsafe functions to cast theÁü£0  pointer to the correct type.ÁÈ0ËüÐ0G§¤t­1 ž —ãÄ Ã1Ä
ÈÀ•î,¼1¬4üÛ2[X A trait for any type that has a 1:1 mapping with an unaligned little-endian (ULE) type.Á·3Ëü»3a^ If you need to implement this trait, consider using [`#[make_ule]`](crate::make_ule) instead.Á@FÉÉ÷™ü¢”$®4É÷™"¢”÷™.¢”ËÌÊËÌ©âÀ•Êt‚7Ä®Œ7…®®ÌËl7ü¹4)& The ULE type corresponding to `Self`.Áç4Ëüï4TQ Types having infallible conversions from all bit values (Plain Old Data) can useÁüÈ5SP `RawBytesULE` with the desired width; for example, `u32` uses `RawBytesULE<4>`.Á 6Ëü¨6UR Types that are not well-defined for all bit values should implement a custom ULE.Á‡7ÉÉü€9#ü–7(% Converts from `Self` to `Self::ULE`.ÁÃ7ËüË7SP This function may involve byte order swapping (native-endian to little-endian).Á£8Ëü«8PM For best performance, mark your implementation of this function `#[inline]`.Ádƒ9À•®ÉÉ
ËÀ•$9ü˜=0ü©9(% Converts from `Self::ULE` to `Self`.ÁÖ9ËüÞ9SP This function may involve byte order swapping (little-endian to native-endian).Á¶:Ëü¾:P뱓;Ëd›;âê¬;Ëü´;\Y This function is infallible because bit validation should have occurred when `Self::ULE`Áü•<\Y was first constructed. An implementation may therefore involve an `unsafe{}` block, likeÁìö< `from_bytes_unchecked()`.Át=®À•ÉÉ
ÌÀ•çë Lª=ìÍAüÌ=JG A type whose byte sequence equals the byte sequence of its ULE type onÁä—> little-endian platforms.Á´>Ëü¸>;8 This enables certain performance optimizations, such asÁüô>@= [`ZeroVec::try_from_slice`](crate::ZeroVec::try_from_slice).Áµ?Ëܹ? # Implementation safetyÁÕ?ËüÙ?^[ This trait is safe to implement if the type's ULE (as defined by `impl `[`AsULE`]` for T`)Áü¸@]Z has an equal byte sequence as the type itself on little-endian platforms; i.e., one whereÁü–A63 `*const T` can be cast to a valid `*const T::ULE`.ÁSFÍÍ÷™üÍA ÉÀ•,åAÍ÷™)ƒ½÷™5ƒ½*¤úBüïALI A trait for a type where aligned slices can be cast to unaligned slices.Á¼BËüÀB96 Auto-implemented on all
®Î ôDÎ
ÏÀ•î,íDüºE,»›E žE ·E8ËlŸE ­E7littleÁD¯Eü™E Ñѽð ¿E½— ,àE³ÑÒÏÒüûE=”þE ƒÙø°ú°û°Ðü°ý°þ°ìHˈXêE> ÀÉÐ ˜FÐ
Ò³Ñî,‘FüÌd üÿJ^[ Variable-width, byte-aligned data that can be cast to and from a little-endian byte slice.ÁÞKËüâKa^ If you need to implement this trait, consider using [`#[make_varule]`](crate::make_varule) orÁüÄL1. [`#[derive(VarULE)]`](macro@VarULE) instead.ÁöLËüúLfc This trait is mostly for unsized types like `str` and `[T]`. It can be implemented on sized types;ÁüáMgd however, it is much more preferable to use [`ULE`] for that purpose. The [`custom`] module containsÁüÉNQN additional documentation on how this type can be implemented on custom types.ÁOËüŸOa^ If deserialization with `VarZeroVec` is desired is recommended to implement `Deserialize` forÁüPDA `Box<T>` (serde does not do this automatically for unsized `T`).ÁÆPËüÊPpm For convenience it is typically desired to implement [`EncodeAsVarULE`] and [`ZeroFrom`](zerofrom::ZeroFrom)Áü»QVS on some stack type to convert to and from the ULE type efficiently when necessary.ÁRËd–Râê£RËü§R" Safety checklist for `VarULE`:ÁÊRËüÎRFáƒü•S1. 2. The type must have an alignment of 1 byte.ÁüÇS^[ 3. The impl of [`VarULE::validate_bytes()`] *must* return an error if the given byte sliceÁü¦T6ø…üÝT^[ 4. The impl of [`VarULE::validate_bytes()`] *must* return an error if the given byte sliceÁü¼U&# cannot be used in its entirety.ÁüãUZW 5. The impl of [`VarULE::from_bytes_unchecked()`] must produce a reference to the sameÁü¾VRO underlying data assuming that the given bytes previously passed validation.Áü‘Wa^ 6. All other methods *must* be left with their default impl, or else implemented according toÁüóW*íˆüžXC@ 7. Acknowledge the following note about the equality invariant.ÁâXËüæXxu If the ULE type is a struct only containing other ULE/VarULE types (or other types which satisfy invariants 1 and 2,ÁüßYkñŠËZËÄÏZï‹èZËüìZ_›ŒüÌ[85 equivalent to byte equality on [`Self::as_bytes()`].Á…\Ëü‰\_Õüé\Z½ŽüÄ]` ü¥^büˆ_4ô½_ËüÁ_\Y There may also be cases where a `VarULE` has muiltiple canonical forms, such as a fasterÁüž``] version and a smaller version. The cleanest way to handle this case would be separate types.Áüÿ`\Y However, if this is not feasible, then the application should ensure that the data it isÁüÜa[X deserializing is in the expected form. For example, if the data is being loaded from anÁü¸b_\ external source, then requests could carry information about the expected form of the data.Á˜cËüœc]¼‘üúcQ¢’yFÓÓ÷™üÌd­Ê•<ådÓ÷™"Ê•÷™.Ê•ÕÖ×ÔÕÖ×Õ×ÖÔüªg9üód$­”œeËü¤e]å”ü†f]Z If the bytes can be transmuted, *in their entirety*, to a valid `&Self`, then `Ok` shouldÁüèf=: be returned; otherwise, `Self::Error` should be returned.Át­gŽ Ž—ãºêÓ ÄgÓ
ÔÀ•¸ø 4¼güøl7üégRO Parses a byte slice, `&[u8]`, and return it as `&Self` with the same lifetime.ÁÀhËüÈh]º˜üªiT ™ƒjËü‹jNˆšüÞj# [`Self::from_bytes_unchecked`].Á†kËüŽkZW Note: The following equality should hold: `size_of_val(result) == size_of_val(bytes)`,Áüík[X where `result` is the successful return value of the method. This means that the returnÁüÍl&# value spans the entire byte slice.Á\ûl —ãê³í³î³Òï³ìð³ñ³ò³ìäs{©¶ 
 Õâé÷  êâêôEâãæUFâã²VFâãÜ?ŒF­â㵎G£Fâã¸ÆGºFâãºûJÑF×âã¼ÞLèFöâã½â>-FÄâãÀY@FÉâãåYSFÍâãòYfFÎâã³ZyFÓâãâ>ÿF·âãØ³ZG¸âãÙ cartable_ptrÁeÚâëeitherÁ5ð2âëYokeableÁEÍÀâëÚñ(âë
CloneableCartÁmîÔâëYokeÁ%ýŽâ붬2GÊâã´iFGÆ
âã´åj]Gà
âãûktGô
âã¹ûktGõ
âã¹ên¢G© âã¾ên¢Gª âã¾Tÿ ü’( GJ58  „û úýëî$‘ üÀH üçX U This impl requires enabling the optional `yoke` Cargo feature of the `zerovec` crateÁ¨íîíîñ½ Ð §¤
 ‚¾ î‘ïðñòóÂÃÄÅÆñðòóÌ QS\ 4” ììÄÙü¿*   ¨î‘ ¨î‘¨Âìì
ð¨ýÎ ü‘ ( |” î‘ß÷ìì
ñ¨ýÎ üá * ß÷î‘ìì
ò¨ýÎï ü† l l‰  ¨î‘ƒÏìðôôìó¨ ƒÏ õƒÏ õß÷üÍ $ õƒÏ¦úäÕ
ó¨ýÎƒÏ þ ¨ rtÑ üòU ü™X ¶ô¨÷øø÷⨠ §¤
<… Ï«4 Æ’ùúûüýÂÃÄÅÆüúûýþ QS  ööààáÔ*åì 6
ä>(ùOè¨ýÎÏÊü* L„  ¨Æ’ ¨Æ’¨Âöö
ú¨ýÎ$’ üÓ(  Æ’©ýöö
û¨ýÎ ü£*  ©ýÆ’öö
ü¨ýÎï üÈl   ¨Æ’ƒÏöðþþöó¨ Ù ‹ú<… ÿƒÏ ÿ©ýü$ ÿƒÏíÿä—
ý¨ýÎƒÏ þ ê oq ü´L üÛX ¶ô¨  â¨ Ä §¤
 ƒ „ … † ‡ ÂÃÄÅÆÀ IK\‡  

@¿#à›6¢¨ýÎüº*   ¨ ¨¨Â
¨ýÎ üŒ( | æ‚
¨ýÎ üÜ*  æ‚
¨ýÎï ül l„  ¨ƒÏðˆ ˆ ó¨  ‹ú ƒÏ ‰ æ‚üÈ$ ƒÏª…äÐ
¨ý΃Ï$ þ £ oqÌ ”ûNtÿNù„¤ aŠ Œ à »Ý%dÂ Š Ž ¯ Ô*TÐ àŠ  ° Ô*አ ° æ  ÂŠ  ² žŽ  ªŠ  ³ îØ 
Š îØ5Š ôEŠ æUFŠ  ²VFŠ  Ü?ŒF­Š µŽG£FŠ ¸ÆGºFŠ ºûJÑF׊ ¼ÞLèFöŠ  ½â>-FÄŠ  ÀY@FÉŠ  åYSFÍŠ  òYfFΊ  ³ZyFÓŠ  â>ÿF·Š  سZG¸Š Ù¶¬2GÊŠ  ´iFGÆ
Š  ´åj]Gà
Š  ûktGô
Š  ¹ûktGõ
Š ¹ên¢G© Š ¾ên¢Gª Š ¾T„ ì— Ôüº5 Àí°jm”° ZüÅ\ ½^8è„ Ï ­Õ<‘ ù„ ,› Ñ“ 
 Ê +-ü¶0   ½^ªªŽ ­¨½®¿½¯°7½ʘ!ÚÆdG
­ÕÑ“× 
½^8­Õî  ü¦Z ½^˜ ˜ ñ½ ° §¤
 ‚¾ °”š 
š « (*ü•. L˜ °”
š ½^ýÎî  üƒ\ ½^œ  œ ñ½  §¤
 ‚¾ ž 
ž ˆ (*üô.  
ž ½^ýÎî , ü¼ ½^  ¡ 𢠠 ¡ ¢ â¨ Æ ó¨ É ç®„Ì §¤
Ï« ª•£ 
£ Á 8:=?üÖ 4  ½^˜Ôª•Ÿ Ÿ
£ ½^ý΃Ïî ü«
 ½^¥ 8¦ ð§ ¦ § ¥ ’Ì µ
£Ì ¸
ØÌ„»
ÙŒ ´Ì ø•¨ 
¨ °
8:=?üÇ 6 ˜ ½^ààáÔ*åì 6
ä>(ùOè˜­Õ³Õø•¤ ë ¤
¨ ½^8­Õ³Õî ü© l ½^ª « ª « ⨠³ §¤
Ï«4…
ÿ–¬ 
¬ ® (*üª
1 L­
ÿ–ÿ–© ©
¬ ½^ýÎî
´˜OüõP9œ‰Q|žQ¥ü¸Q$ËËááüûQ#¡áQ äQ ëQ8°4åQtßQ܃RîØD·R
µ îØ5µ ”­R#dÐ\üã\B? This module contains additional utility types for working withÁüª][X [`ZeroVec`] and [`VarZeroVec`]. See their docs for more details on the general purposeÁœŠ^ of these types.Á¢^Ëüª^VS [`ZeroSlice`] and [`VarZeroSlice`] provide slice-like versions of the vector typesÁü…_63 for use behind references and in custom ULE types.ÁÀ_ËüÈ_VS [`VarZeroVecOwned`] is a special owned/mutable version of [`VarZeroVec`], allowingÁü£`.+ direct manipulation of the backing buffer.Á$Ø\Ä Ç Ê Ì æ L†a¸ žŽ <aª¹ åhl¸a½
º ŸÝ%dþa¼ ³¯ Ô*TŒbའ´° Ô*á½ ´° c<ˆcä ¿ ·cå ¿ ·ˆd<cø À ¸ˆdù À ¸“b4šcÐ Á ¹“bÑ Á ¹‡f„¢c
 ºù„´caà »üõ`$?B/2ì¨a'üêa-üôbQÚܲ´ŠŒbdPRäÌcdÕc¨Å Æ Æ Å ñ½ æc¼üâc
ä‹dd”d¨È É È É ñ½ ¥dààáÔ*åì 6
ä>(ùOè¨ýÎçË¡dGIÔÊdtÓdË Ë ½ð âdÝ%
‰&Ž6Òßñ’K³ÑÏÊDFÔ…etŽeÍ Í ½ð eÝ%
‰&Ž6Òßñ’K³ÑçËDFĺ|ûÜ„¤Œ™üÚ]Z This is a [`VarZeroVecFormat`] that stores u8s in the index array, and a u8 for a length.Á¸Ëü¼PM Will have a smaller data size, but it's *extremely* likely for larger arraysÁüNK to be unrepresentable (and error on construction). Should probably be usedÁüÜIF for known-small arrays, where all but the last field are known-small.Á·ÉaŠQ9æàõÑ Ÿ)Ð Ð ·É ¯a·É( µ¡
 8°#b·É37b·ÉÕ ßÕ RT ·É·ÉÔ  µÔ
Õ (
¼c·É× á`× "$šœ š·É Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•œ˜ùÖ 
¼Ö
× þË Ãd·ÉÙ ¼bÙ "$ž ·É žµØ µÚ Ú  ÃØ ©âªªÃbªª¤
Ù ªªº¼¾H Ée·Ée·ÉÝ  Ý 68Ÿ  Ÿ·É  ·ÉÜ  ÉÜ
Ý î š
Ôf·Éß ¤ß "¡)+.08°:>@¡ ¡·ÉÞ 
ÔÞ
ß ÔPØg·Éá Ëá "$¢£ ¢·É £·É­þà Øà
á î ˆäh·Éã Äã "$¤¥ ¤·É ¥·Éñþâ äâ
ã äî ˆ”àü­_\ This is a [`VarZeroVecFormat`] that stores u16s in the index array, and a u16 for a length.ÁËü‘IF Will have a smaller data size, but it's more likely for larger arraysÁüÛ52 to be unrepresentable (and error on construction)ÁËü•WT This is the default index size used by all [`VarZeroVec`](super::VarZeroVec) types.ÁÏÊÁÀ;A®Î)å š)ä ä ÏÊ öiÏÊ(ü¡
 8°#jÏÊ37jÏÊé ßé RT¦ ¦ÏÊÏÊè üè
é (ƒkÏÊë á`ë "$§¨© §ÏÊ ¨Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•©˜ùê ƒê
ë þË ŠlÏÊí ¼bí "$ª« ªÏÊ «ªªì µî î Šì تçª
í ªª§©«HmÏÊmÏÊñ  ñ 68¬­ ¬ÏÊ ­ÏÊð ð
ñ Lî šnÏÊó ¤ó "¡)+.08°:>@® ®ÏÊò ò
ó PŸoÏÊõ Ëõ "$¯° ¯ÏÊ °ÏÊ­þô Ÿô
õ î ˆ«pÏÊ÷ Ä÷ "$±² ±ÏÊ ²ÏÊñþö «ö
÷ «î ˆ”žüõ_\ This is a [`VarZeroVecFormat`] that stores u32s in the index array, and a u32 for a length.ÁüÕGD Will have a larger data size, but will support large arrays withoutÁl
problems.ÁçË–·>è{z.;ù ù(ø ø çË ´qçË(º¡
 8°#rçË37rçËý ßý RT³ ³çËçËü ºü
ý (ÁsçËÿ á`ÿ "$´µ ´çË µÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•˜ùþ Áþ
ÿ þË ÈtçË
¼b
"$·¸ ·çË ¸ªª
µ

È
تçª
ªª§©«HÎuçËuçË
 
68¹º ¹çË ºçË
Î
î šÙvçË
¤
"¡)+.08°:>@» »çË
Ù
ÙPÝwçË
Ë
"$¼½ ¼çË ½çË­þˆ
݈
î ˆéxçË
Ä
"$¾¿ ¾çË ¿çËñþŠ
éŠ
éî ˆü©11¤´1¨
Ž
ð

Ž

⨠Í1ó¨ Ø1€®ü–4ªÎ2fm?Ž ~
É1:<?AD€2€2YŒ
Œ
Œ½3<½3YŒ
Œ
úé„€44€4YŒ
Œ
úé”44YŒ
Œ
ŠÁ¯Ñ{·Ë…YÚÁ·ƒÏ( ¡1y¨

ð


â¨*ó¨)ì´Pà`ƒÏ^ªÎ˜
á`˜
#&]`dgÀÁ ÀªÎ ÁÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•˜ù
 ¡1
˜
¨ý΃Ï,¡1þMü¦“7üó’! An iterator over VarZeroSliceÁ „±“¨š

ðœ
œ
š
⨠Ɠó¨\Ñ“€®­±ÏŠ5½Uf
ž
Ÿ
“9;= Ñ“ÏÊüä“*Tä“Y

ªÎd””,””Y

”½–\½–Y

(&ž“|¨¡
¢
ð£
¡
¢
£
â¨òó¨°ì´O«ÊU±Ï¤
á`¤
ãåàâˆÃÄÅ Ã±Ï ÄÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•Řù 
&ž“ 
¤
¨ý΃Ï,ž“þBôõ¬þžÐßzþáJǦ
§
¨
©
§
©
ª
ÀžÐ¥
¥
žÐ¥
¥
žÐúú¥
¥
©
úúÀžÐ¥
¥
±Ò¤©¥
¥
À(4ížÐ¬
á`¬
#%ÆÇÈ ÆžÐ ÇÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•Șù«
«
¬
þÌüÝ6
´ï
®
ð¯
¯
®
¶Õ 
Ȑ 
úÐ(£Tªt_°
±
'),.Üš

î­
­
­”¤

î­
­
—ãH9Í
³
ð´
´
³
¶Õ¯»ê­úл½ÀÂ\`
ð·
·

¶Õ»êØðž¹Ñ¹Ñ¯úи
 ¸
9<@CÞàÉÊ ÉúÐ Êúе

µ
¸
³Ñ¹Ñ
î L
º
ð»
»
º
¶Õþ»êýãòD£¹ÑRúм
¤¼
+.25¡ˆŠ8°ŸË Ëúй

¹
¼
³Ñ¹ÑØ
üÞe-* An iterator over elements in a VarZeroVecÁl¨f¨¿
À
À
¿
ñ½ ºf‚¾,½fÀõ§^Æ×žóP¾7Šyô¾
Á
ÙiÙiã÷Üi÷ ®iÝiü÷®iÞi’ø®it¸%ýN(¨ÔÚÆ×¼¾çÛÆ×½
½
¾
¨ýζfÖØìÄf¾½
½
çÛ(@•fˆ¨Ã
Ä
Ã
Ä
ñ½1ì´;‚¾6à`ÔÚPÆ×Å
á`Å
ŽbetvÌÍÎ ÌÆ× ÍÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•ΘùÂ
@•fÂ
Å
¨ýÎ,•fþ)üƒMJ A u8 array of little-endian data corresponding to a Unicode scalar value.ÁÑËüÕ^[ The bytes of a `CharULE` are guaranteed to represent a little-endian-encoded u32 that is aÁü´96 valid `char` and can be converted without validation.ÁîËá Ëü…30 Convert a `char` to a `CharULE` and back again:Á¹Ëæ¡üÅ,) use zerovec::ule::{AsULE, CharULE, ULE};Áòˤö let c1 = '𑄃';Áü‹  let ule = c1.to_unaligned();Áü¬EB assert_eq!(CharULE::slice_as_bytes(&[ule]), &[0x03, 0x11, 0x01]);Áüò'$ let c2 = char::from_unaligned(ule);Á¼š assert_eq!(c1, c2);Á桺Ëü¾2/ Attempt to parse invalid bytes to a `CharULE`:ÁñËæ¡üý%" use zerovec::ule::{CharULE, ULE};Á£Ëü§1. let bytes: &[u8] = &[0xFF, 0xFF, 0xFF, 0xFF];ÁüÙEB CharULE::parse_bytes_to_slice(bytes).expect_err("Invalid bytes");Áæ¡üÞfð°m8â›ÆÇ
È
§øüÞ6§øüÞÆ
Æ
Ç
<
Æ
2026-01-24 22:59:20 +00:00
Æ
§ø
(IÅ üÞË
2026-01-24 22:59:20 +00:00
á`Ë
#%ÏÐÑ ÏüÞ ÐÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•јùÊ
Ê
Ë
þÌHJÌ ŽüÞŽüÞÎ
 Î
8:ÒÓ ÒüÞ ÓüÞÍ
Í
Î
î œüÞÐ
¤Ð
#¡*,/18°;?AÔ ÔüÞÏ
K× Ï
2026-01-24 22:59:20 +00:00
Ð
2026-01-24 22:59:20 +00:00
×  (LÛ ¡
 8°#üÞ48üÞÔ
ßÔ
TVÕ ÕüÞüÞÓ
Ó
Ô
2026-01-24 22:59:20 +00:00
»üÞüÞØ
¼bØ
#%Ö× ÖüÞ ×ªª×
µÙ
2026-01-24 22:59:20 +00:00
Ù
×
2026-01-24 22:59:20 +00:00
تŒçª
Ø
ªª¨ª¬øPõH¡Pÿ4Convert an array of `char` to an array of `CharULE`.ÁñîøSjøPùsPP‚ÝÿÌÿÍÛ
Û
“Ð pP
Ú
Í€€e¿P“ Ú
Ú
œüüÎKH This type is used by the custom derive to represent multiple [`VarULE`]ÁüšJG fields packed into a single end-of-struct field. It is not recommendedÁüåda to use this type directly, use [`Tuple2VarULE`](crate::ule::tuplevar::Tuple2VarULE) etc instead.ÁÊËüÎ-* Logically, consider it to be `(, , , ..)`Áüü<9 where `` etc are potentially different [`VarULE`] types.Á¹Ëü½LI Internally, it is represented by a VarZeroSlice without the length part.Á&tÃæCâ
ñCã
ã
â
öÍ
„Ò„Î
•Î
„ìýṃ}@e`ýÄá
ä
ÜúýáœünçÜúýáà
à
á
æC´â؃üƒ$çà
à
ÜúHj“¢æCæ
ñCç
æ
ç
öÍ
€jÒ„Î
ç•Î
åýázùû]a¢æCê
ñCë
ë
ê
öÍ
Z„Î
>ž´â´â¨•Î
Oýáí
 í
ðorÕ×ØÙ Øýá Ùýáé
j“é
í
æC´âL“î E£æCð
ñCñ
ð
ñ
öÍ
€kÒ„Î
/£´âM•Î
<ýáó
¤ó
0Ý]`{¡8°Ú Úýáï
ï
ó
æC´âžýü§-B ? Optional type which uses [`NichedOptionULE<U,N>`] as ULE type.Áê- Ëüî-G D The implementors guarantee that `N == core::mem::size_of::<Self>()`Áü¶.N K `#[repr(transparent)]` guarantees that the layout is same as [`Option<U>`]Á,dæ0 ¨8ö
Í÷
÷
ö
àú ó0 Ì”tö0 ´ä&І
¸‰ôPõ
ø
¿ü´äýf¿ü´äô
ô
õ
æãÍwy| ü0 l†1 ô
ô
¿ü(}Ž/ ¬¨8ú
Íû
û
ú
àúÙÌ”p}ö0 ·ü
D´äý
á`ý
ùû'hjÛÜÝ Û´ä ÜÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•ݘùù
}Ž/ ù
ý
æãÍ,Ž/ þ ~•/ ­¨8ÿ
Í ÿ
àúùÌ”p~ö0 ®¤ E´äš(›/ ®¨8ƒ Í ƒ àúZÌ”pö0 ÞæãM´ä ß ƒ1tvÞ Þ´ä´ä ›/ 
æãÍ,›/ H€¢/ ¯¨8 ÍŠ  Š àú+Ì”p€ö0 ´ä<?Ç]a¯¨8 ÍŽ Ž  àúÌ”Yç… œ´ä   ¢¥-ÃÅßà ß´ä à´äŒ ¢/ Œ
æãÍL¢/ î 4­/ °¨8 Í  àúbÌ”pö0 ㇠G´ä ¤ *n¡uwz|8°ŠŒá á´ä ­/ 
æãÍ­/ ‚±/ ±¨8˜ Í  ˜ àúHÌ”p‚ö0 »bæãO´ä ¼b ru2ývxâã â´ä ãµ µœ œ ±/  ©âljíÃbljû
æãÍlj$±/ !·/ ²¨8ž ÍŸ ž Ÿ àúuÌ”ö0 ŒÆ G´ä¡ Ë¡ š*"npäå ä´ä å´ä­þ ƒ·/ 
¡ æãÍT·/ î áÃ/ ³¨8¤ Í¥ ¥ ¤ àúXÌ”p„ö0 ÝÇ G´ä§ ħ z}*npæç æ´ä ç´äñþ£ Ã/ £
§ æãÍÃ/ î áRÿü®SP A u8 array of little-endian data with infallible conversions to and from &[u8].Á0\Í« « “Ð ëéÖ±ËúÇÒOUª ¬ ¡ëëéRÿN¡ëëé© ©
ª Íj ¨© © ¡ë(” ½Í¯ ¯ “Ð p”¢ëé± á`± \BDèéê èëé éÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•ê˜ù®  ®
± ÍþóH•§¾Í³ ³ “Ð p•¢ëé
F8<¾Í  “Ð 4ëé¸  ¸ Esuëì ëëé ìëéµ §µ
¸ Íî ß²¿Í» » “Ð p–¢ëé½ ¤½ 2C¡JLOQ8°[_aí íëéº ²º
½ Ͳ(—¡ 
8° $ÀÍÀ À “Ð p—¢ëé
ùTXÀÍà à “Ð 4ëéÅ ßÅ E4î îëéëé Â
Å Í ˜½ÁÍÉ É “Ð ¢ëé
ÄP™ÃÂÍÌ Ì “Ð p™¢ëéÎ ËÎ CEïð ïëé ðëé­þË ÃË
Î Íî ±šÏÃÍÑ Ñ “Ð ¢ëéÓ ÄÓ ºCEñò ñëé òëéñþÐ šÏÐ
Ó ÍÏî ± ›ÔÄÍÖ Ö “Ð p›¢ëéØ ¼bØ mCEóô óëé ôµÕ µÙ Ù ÔÕ ©â¢›¹Ãb¢›Ç
Ø Í¢›ãå縜õ1¥ÍÜ Ý Þ  —+øœè*¡œœ¡~Gets this `RawBytesULE` as a `u16`. This is equivalent to calling [`AsULE::from_unaligned()`] on the appropriately sized type.ÁÞ›øž£¡øœªïõ õ¥ÍÚ œÿÚ
Ü  œøœÅ3¡œûœÿ}Converts a `u16` to a `RawBytesULE`. This is equivalent to calling [`AsULE::to_unaligned()`] on the appropriately sized type.Áæø  øœù©Ò¥ÍÚ Ú ¬‡˜QÁø¢õH¡¢û¢ÿ=Convert an array of `u16` to an array of `RawBytesULE < 2 >`.ÁÖŸø¥jø¢ùs÷ŠåŠÚ Íß ß Ú “Ð 
Þ Í€€Å¢âÞ Þ ¸¦õ2çÍæ ç è  ¶+ø¦è*¡¦¦¡~Gets this `RawBytesULE` as a `u32`. This is equivalent to calling [`AsULE::from_unaligned()`] on the appropriately sized type.Áñ¡ø¨£¡ø¦ªïö öçÍä ¦ÿä
æ  ¦ø¦Å3¡¦û¦ÿ}Converts a `u32` to a `RawBytesULE`. This is equivalent to calling [`AsULE::to_unaligned()`] on the appropriately sized type.Áù£øª ø¦ù©ÒçÍä ä µ’˜çÆø¬õH¡¬û¬ÿ=Convert an array of `u32` to an array of `RawBytesULE < 4 >`.Á饸¯jø¬ùs€–î•ä Íé é ä “Ð 
è Í€€‰Ê¬âè è ¸°õ3õëð ñ ò  Õ+ø°è*¡°°¡~Gets this `RawBytesULE` as a `u64`. This is equivalent to calling [`AsULE::from_unaligned()`] on the appropriately sized type.Á„¨ø²£¡ø°ªï÷ ÷õëî °ÿî
ð  °ø°Å3¡°û°ÿ}Converts a `u64` to a `RawBytesULE`. This is equivalent to calling [`AsULE::to_unaligned()`] on the appropriately sized type.ÁŒªø´ ø°ù©Òõëî î ΘsÌø¶õH¡ûÿ=Convert an array of `u64` to an array of `RawBytesULE < 8 >`.Áü«ø¹jø¶ùs™¡‡¡î Íó ó î “Ð 
ò Í€€âò ò ¸ºõ4Ïìú û ü õ+øºè*¡ºº¡Gets this `RawBytesULE` as a `u128`. This is equivalent to calling [`AsULE::from_unaligned()`] on the appropriately sized type.Á—®ø¼£¡øºªïø øÏìø ºÿø
ú  ºøºÅ3¡ºûºÿ~Converts a `u128` to a `RawBytesULE`. This is equivalent to calling [`AsULE::to_unaligned()`] on the appropriately sized type.Á °ø¾ øºù©ÒÏìø ø 記
ÒøÀõH¡ÀûÀÿ?Convert an array of `u128` to an array of `RawBytesULE < 16 >`.Á‘²øÃjøÀùs³¬¡¬ø Íý ý ø “Ð 
ü Í€€¼ÕÀæü ü øÅð!'é¥Í ü Ÿ,èż" Å¿"¥Í 
˜Ä" Å¦#é ˆ ÊË̈ É#ÅÎ#  ¥Í¤øÅŠ$"$Ê 
ˆ  Åš$øÅ%/’%ܶ 
®ñ
ß
    ¸àô ÷  ®ñ®ñ
àý 
æñìñ àþ øàÅ!*CÓ!
¦W


’õ
Á ‘ø
À µåàÐ!Çå
®ñß â æ é  ¡ââŠ$ULE type for tuples with 3 elements.ÁÇöøãŒ8øâADL†%Ó!š
¦W
kœ

œ
š
’õ
˜%‘ø
%©â§ó ¢%ÞòEÕAŸH>ÕÕ
ž
Ÿ
æñìñ§óÞò æñìñ§óÞò˜
˜
æñìñ§óŸ¢¤ž ¼˜
˜
æñ˜
˜
ìñ02˜
˜
§óøâ¯0DÓ!¡
¦W¢
k£
£
¡
¢
’õ
K‘ø
JÒø@µåâÁÇå
ħóÞò¤
Ť
ŒŽøâî7ñŠ Š—ãºê 
â 
¤
æñìñ§óã­øâû(DÓ!¦
¦W§
k¨
§
¨
¦
’õ
d‘ø
cÒøY«õ
±ç
ɧó³ó©
ª
«
ÊË̪
«
´·»¾¹¼²â·¥
¥
˜
˜

·{
ìž
íŸ
î EÕAŸH>ÕÕÐèÛè§óÊøâ÷"ú³ó³óÊ¥
¥
ª
æñìñ§ó âøâ¦/©¼ÿ³ó¥
¥
«
æñìñ§óçë Hâ¸øâÙ=DÓ!­
¦W®
k¯
¯
­
®
 ’õ
E‘ø
DÒø:ÎêäµåâñêêÇåà`§ó(²û$Þò°
á`°
œ £ž¡øâ¥C⨌ Þò ŒÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•˜ù¬
⬬
°
æñìñ§ó â­þâ³øâ;DÓ!²
¦W³
k´
³
´
²
’õ
Ñ‘ø
ÐÒøÆ­íµåâÍíÇåž§ó§ó,²û(Þòµ
 µ
),03.1øâÎ"âÑŽ ŽÞò Þò±
âÔ±
µ
æñìñ§ó âÕî ÛøâÈ-DÓ!·
¦W¸
k¹
·
¸
¹
 ’õ
‘ø
ÒøÏïâÓµåâØëïÇ壧ó(²û$Þòehlojmøâ=DÓ!»
¦W¼
k½
»
¼
½
 ’õ
Ó‘ø
ÒÒøÈÞðµåâšþðÇåɧó§ó,²û(Þò¾
˾
+.2503øâÎBÑ Þò Þò­þº
âݺ
¾
æñìñ§ó âÞî äøâñ/DÓ!À
¦WÁ
kÂ
Â
À
Á
 ’õ
 ‘ø
 Òø ‚óâüµåâžóÇåçó(²û$ÞòÃ
ÄÃ
t w { ~ y | øâ¯2â² Þò Þòñþ¿
â¿
Ã
æñìñ§ó â·î ½øâº +DÓ!Å
¦WÆ
kÇ
Æ
Å
Ç
’õ
i
‘ø
h
Òø^
µåâÅ Çå
²ûÞòÈ
ßÈ
Ÿ
¢
¦
©
¤
§
¸âô ÷  ÞòÞòÄ
âý Ä
È
æñìñ§ó âþ øâÅ!*DÓ!Ê
¦WË
kÌ
Ë
Ì
Ê
’õ
w ‘ø
v Òøl µåâÐ!Çå
²ûÞò¢ ¥ © ¬ § ª ~¡ääŠ$ULE type for tuples with 4 elements.Á­øåŒ8øäAELµ%Ó!Ï
¦WÐ
kÑ
í~Ò
Ï
Ñ
Ò
Ð
’õ
Ç%‘ø
Ì%Òø Ñ%©âñô Ö%›ô¾N@ Rze¶Î
Ó
Ô
Õ
Ö
æñìñ§óñô›ô~°æñìñ§óñô›ôÍ
Í
Î
æñìñ§óñô²´·¹¼¾¸º¼Í
Í
æñÍ
Í
ìñ02Í
Í
§óFHÍ
Í
ñôøä¯0EÓ!Ø
¦WÙ
kÚ
í~Û
Ø
Ú
Û
Ù
’õ
‘ø
ÒøБµåäÁÇå
²ûÄñô›ôÜ
ÅÜ
Ýàäçëîéìøäî7ñ —ãºê×
ä×
Ü
æñìñ§óñôã­øäû(EÓ!Þ
¦Wß
kà
í~á
Þ
á
ß
à
’õ
Û‘ø
ÚÒøÙБÏ«õ
±ç
ËýÉñôþôâ
ã
ä
ÊËÌã
ä
8;?BFIDG²ä·Ý
Ý
Í
Í
Î
À~Ó
ìÔ
íÕ
îÖ
ï ¾N@ Rze¶ÐèÛèŠÿñôÊøä÷"úþôþôÊÝ
Ý
ã
æñìñ§óñô äøä¦/©Ó™þôÝ
Ý
ä
æñìñ§óñôçë H䏸äÙ=EÓ!æ
¦Wç
kè
í~é
é
ç
æ
è
 ’õ
þ‘ø
ýÒøüБòÎêäµåäñêêÇå¼ ²ûà`ñô4ü”0›ôê
á`ê
ehlosvqtøä¥C䨘 ›ô Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•˜˜ùå
ä¬å
ê
æñìñ§óñô ä­þä³øä;EÓ!ì
¦Wí
kî
í~ï
ì
î
ï
í
 ’õ
À‘ø
¿Òø¾Б´­íµåäÍíÇåÈ„ ²ûžñôñô8ü”4›ôð
 ð
+.259<7:øäÎ"äÑš ›ô š›ôë
äÔë
ð
æñìñ§óñô äÕî ÛøäÈ-EÓ!ò
¦Wó
kô
í~õ
ò
ô
õ
ó
 ’õ
A‘ø
@Òø?Б5ÏïäÓµåäØëïÇ哇 ²û£ñô4ü”0›ô ¤§«®©¬øä=EÓ!÷
¦Wø
kù
í~ú
ú
ù
÷
ø
 ’õ
) ‘ø
( Òø' Б ÞðµåäšþðÇåʈ ²ûÉñôñô8ü”4›ôû
Ëû
ž ¢ ¥   £ øäÎBÑœ ›ô œ›ô­þö
äÝö
û
æñìñ§óñô äÞî äøäñ/EÓ!ý
¦Wþ
kÿ
í~ÿ
ý
þ
 ’õ
¬
‘ø
«
Òøª
Б 
‚óäüµåäžóÇå—‹ ²ûÃñô4ü”0›ôÄ    ! $  " øä¯2䲞 ›ô ž›ôñþü
äü
æñìñ§óñô ä·î ½øäº +EÓ!ƒ¦Wkí~ƒ’õ
+ ‘ø
* Òø) Б µåäÅ Çå
²ûü”›ôßn q u x |  z } ¸äô ÷ Ÿ Ÿ›ô›ôäý 
æñìñ§óñô äþ øäÅ!*EÓ!¦WŠkí~ŒŒŠ’õ
i
‘ø
h
Òøg
Б]
µåäÐ!Çå
²ûü”›ô¡
¤
¨
«
¯
²
­
°
¡ææŠ$ULE type for tuples with 5 elements.Á±¬øçŒ8øæAFLé%Ó!¦Wkí~—B’õ
û%‘ø
€&Òø …&Б Š&©âÍö &éõ p­ŠÄ‘ƒŽ˜æñìñ§óñôÍöéõÍæñìñ§óñôÍöéõ
Žæñìñ§óñôÍöÇÉÌÎÑÓÖØÒÔ¼æñìñ02§óFHñô\^Íöøæ¯0FÓ!š¦Wkœí~—Bžžœš
’õ
Ù‘ø
ØÒø×БÖì®ÌµåæÁÇå
²ûü”ÄÍö$éõŸÅŸ148;?BFIDGøæî7ñ   —ãºêæ
Ÿæñìñ§óñôÍöã­øæû(FÓ!¡¦W¢k£í~¤—B¥¤¢¥¡£
’õ
R‘ø
QÒøPБOì®E«õ
±ç
ËýÅ—ÉÍö$Úö¦§¨ÊĘ̈§¼¿ÃÆÊÍÑÔÏҲ淠 Ž¢‚ìíîï˜ð  p­ŠÄ‘ƒÐèÛèŠÿ ™ÍöÊøæ÷"úÚöÚöÊ  
§æñìñ§óñôÍö æøæ¦/©‰¸Úö  
¨æñìñ§óñôÍöçë Hæ¸øæÙ=FÓ!ª¦W«k¬í~­—B®­«®ª¬’õ
¸‘ø
·ÒøБµì®«ÎêäµåæñêêÇå¼ ²ûþ›,ü”(à`Íö@ä²<éõ¯á`¯259<@CGJEHøæ¥C模¢£ ¡éõ ¢Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•£˜ù©æ¬©
¯æñìñ§óñôÍö æ­þæ³øæ;FÓ!±¦W²k³í~´—Bµ±µ´²³’õ
°‘ø
¯Òø®Б­ì®£­íµåæÍíÇåÈ„ ²ûÀŸ,ü”(žÍöÍöDä²@éõ .158<?CFADøæÎ"æÑ¤¥ ¤éõ ¥éõ°æÔ°
æñìñ§óñôÍö æÕî ÛøæÈ-FÓ!¸¦W¹kºí~»—B¼¼¸º»¹’õ
g ‘ø
f Òøe Бd ì®Z ÏïæÓµåæØëïÇ哇 ²ûÁ¢,ü”(£Íö@ä²<éõÖ Ù Ý à ä ç ë î é ì øæ=FÓ!¾¦W¿kÀí~Á—BÂÀÁ¿Â¾’õ

‘ø

Òø~
Б}
ì®s
ÞðµåæšþðÇåʈ ²û©¤,ü”(ÉÍöÍöDä²@éõÃËÃþ
         øæÎBѦ§ ¦éõ §éõ­þ½æÝ½
Ãæñìñ§óñôÍö æÞî äøæñ/FÓ!ŦWÆkÇí~È—BÉÇÅÉÈÆ’õ
9 ‘ø
8 Òø7 Б6 ì®, ‚óæüµåæžóÇå—‹ ²û¬§,ü”(ÃÍö@ä²<éõÊÄʳ  º ½ Á Ä È Ë Æ É øæ¯2沨© ¨éõ ©éõñþÄæÄ
Êæñìñ§óñôÍö æ·î ½øæº +FÓ!̦WÍkÎí~Ï—BÐÐÎÌÍÏ
’õ
î
‘ø
í
Òøì
Бë
ì®á
µåæÅ Çå
²ûü”ä²éõÑßÑ>AEHLOSVQT¸æô ÷ ª ªéõéõËæý Ë
Ñæñìñ§óñôÍö æþ øæÅ!*FÓ!Ó¦WÔkÕí~Ö—B×Ô×ÓÕÖ
’õ
\‘ø
[ÒøZБYì®OµåæÐ!Çå
²ûü”ä²éõ¡¤¨«¯²¹´·¡èèŠ$ULE type for tuples with 6 elements.ÁÔÍøéŒ8øèAGL¢&Ó!Ú¦WÛkÜí~Ý—BÞðßßÝÛÜÚÞ’õ
´&‘ø
¹&Òø ¾&Б Ã&ì® È&©â¹ø Í&È÷©úþXZŒT?Ùàáâãäåæñìñ§óñôÍö¹øÈ÷êæñìñ§óñôÍö¹øÈ÷ØØ
Ùæñìñ§óñôÍö¹øÜÞáãæèëíðòìî¼ØØæñØØìñ02ØØ§óFHØØñô\^ØØÍörtØØ¹øøè¯0GÓ!ç¦Wèkéí~ê—Bëðìêèìëçé ’õ
 ‘ø
ÒøБ쮧еåèÁÇå
²ûü”ä²Ä¹ø*È÷íÅíˆŒš¡¤Ÿ¢øèî7ñ« «—ãºêæèæ
íæñìñ§óñôÍö¹øã­øèû(GÓ!ï¦Wðkñí~ò—Bóðôóñïôðò ’õ
É‘ø
ÈÒøÇБÆì®Å§Ð»«õ
±ç
ËýÅ—ݵɹø*Æøõö÷ÊËÌö÷@CGJNQUX\_Z]²è·îîØØÙÛ†àìáíâîãïäðåñ ©úþXZŒTÐèÛèŠÿ ™Õ·¹øÊøè÷"úÆøÆøÊîî
öæñìñ§óñôÍö¹ø èøè¦/©ÝÚÆøîî
÷æñìñ§óñôÍö¹øçë Hè¸øèÙ=GÓ!ù¦Wúkûí~ü—Býðþûüúþýù’õ
q‘ø
pÒøoБnì®m§ÐcÎêäµåèñêêÇå¼ ²ûþ›,ü”(ߺ8ä²4à`¹øLëÔHÈ÷ÿá`ÿþ øè¥C訬­® ¬È÷ ­Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•®˜ùøè¬ø
ÿæñìñ§óñôÍö¹ø è­þè³øè;GÓ!¦Wkƒí~—Bðƒ’õ
Ÿ‘ø
žÒøБœì®§Ð­íµåèÍíÇåÈ„ ²ûÀŸ,ü”(×¾8ä²4ž¹ø¹øPëÔLÈ÷ 0 3 7 : > A E H L O J M øèÎ"èѯ° ¯È÷ °È÷èÔ
æñìñ§óñôÍö¹ø èÕî ÛøèÈ-GÓ!¦WŠkí~Œ—BðŽŽŒŠ’õ
Œ
‘ø

ÒøŠ
Б
쮈
§Ð~
ÏïèÓµåèØëïÇ哇 ²ûÁ¢,ü”(ŽÂ8ä²4£¹øLëÔHÈ÷      # & * - ( + øè=GÓ!¦Wkí~—Bð’õ
Ö ‘ø
Õ ÒøÔ Ð‘Ó ì®Ò §ÐÈ ÞðµåèšþðÇåʈ ²û©¤,ü”(§Ä8ä²4ɹø¹øPëÔLÈ÷Ëg j n q u x |  ƒ    øèÎBѱ² ±È÷ ²È÷­þèÝ
æñìñ§óñôÍö¹ø èÞî äøèñ/GÓ!˜¦Wkší~—Bœðš˜œ’õ
Å
‘ø
Ä
ÒøÃ
БÂ
ì®Á
§Ð·
‚óèüµåèžóÇå—‹ ²û¬§,ü”(àÇ8ä²4ùøLëÔHÈ÷žÄžRUY\`cgjnqloøè¯2è²³´ ³È÷ ´È÷ñþè
žæñìñ§óñôÍö¹ø è·î ½øèº +GÓ! ¦W¡k¢í~£—B¤ð¥¥£¡¢ ¤ ’õ
°‘ø
¯Òø®Б­ì®¬§Ð¢µåèÅ Çå
²ûü”ä²ëÔ"È÷¦ß¦
"%),'*¸èô ÷ µ µÈ÷È÷Ÿèý Ÿ
¦æñìñ§óñôÍö¹ø èþ øèÅ!*GÓ!¨¦W©kªí~«—B¬ð­­¬¨ª«© ’õ
N‘ø
MÒøLБKì®J§Ð@µåèÐ!Çå
²ûü”ä²ëÔ"È÷ £§ª®±µ¸¼¿º½øêë Ù
¡ê§
ê«
LVarULE type for tuples with 2 elements. See module docs for more informationÁ™óøë­
`
øê¥
i
KdÈU
Ó!¯¦W°ñC±±¯°ªâæñ ÛU
ªâìñ åU
©â‡úøêŒ "
a‡ú€ê
·ù+MéãîD²³´WYSUO0êŒ
ÏʘêÀ
ÝU
®®ŠÁ¯Ñ{·Ë…YÚæñD çU
®®ŠÁ¯Ñ{·Ë…YÚìñøê#

®®à
à
á
åjä
ìç ¹ƒ}@e`ýćú ÖU
øêÎM
KÓ!·¦W¸ñC¹¹·¸½õºÎõ°ßõì
ÓæñÙ
Óìñóõ€êô
·ùº»XZ¸ê
¡ê¿
êÃ
Get field 0of this tupleÁ‘ùøìÅ*
øê½3
í ·ù æñê

ºæñìñ‡ú êŒ
¡²´®Get field 1of this tupleÁ»úøíÅ*
ªR· ··ù ·ìñ¥
»æñìñ‡ú¡øêª_
KÓ!½¦W¾ñC¿½¾¿½õÂÎõ¸ßõÏ
˜ù¼
ªù
óõ€ê×
·ùÀÂÔÖÂÀ

 XZøê 7
£
¸ ¸—ãºê¼ê¹
¼
Àæñìñ‡úã­²
9øêÚ5
 êä
¹ ¹—ã ¹·ù¼ê
¼
Âæñìñ‡úã­ù
¾ÌøêÚ"i
KÓ!ƦWÇñCÈÈÆÇ½õÎõ{ßõ…#
Îêå"
˜ùò"
êêªùóõ€ê#
·ùÉá`ÉÒÕÐÓ]_øêÒ#C
êÕ#
º»¼ º·ù »Á`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•¼˜ùÅêÙ#
Å
Éæñìñ‡ú êÚ#
þêà#
øê³%g
KÓ!˦WÌñCÍÌÍ˽õ ÎõÿßõÝ%
­í¾%
˜ùÊ%
Ííªùóõ€êå%
·ùΠÎVYTW]_øê©&"
ê¬&
½¾ ½·ù ¾·ùÊê¯&
Ê
Îæñìñ‡ú ê°&
î ¶&
øê¨'Y
KÓ!ЦWÑñCÒÑÐÒ½õHÎõ>ßõË'
Ïïê³'
˜ù¸'
ëïªùóõ€êÓ'
·ùŠˆRTøêŽ(i
KÓ!Ô¦WÕñCÖÔÕÖ½õ÷Îõíßõ¹(
Þð™(
˜ù¦(
þðªùóõ€êÁ(
·ù×Ë×D G B E ]_øê†)B
‰)
¿À ¿·ù À·ù­þÓê•)
Ó
׿ñìñ‡ú ê–)
î œ)
øê­*[
KÓ!Ù¦WÚñCÛÛÚÙ½õ8
Îõ.
ßõÑ*
‚óê¸*
˜ù¾*
žóªùóõ€êÙ*
·ùÜÄÜ
ˆ
ƒ

]_øê˜+2
ê+
Á Á·ù ·ùñþØêŸ+
Ø
Üæñìñ‡ú ê +
î ¦+
øêý-æ
KÓ!Þ¦WßèŽàòŽáñCâàÞâáß
½õš Îõ ©âÕúßU
©âÛúéU
©â²û.
˜ùÿ.
ªù
­Õúæñê¨/
­Ûúìña²û€êÒ/
Óúãæè¯²µèæãG J E H ´°²¬®øêú/I
Àêý/
à ÃÓú¢šÝšä¢ååäê™0
Ý©âê–0
©âÐê£0
ÄÅ Ä
Å—ã¨ê¨0
ÄÅê¼0
ãæñìñÕúÛú²û êš0
ê 0
¦¨ ¢øêÖ1%
êÙ1
Æ ÆÓúÝêì1
Ý
ææñìñÕúÛú²û êí1
Þ øê¯4.
 ê²4
ÇÈ ÇÓú È—ãÝêÇ4
Ý
èæñìñÕúÛú²û êÈ4
·…êÎ4
}
øê”<õ
K¨ëÓ!ì¦WíèŽîòŽïñCðëíîìðï
ªâ›ümªâ¡ül©âÀûÜ©âÆûÛ©â§ü±<
Ó›ü˜=
Ó¡ü
Àû¨›ü€êÉ=

Æû¨¡üa§ü€êù=
¾ûñ
ñê™<
,/*-œš»½øê˜>6
>
 ¨Óû¾ûêê
ñ¨›ü¡üÀûÆû§üî ¥>
øñë Ù
¡ñ§
ñ«
LVarULE type for tuples with 3 elements. See module docs for more informationÁÊ–øò­
`
øñ¥
i
Ld€V
Ó!ó¦WôkõñCöôöõó½õ “V
Îõ V
ªâ§ó §V
©â”ýøñŒ "
a”ý€ñ
´üÑ& ?)œ
ó÷øùúacfhbd^0ñŒ
ÏʘñÀ
•V
òòéö ŸV
òò©÷8 ©V
òòŠÁ¯Ñ{·Ë…YÚ§óøñ#

òòà
à
á
åjä
ìç ¹ƒ}@e`ýÄ”ý ŽV
øñÎM
LÓ!ý¦WþkÿñCýÿþ½õÓÎõÒÈž™ì
˜ùÙ
ªù
ӧ󲙀ñô
´üƒ#&*-(+hj¸ñ
¡ñ¿
ñÃ
‘ù‘ùøóÅ*
øñ½3
ïÉ É´ü Éæñüñ
ü
æñìñ§ó”ý ñŒ
¤¡ ¢œ»ú»úøôÅ*
˜hÊ Ê´ü Êìñüü
æñìñ§ó”ý/¡,/*Get field 2of this tupleÁŸŸøõÅ*
>õË Ë´ü ˧óü:ü
ƒæñìñ§ó”ý7øñª_
LÓ!¦WkñCˆˆ½õÎõzž™Ï
˜ù¼
ªù
ÿœ²™€ñ×
´üÔÖÚÝáäßâmoøñ 7
£
Ì Ì—ãºêñ¹

æñìñ§ó”ýã­²
øñÚ5
 ñä
Í Í—ã Í´üñ

æñìñ§ó”ýã­ù
œªøñÚ"i
LÓ!¦WkñC ½õ|Îõ{qž™…#
Îêå"
˜ùò"
êêªù¼ ÿœ²™€ñ#
´üá`ÜßãæáäxzøñÒ#C
ñÕ#
ÎÏРδü ÏÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•ИùŽñÙ#
Ž
æñìñ§ó”ý ñÚ#
þñà#
øñ³%g
LÓ!¦WkñC˜˜ ½õ5Îõ4*ž™Ý%
­í¾%
˜ùÊ%
ÍíªùÈ„ ÿœ²™€ñå%
´ü ˜œŸšxzøñ©&"
ñ¬&
ÑÒ Ñ´ü Ò´üñ¯&

æñìñ§ó”ý ñ°&
î ¶&
øñ¨'Y
LÓ!¦WœkñCžžœ ½õ© Îõ¨ ž ž™Ë'
Ïïñ³'
˜ù¸'
ëïªù“‡ ÿœ²™€ñÓ'
´üþ 




moøñŽ(i
LÓ! ¦W¡k¢ñC£ ¢£¡ ½õˆ
Îõ
}
ž™¹(
Þð™(
˜ù¦(
þðªùʈ ÿœ²™€ñÁ(
´ü¤Ë¤è
ë
ï
ò
í
ð
xzøñ†)B
‰)
ÓÔ Ó´ü Ô´ü­þŸñ•)
Ÿ
¤æñìñ§ó”ý ñ–)
î œ)
øñ­*[
LÓ!¦¦W§k¨ñC©¦¨©§ ½õþ Îõý ó ž™Ñ*
‚óñ¸*
˜ù¾*
žóªù—‹ ÿœ²™€ñÙ*
´üªÄª^ a e h c f xzøñ˜+2
ñ+
ÕÖ Õ´ü Ö´üñþ¥ñŸ+
¥
ªæñìñ§ó”ý ñ +
î ¦+
øñý-æ
LÓ!¬¦W­k®èޝòŽ°Ò“±ñC²¯­±²°¬®½õ¥
Îõ¤
š
Ê”—V
Ú”¡V
©âèý«V
©âÏþ.
˜ùÿ.
ªù
ÿœ­Àûæññ¨/
­Æûìñ­èý§ó(aÏþ€ñÒ/
àý³¸¯²µ³¸pswzuxãåèêäæàâøñú/I
Àñý/
× ×àý¢š«š´¢µ´µñ™0
«©â“·ñ–0
©âŽ·Ðñ£0
ØÙŽ· Ø
Ù—ã¨ñ¨0
ØÙŽ·‰¸“·ñ¼0
³ æñìñ§óÀûÆûèýÏþ“·Ž· ñš0
ñ 0
®°¨ªøñÖ1%
ñÙ1
Ú Úàý«ñì1
«
æñìñ§óÀûÆûèýÏþ ñí1
,øñ¯4.
 ñ²4
ÛÜ Ûàý Ü—ã«ñÇ4
«
¸æñìñ§óÀûÆûèýÏþ ñÈ4
·…ñÎ4
Õøñ”<õ
L¨»Ó!¼¦W½k¾èŽ¿òŽÀÒ“ÁñC¼¿»Â¾Á½Àª”应äªâÒÿã©âÝþR©âãþZ©âéþY©â×ÿ±<
ý”˜=

ÓÒÿ
Ýþ¨›ü€ñÉ=

ãþ¨¡ü
éþ¨Òÿ2a×ÿ€ñù=
ÛþÃ
Ãñ™<
ÐÓ×ÚÕØCFJMHKîðøñ˜>6
>
 ¨öþÛþºº
è›ü¡üÒÿÝþãþéþ×ÿî ¥>
øùë Ù
¡ù§
ù«
LVarULE type for tuples with 4 elements. See module docs for more informationÁÍ¿øú­
`
øù¥
i
MdÂV
Ó!ŦWÆkÇí~ÈñCÉÉÇÅÆÈ½õ ÕV
Îõ ßV
 éV
ªâñô óV
øùŒ "
Û€ù
äÿtüþèe '·ÊËÌÍÎ[]`begacf0ùŒ
ÏʘùÀ
×V
ÄÄéö áV
ÄÄ©÷8 ëV
ÄÄëšR õV
ÄÄŠÁ¯Ñ{·Ë…YÚñôøù#

ÄÄà
à
á
åjä
ìç ¹ƒ}@e`ýIJû ÐV
øùÎM
MÓ!ѦWÒkÓí~ÔñCÕÒÔÕÓÑ
½õÎõ¨Â÷ì
˜ùÙ
ªù
ÿœÓñôÛ€ùô
äÿÖרÙcfjmqtor¸ù
¡ù¿
ùÃ
‘ù‘ùøûÅ*
øù½3
7Ý Ýäÿ ÝæñÐù
Ð
Öæñìñ§óñô²û ùŒ
©¡¥§¡»ú»úøüÅ*
µÞ Þäÿ ÞìñИÐ
׿ñìñ§óñô²û9¡694ŸŸŸŸøýÅ*
10ß ßäÿ ß§óÐ-Ð
Øæñìñ§óñô²û*СÍÐËGet field 3of this tupleÁ¢ÊøþÅ*
ßÄà àäÿ àñôÐÛÐ
Ùæñìñ§óñô²ûØøùª_
MÓ!Û¦WÜkÝí~ÞñCßßÛÝÞÜ
½õÎõˆ¨Â}Ï
˜ù¼
ªù
ÿœÏÆÛ€ù×
äÿàâÔÖâàëîòõùü÷úøù 7
£
á á—ãºêÚù¹
Ú
àæñìñ§óñô²ûã­²
øùÚ5
2026-01-24 22:59:20 +00:00
 ùä
â â—ã âäÿÚù
Ú
âæñìñ§óñô²ûã­ù
¥³øùÚ"i
MÓ!æ¦Wçkèí~éñCêêèæçé½õµÎõ´³¨Â©…#
Îêå"
˜ùò"
êêªù¼ ÿœþ›,ÏÆ(Û€ù#
äÿëá`ë(+/26947øùÒ#C
ùÕ#
ãäå ãäÿ äÁ`Á`œÃ`è Á]Ä`áÁ]Ê­\É:•å˜ùåùÙ#
å
2026-01-24 22:59:20 +00:00
ëæñìñ§óñô²û ùÚ#
þùà#
øù³%g
MÓ!í¦Wîkïí~ðñCñîïíñð½õ¤ Îõ£ ¢ ¨Â˜ Ý%
­í¾%
˜ùÊ%
ÍíªùÈ„ ÿœÀŸ,ÏÆ(Û€ùå%
äÿò ò


!
%
(
#
&
2026-01-24 22:59:20 +00:00
øù©&"
ù¬&
æç æäÿ çäÿìù¯&
ì
òæñìñ§óñô²û ù°&
î ¶&
øù¨'Y
MÓ!ô¦Wõköí~÷ñCøõ÷øöô½õN ÎõM L ¨ÂB Ë'
Ïïù³'
˜ù¸'
ëïªù“‡ ÿœÁ¢,ÏÆ(Û€ùÓ'
äÿ ¹ ½ À Ä Ç Â Å ˆŠøùŽ(i
MÓ!ú¦Wûküí~ýñCþýþüúû½õ^ Îõ] \ ¨ÂR ¹(
Þð™(
˜ù¦(
þðªùʈ ÿœ©¤,ÏÆ(Û€ùÁ(
äÿÿËÿÑ Ô Ø Û ß â Ý à øù†)B
‰)
èé èäÿ éäÿ­þùù•)
ù
ÿæñìñ§óñô²û ù–)
î œ)
øù­*[
MÓ!¦Wkƒí~ñCƒ½õ
Îõ ¨Âþ
Ñ*
‚óù¸*
˜ù¾*
2026-01-24 22:59:20 +00:00
žóªù—‹ ÿœ¬§,ÏÆ(Û€ùÙ*
äÿÄ}ŽŒøù˜+2
ù+
êë êäÿ ëäÿñþùŸ+

æñìñ§óñô²û ù +
î ¦+
øùý-æ
2026-01-24 22:59:20 +00:00
M Ó!ˆ¦WkŠí~莌òŽÒ“Ž£™ñC ŒˆŽŠ½õ÷Îõöõ¨Â뀽ÙV
½ãV
2026-01-24 22:59:20 +00:00
 ½íV
©â©÷V
©â .
˜ùÿ.
ªù
ÿœÏÆ­Ýþæñù¨/
2026-01-24 22:59:20 +00:00
­ãþìñ­éþ§ó(­©ñô:a ‚€ùÒ/
ž¯²µéìðó÷úõø #!øùú/I
Àùý/
ì ìž
2026-01-24 22:59:20 +00:00
¢ š š ¢
 
ù™0
©âÇåù–0
©âÂåÐù£0
íîÂå í
î—ã¨ù¨0
íîÂ彿Çåù¼0
 æñìñ§óñôÝþãþéþ© ‚ÇåÂå ùš0
ù 0
¸°²øùÖ1%
ùÙ1
ï ïž ùì1

 æñìñ§óñôÝþãþéþ© ‚ ùí1
¾øù¯4.
 ù²4
ðñ ðž ñ—ã ùÇ4
2026-01-24 22:59:20 +00:00

 æñìñ§óñôÝþãþéþ© ‚ ùÈ4
·…ùÎ4
qøù”<õ
M
¨Ó!š¦Wkœí~莞òŽŸÒ“ £™¡ñC¢ 
œŸ¢ žš¡ ª”Áº”À𼿪⹃¾©â®‚ܩⴂä©âº‚ì©âÀ‚ë©â¿ƒ±<
ý”˜=

Ó½Ó¹ƒ
®‚¨›ü€ùÉ=

´‚¨¡ü
º‚¨Òÿ2
À‚¨¹ƒIa¿ƒ€ùù=
2026-01-24 22:59:20 +00:00
¬‚£
£ù™<
àãçêîñìï  ),øù˜>6
2026-01-24 22:59:20 +00:00
>
 ¨Í‚¬‚˜
˜
2026-01-24 22:59:20 +00:00
£
¨›ü¡üÒÿ¹ƒ®‚´‚º‚À‚¿ƒî ¥>
ø‚ë Ù
¡§
2026-01-24 22:59:20 +00:00
«
LVarULE type for tuples with 5 elements. See module docs for more informationÁšïøƒ­
`
ø‚¥
i
NdŽW
Ó!¥¦W¦k§í~¨—B©ñCª§¥©ª¨¦½õ ¡W
2026-01-24 22:59:20 +00:00
Îõ «W
 µW
¨Â ¿W
2026-01-24 22:59:20 +00:00
ªâÍö ÉW
ê”ø‚Œ "
Ï•€‚
̃ŠÛƒÁäw«¬­®¯°egjloqtvpru0Œ
Ïʘ‚À
£W
¤¤éö ­W
¤¤©÷8 ·W
¤¤ëšR ÁW
2026-01-24 22:59:20 +00:00
¤¤ŸÄl ËW
¤¤ŠÁ¯Ñ{·Ë…YÚÍöø‚#
2026-01-24 22:59:20 +00:00
(
¤¤à
à
á
åjä
ìç ¹ƒ}@e`ýħü œW
ø‚ÎM
NÓ!³¦W´kµí~—B·ñC¸´¸·³µ ½õCÎõBA¨Â@ò6ê”0‚ì
˜ù0Ù
2026-01-24 22:59:20 +00:00
ªù
ÿœÏÆÓÍö$Ï•€‚ô
̃¹º»¼½³º½ÁÄÈËÆÉ˜š¸‚
¡¿
Ã
‘ù‘ùø„Å*
ø‚½3
ò ò̃ òæñ²
²
2026-01-24 22:59:20 +00:00
¹æñìñ§óñôÍö§üŒ
®¡ª¬¦»ú»úø…Å*
¢ó ó̃ óìñ²²
ºæñìñ§óñôÍö§üC¡@C>ŸŸŸŸø†Å*
;ô ỗ ô§ó²7²
»æñìñ§óñôÍö§ü4ß¡ÜßÚ¢Ê¢Êø‡Å*
×õ õ̃ õñô²Ó²
2026-01-24 22:59:20 +00:00
¼æñìñ§óñôÍö§üÐ{¡x{vGet field 4of this tupleÁ‰üøˆÅ*
Šö ö̃ öÍö²²
½æñìñ§óñôÍö§üƒø‚ª_