purecrypto 0.6.21

A pure-Rust cryptography toolkit with no foreign-code dependencies, from constant-time primitives up to keys, X.509 and TLS.
Documentation
1
2
70cefb9aed5b68e018b079da8284b9d5cad5499ed9c265ff73588005d85c225c d2fd03f3a1b7f635af9f34d580a98f524c735bd5ba2355dc6e035bd21765580cbb111923f194a7cc8a7bb2ebc5c0e71aa637cc800e6103b850a539b2a39e1b6d713e5db8314c9ae1f8bf8a38f06afb9d73b161b0ffe3a4891706ae26d54ffb496df8dc0f1983509500c9abbd28e59b3fcdabbdadabd45ec31499378bde849e7c1f19b7044d67e05106d7136d95380d5605d4465d877557065df0a75d3c28542f40feed42ec7e280637b083d988bca5f6394e02396c4676184fb63318dafaf5bbdde00e308fe84019c2340a3f3e1c0865624970711283356ae14bd6b94d1c9ae188de1a8a2ca824a8eae2fe6afb38d83a2d99996ab21fe3e84c0be6b6da08879b677374fa7c691b13d40fa9d4cc26b2288d5a8c9a43724381004d61b0d57ff400314c8e30ee796af10f7ee21bf13d08180465abc72eddb080c6a07184e3eedc47c19aa7f09d1f3309e183a2bd9b0573dde474a81ba4f78d0c523d0c04f90060fd571a35c037e079c5e210d7390df568f2e2f03ce44420c82f3fe69eb9b48ee90962d6b0f24440648f71edb241ee6566fc1a64cabf66be6fecbcb1387c82a7bc202d9e367998e2a291af0cd1570677fe8d63a3285a2ea6eb29af9dc1aec1c36c4706b12baa20839692f286a6e0321468f7479345c4d52fbdb2f06725b554b89e2492612681acebc6c7bada9225818dbc35d64c22c48bff80a730d0716dfac99dfd5b8992611d0c93ee90bdb260022afe25d913e06effb59cb1f8a60cbfa5ab2f459a16f467e989525e0a37ebe56e833fde55db9d1530adcf45846df281e47caa1e0a27efde2107d354cea0f6a454692f04cd838ebdd46e191e5d9c11839a2c3f488a4fc7cd265a7b5d32b08cbdbfab9d2ccd76222c8ee37ddcbd2aa063ed861473a6454caea377850b1a2b9ddbbcb374fab5b12f351c8e5888872e5cd1f60a4fae1ff837d192c22beb41ee6fa392fcdf4550ff46b5ce906d017ef3077df132300d8bbfa9bb03c75e79e2f04c284ad06a44399649c3e2a2a8d1efe9b7a4e0c271047ab75908bff7df9e30eca547745bae23a86ff9a8b58c2538b88b866401076902dc5f0bd761687b49eafe36d350cbedfdd36c121cf23786bfcf7e47076496eab6bbda774049c2ebabe2de99c4c24f2db73684015b373977496760cf9ac23d8b623133db2de10d73fa6ad1c6dac8434f28c6e251ce7293cff3f3b61efcb5a435123670f29846a13df3ee712604461f1bab8f4ebc836de058978ae734396a98081b35cc98188a86949c99270d4709854c5b35b17f48a373134c814cc8a0f3e2fa807f2a918530907864778282d75e03a41b2504eed816a417a3ac6ba16080c39b7310192002a728f7f20395009a9e16767ce1971f5de7d229a50613369e4382045a8e81901f4dba8102f3d413fe35b326a874f233b719a7137600d35d33aeb6b7259624083aa968730c8f78292ad28f14eeabe660835984fe69ef23dec8c327c0eb0b882d587e1ec433da85c9fd1e0a34994dea240c854452d18c30f496e49ec904b602e0f5062edcda03280a53b4313574cc2c0d5471bc9613bdfd6641f5bd127bab5b5eb3d499a33114048220e819f8ee12ca922c8f17d9c9f51ad5bd6883b10e6aa2483ba49dc547da7686151344f4e9099b38e430b5226b059832cf03db48fb02dba4e61593dc4576360491890e53ec0e6ac73cf32b25d823b38456e286505a541e5aeee96b1914f5f76687ce2b0160227abed77993594bcd831366206d75714082f1c46f1f4439ac81a57af31c81c555307a070ffa94e0479b784bbd88a60cd4c7cfd94e6afe02f6b21f72af0dcd6609d40c965c14e5f2389183e53de930f7de1d44215cf49144844e8b87f78a7f132aefe22be80b4e3a05ee3a68ccf609ef44047402e4493046e6f9c767ff8a75e28b3ce077fde7e7eed313b5bf7e460127ca8182e9bc794c0dfa730fb920080575a751b5caec85a109b4422ba266743f0d032bda8f1ca6248cdb917530df1302a5f8c18dc642d52478c98c12a3f16ef2b62b4f59ea1bb58de7b65b3c7153ce6da5e4950746f80e087a0e3586d097791bf36def865d68591d39d0903773eea962147f34704138b54df7924cdd8c333db5e1a409ccb2b34e2c3c8c7fdd3fd8d012cbf382aaa85e83a12f235a2d147d035b7b28b34b6f57949f322482a7d4d3b15045c420d5addc7f0e69b4dc1cba58b01d872480b06a260d827d891b13c4c5ca50c748de3c771be61e9aa170165cb01f4bf5da27a7791d3ad3f6267b4cb4e61b28fa1708418d932dfc4161880c5d3b17a9663a9061fa8f1804315850fe4e7306c882b38227e867f80872cdc1944d472615ea4900ef7d270b881d4130f56c5cc980d92a47ada6657eb6f37a385d2d8cc993e1442eb05281853636991e34aadc68954d04e7adef76bf880f059b0cbb55d915a4b123e2f1339a073cbfbc409beff6400ae096d5ae18ec42cffad5b4980fa35bf03413adb5d7e6876ac355d1c9ed70ca2b973954d12b3cdd76ac6835db96003ed8c4e288b71fd77dbaa7635720e12ae0a317de808c664e317f55275791f3245ca4fe5d4d41077fc150a6e403d5a208e46eadbe8f2cfb8af472f4a0ceac015219478e6b86c958cf86525b7485c1734c7ef00e90683fff5dbd0a7d413a855021026a1b32013a4616cbcd3700acbc705be3efba625c69a025267bce9d135e3f5b5cc8c43956407e84b6663103e29c242035551ae797f56c6374be0c798c0cf398f1ed d2fd03f3a1b7f635af9f34d580a98f524c735bd5ba2355dc6e035bd21765580ce38d1c14f6467c35a9f380d27de61f7c75031569ea2ec8260eee9105261b7fe160c91344b0c6764c204e5b8d424650bec06b9e2e625af07e23f4950ca24fb4d6ec2c8b3a717c9311eb87279fe25e311f48b8256501f6463412b50dbc89a869ba2241112648400738730212442544575483725033356258423201621183610245665648356120845260685045655512724747212125402221428117650306426152134325243382121135623332074786223150837084264345645148311486246686743371366726014707721161588558387183806701657870647785600288534846622583548804744012574371077544387121142208887223588746148553716773822822741403577328718380781434875207647401607561060861322146156542670820841073130361028650452612166833552584735354526517106000385777812426804146432667410603554128333725230677821516317300087526584634638808846451112405321011181864782241003855754210468343733880078343787413576232688065864853483551585074460588700772013100875488142084166115605685115808058863018286131417220168171786585310622852822615043142885431780580115045688233663636406515244767064536422686750635413347851217808387655142313887566205174085281417213812608124414575018287101002132557042172427861117005304772132030216744315771455710541665741524024371512055116783678252533566424613702232740007068187175780286801721004275522864253158176308640831143305382735303723568704541157314123164326663562151508210302338172127102314227577283771627506887214187313030150715862866288868603270146172271385381703388681378810486573016523140830756821032312850065081630675766511601417121255564811411328826207476424482324775326081758115637483551478685666681732021367522746683445700666477204722285687124702480702542301257137367536005268153335820613732408717615224260185343116457761761566876606554781033631421832160155580423842031312343625273082812547513544126735001001838574424013036127812626811887435120627127515610222281118141666638208675561240065461127440345858781007852572885722222550840041260836462878467805022820771360751443687864313877737355412700540708286880045383432281006435486766501775761275438162403343453887216614704841431466587845820225457315213203024880801371255432720568652468040616835054533737272220680825508472867422361680075518121784448115645071105815511010471621075861187800527264521743234076486730776364875131638468745363842354661048363385214842038251103357468016433402070353221275733465833387438517503660880258758088316360182132261568741110331413053416726535501334808710264868845271442358803557705484287055888683862521827261177885176773005771117851106563570287401340012653451205467518807033356622620070232687726311133333814170622861514731302546511761580741613737061400548877756777665316726666887643583104875706764700436358605203442736486123721610624208608323540355557300610365342714158662558016531018261135468246132583477050060156021168545303687336418886334252015833423288568177555148481201581385041471835707545554552827313602123268321382587028585344867273428418220883610214161712415748852510260736761266172132360325411011226660161632642605186351585131425384566627833354507646508025434157357825430282384745701567517747803152750000947bca93c27d584e2c66eac9c7640c1ca217eef66dabbcb260b4c34300fa051357820f57392544982fd11057de233e6d2dd84972a7e47d4dba99bc30cf8f2ad5a2c0243195ed2730ffa92d227d153095972d4b3447ffac45a23eb41cbc87cdd1250a8a478b0f7a1d5b39aa2206e48645584fe7bf7a13168f482765e57bb924ac6d9a11369f4a6affcd169b7d75129b35d5134a31761bb8355aeeed27e201a06313013e307a01a73aea7955c0578c8c5e5a1a2d2fa4593facd904c62040bdb9f329933536bf8d81c4256baae8723fd4dc66bb5e7f9ca49031a193ececbb5dc390ec6d5513c79a052b3fd43612fb7375315d8091f79bab1318f17854561bc93ae0e5cd6d131e562c8114810c939ae563aa10b47ce4484317f34abd02d0ccad58dd29bcf657bbd9254b01ca9726091938ed32054b37dd617240f4434c1a4a8711aa3a399a8a5388330b7059eccbb6b1b9cf7187adf10b0c9171d3c0f6e2d460a419247672e3b9fea2c95910bf2fb6a5d61f257453b07afb64b0ba2758bcd735751f2d53515e236fe8a5b4393b80bf06df97bdc6380087e6aa8dde6e098111a7343fcdd1e903708e637ebf28323cda6b9405810edcfb3691149ecf224c50f8df92a94aa4770a0e91466194bb0e27bf1cabf16adfd351220033f76f5925557bcf9634e9461359621d80b4bbad7e2a6e432dc43b126ca42ab88aa88f0a84af58029c99a0248f0c454071f35b831fed1254d6f4e2720485786215f7c7f0c4ed15fa853cd3aa07259b39240a82135c2923a72b876fabb3f0f2c09613de39d459a07c14e7ba437d8041491fcec1433404bad1da9ee9471e17cb691b2a353710c9ffa4e5178112027764eb7de809c3e1f1fa4178a5d4dc9ee27857eff26b91711fc144d5a775b8b50d5db939ba3207680c242fc821947f934c8daee203563d28606be624a32901932dae85712af6c8016026927e9b8129574be3cb1e95332b052707ac8aa8f435e88b7e568d4987c6ac0e902b0609a02d91b3f5fd3fd901ddd0db9873bd7c71ed921d4577a78c4fcc9bf075203d38f5e76e74f277484e057b6189004131b0c9b1a155294d1cd3d5208e266901d7d314facce7e2aa584583a11e4d7c21b94a32e508eddbbd7a65aa86b4fdfa6bc285d4cff53926c7173fbe1f89cc303234b878c6b8101f58ac8d3e5e1bf5ab6b26297cc97b95954aabdb25be008a3f47e56487b00d3deda890d92c83957feac6b8291af65959e1d1fca3bd196e9fc9e67e0607094822e5b4191db96824b9f03f2ef57f5238ba7e1e84ed55b7dff3d6c2c1273692a9a19272166130db89fc67dc94db614e3e82ba3a3512b012d51fb486b5a3150b78e724e2a12de07d8671fba2da7fd5d147208fc3af653e6520fc40871af2177e65cbd0eaf304217b367a665f224caedfe93006ac1e14bcd67a88d171f3d8f3e358a71926ba3e5c239a531263ec9437bf2a033b8b55b2c0cb6e7e97316e22df77cad910d20eece1c50910a5cc32adab09377550f92d5bb1f4c07f4a2822338e2cff5348df77cf8ef8e6657ded1e0ce058e3ccfbf39b3f166e303d33c3556c9ac8ecb3df7c74ab36d0f2794441ba9808827b578fb5c29e494e21539ad3ab2b41bf161d7f69589d4524c54c89b486f75d252f541cc63b9e706d64a1289a2306c595363cb6fbef0a1b5b17ab5b1794bf27036f64eaf0bd430dd58d80010ccdada4a5a3a1e41a6fbf129d73779a37ae5c8d6841a9993c51e364e04fac8e25a4e6872f6c860fa265c1c4426ad9c21d26da8c278546adcd831f2b8b26d4e1f670623d95c8362da662d1ff0ab687503f328de095810ede12b49ead1533519558c1e940b46e4edb027be9da2039b25dcf7357e19e5416ae268c14fb3a8babcb3d23f70cc9d59681c5d833ac22e653d86e22ce822540755d8d243c15213d076c6b26436ddc07c7e001347b0cb8783dfefedf275fec4792686734007f0ff8540811c2afe6ca151420532fa5526a1074c3d789f2932de42e3acfbf94760f426d96cf033fa49e2f458f9a9c2e71dacfe009dd9c3f3c8ab3282d6f383b981c82d6364f0e4bdb2af6a95ba61f474150cad7233f8903df972dbb0328c0cb9d0ccbef883d2e6add180eca1b662fc1d2dbbddb3634219e1eff38b1e52875356c03eade942055f483504bbbcb4302a417cf6d328ed793b1a3c0969b7b3418f50ab39f83c5666c90e38356f7f9d494a6dcb63d67c34e3d14a4e15596497926c8568d8ec3dbd9c2e82c385bcfb8d9674863bd4fbf1757db447bf804ae950147c91fbf9aa17891044ccaa73b45528597462ced751d015ebba9e2b7cdcbe6dc05aa9eae0c86848a3475bb1c5744f5903ee4a842a469cc181271f245ad70d02a4837863b296b4adb4e8d03d82b64aa11dd31cdf21edf1dfe3276c4dbc877e35b15fb2835ec3a1c453168a38ca8e563cf3e9a00736cd5cfbd2841d10f94ad55799c2927e5461b28bac5174d0ce3f8f7cd7609fbc8da0c38cc21695cedad12f8d2e64951a8996e510d6d52797c5ba0eb4afa6bf2cc43da09de3179e899bd7188b32a98a499d372f3707ced479b0981cb50c0c0539cf7e3100b720e466652a4f499c2ba3a17f5232268730b962bc572c0de96e8c9e28f7e3532c2224196aa9e27688dd050d7cb7854fb3c35f9c62efb10da84833f29bb1be5ef3b533638eef743d8119ddc290bdf08b6f0f9e4e1e13446c53ed69805da26908a15df1c48e009ec1253bd5a5898ebb5121cc24904c8b10e24e680e565985076fda11d13ffdfa4db28ac9f0aea2f81fd7ed4dca8d3b2e3848b4d6046f6e0de3a4f683f25e0605e84b36f483c404ef899cb3fccbe8cb2a6f0a7e10b1948cd4f93f181555f661d31d426808bbf9f66fd60d649269ca3fe991b22428c37ad2a08680f747cc0360ccd373dc6a9f43a66470e014e72b3d8c38e020442d8aab974e6049374145b04cb7f3044aac1efdab2a18bb464d4f2f2d8143974c95eee856d59ec00288ed43ff5cc8803006c995514a2cc9ca622b61bcd75ec51c202a917105b4a4bed1b80146831dced07efd2ed25739f54096911b150d3077ccd731a0361682725d53803f8fceaa83919291edb4493ec84cce1d0f82a679236ead1002ae8018cac9fdbd246ff093d803c0de3326a57907b0dd6b01d081458c75728c600829928890a56aaafefcf7423b70a6d86b415b8358dd044abee00b9c9795fc8f61a64686df5f876a8f33061599ae830f7eb4c4bff875f4a936c403c5d160de5d33caee40fb718dda4478ac6f51c59c2155254bd77671118411e2609d000306fc9507004a31e8957ea40c2564b83c3abb71a87c11bd18d7891c449dbbe79b4a4fb048307ce0e812b2c68ecab77fd1111526ab0817306cebcb0497c552431ce15e4ab52283f679480d69ddde1f2579cfdbe0bca95fc5b2db0c5cc76a31950f5116aae5f02d46710e4257a75fdedf2f47ce37c203e7f24d3c9179713c5d807c296149a75ccb444f0c6f6abdd2dbb2985fe267482858a1e
4b4b71c5a1bc1074f2167a1d68729cdb9e16aba3651ff02a0a0f4c883caac827 f8d4945a92ce46dd24d751da02f068482c69b0dbf0501634c4a247e1ecf98b270474c81aa0d8f45c0e8b5d02751e797d101904586782ea09f4e3a567c2bf5146dfbe766bcf8d0e4ef46016c6ed7b167490fd2f8e9c53cb42660331b1b62810d21477f5c9301d6d054fb076e77f35c1942aae874669e0957a031223861eb563ad723781105567445b5422b179e4828a4306079c4d42b793a1358b05d02d4565e4afa2d1cd32b6e7a4224d3a86e8ab79e1dc33a11d99411636f939c3ad0d39351cd057fc6bdb32eca7427ca0842f70b416db14518796f68c66e3cd04720da02b32a3430e0e027f48974602ebaaed0f1fb5763a914cd6db7c4ecdfbe076b0348da1ae1f67c63eaca5dd8c27ad54900779952239539dfea22be70d54661bfd973d1342f71f6a97ce798efff852fd789da56c867c1fd2317c8174ca0e0787de99f77d264655a36b1d8589b4c4c1743e742c31ad19539cbf8366ec188dd606392d727a53c3bc4111ce2cd330fa0e484f19324aa5fd577dbb055a3ba6f2e964371c0d4b9150e4eb9155db871b6a3f321db2b3eb9e679adca62ea6f7db5c4471f470d42d6c161cc1a43870e7bf845cfa696d71629c21d53a4de22ae73c39837222077abd8a1afdfab6b4dc5a2d68baf6ec95621bafe7257071a62f07848180fe4bdc29ce7caf2911564be1db7da45ee58852d0457456d19979ce66f3821c30539965e4c3a1691dcbb4ad0e7aa133185d2486860d4a5fbd260585241772b5976eb449a72494637db59cef54567f7fed5b0ed618c9527c28c38ba362621cceda11a00debb824d31c7d5b3599077b9ff736c3245f1f3dcca6d8d74ba96b195b51cdc1c68e29e5ead59cdadf5a05b924b2a790f80cfd8b8b17ae1fad36adfd77b078c5a535a5293696c7259ab0305c589b2986b6a841f21cf8686d6b186ea538c29c7654a6ad74daedce943627bf5d497cd7611ddd900efebe11f9e611f416b0694b621d4ee741cf21759c92ba8bfac90ed9d274a9eed59774cabde532d7644d048b83ca97bfdaef30f0b2400a1bb647c7bc9e60f57451915a0b531e29d21c2007aaec522f4129a7c251d7fffab20bcd5b0563ed78814a3b2047a375dd9a919a3e8faa0edff63e0307ec9cd14fab372e965324cbf541d99eb498cd093b188b1cb79dd6adacc1c9e306483be70c1bddd1f67b0b86daf8fd905f7bb6239138a73300c58ee30b6d48244803a5ffa9936b0a06b16eeb2a880ff2fbdda1a0813006c96ed0b6a30b5d10528cf5afd45beaa82369bd8254a1a7250048252eeea523dcec9fff069006b2f9a8653103d47ecf79bdad2572a11871c018646505164837dcf91c2e22cc55b344990bdff2d50363fe34a19c5cb46cf0c193175248ec50978f2cee4e83ed2b7bbfde4471859017d3418cf3d3822bccea6b8d30cf11ff008569d9f0bf462ce6d73f8c119e3d3ab30a68d467cc60a907661fa1dd47ff3977847be38abadd7d4b4e1b127eaa131bf3b0b1fafc57165b69a48500753b9dc141b9819ccd9b4cacfbdfe4e05ca5cdfea912602cff1ee04fd2914780e713176ab4383f3cedaf2c0b5e6b640d3b5905ec8ea9630bd3672a18135701e4140627e98f1bdc78b05d9f2224c59ab3951a0653e6729b7b4bb0035fc964c15086fce0c6ad85155b940c1aa13428f1e6c20ff95661d283f2abe3d43c072b169d68c740e67e3cd9d44d80bbf1d455204d3b56f06d9cd266a2a928c918f737a9e475be20f26d97a3c0b7194d6043cabcb8bd14bb4bfa94d13c0d9bdd4e6b062d4685d22f3dd7a2ea64fab53a0e06e0e425fd487e333ac6669017492ac45fbb9e2313f6bcbc6e484a5965e9412fabad6a6fd03675ce1c70158b33e17cd18fb44392f06753d565fbab2d4cb09a85edc20c9c12276557b03dc41b7042a0d7fcb5d236bec4b907f6fcfac62c3a07bd92ea85740f1a501591fb8d930a527fcaca427a61256f6591dc1f3cbaf19cf3f9b5ab5aaec97a95bd5d9056f5e463bd86ee03d1cd5a14312dccc3345958de85488d1db2c54d3393b8bbf90c1411a9a8b3bcf9a13305fc5af52818fcc4039d5c8c6ed87d8c01a089982ecb6feb7ad09a79603aceed01cf453b4620cd36e73b76b91924d9be973c8ba8b5b360998a182f9a4fef5563a0c5505b18110723a268ca4543039979231fb082a639658b9f5468e1bd16f96a158e0f39a160109a7cf244cad177b2b1f41806279296e7d6622425b75a1320e7e3ceb2debd1f739b29a8a3bef23d5dd2712a82e320450aacd8e9eee78a7d019aa09e42cd9923702086829308adf09c0d0a88b58b2f7c4534f75631af1a5b0b68552f402481f9a96b6a6a0a14e93e2772ec72d286aaf2cc9ec6450e80f42673a2dfd25c0e0d5831da8abd631966dc0688c38d602aafe8bbab8ff5fb9003bfe2e45a74a1261598af634f896cd8f4c04c5faa6442a788121ce8163a085b4e66308ff572cf005e960c8a21a82552ae6dd1addfe08ca37b82dfff782609f03dc16e0b862398c9fa09dfa4d35510f4ba7e77c0233cf923e4792fad9c5d7a05fa174438537740ec822b2670bf1f244280a5a7080b21ced5646f5077cb39f23555a112fa1e1458bc45c491d5092b763ab7d291b8c07bbea2e39982ca19dff6e4eef17557e8ef101d808ffb6ed73daeceb77c4cfa2e391cea50f1a75801c2d34407aaac4b5138b4632a710a40f39ba7ed36454e0b054e00bafc027d01303273dd2289e7666d98c3b602cfad31b7680e6b1572 f8d4945a92ce46dd24d751da02f068482c69b0dbf0501634c4a247e1ecf98b27b870452948d3fd91dfabba184b7778e2223c610196918c5ac471ffe27c45c216906a32e421ba0c8eb43bde774c8151020bb33e6dd3ccb67e07ff1508a591c40f29c4f4e03c0761dafaa6c4e4d7515d3d044f7e5d9b6f76c3523f07b86b966bc2050273654131572050232540265501410321121824027783508650550741845227675205140764772006807238701150672363522380823186775485346122741232101846044762034061346508846856004508217531847506553422270003465001318843366570722341256676412710345762503442766148802031700065838665810155802123526425443477780225517686668627385732838374183830578328430875075738806006057215372237255330206645686206532007402436187730431525465867647825811554786647043104375540063472868467521138444506855840850622072745156652883730438734305732524737387063014705036441133615604518408815122131125202504810267182170514218811002085201254838156820201088584847214346753735887361787368723385680274880675716073083468858754024781441460451718621650764072470876430018540463314037653043260254403334013420554376741651526887384367232437772872571236432846113158844048402448026234443446356631655624571084504437148135030305335563616217056075630605830233420552628432373442580105268442188606664005688153573261574404273251112701374300315715427425557365723036707713333154501238558575528577180345582234204444027511078611230842318434676756513328416871728302630727767221615188778420705148760282006015420340813653580172668162025543061257714607056886527838253463775286557467874302385541175163873125403136883123024782644056005776454050450463856458231030266773238561883245373725805362358236861886558048054373517006153723263352805784612747766872528551515675467320836133213785558662842164780507124010780705382731865322261671658563251820625605486727154222632331845371780377110620406316868745534211605053684662067164782272500355338031585232841457166288521403104854878437265654262373837268281560786012704588254043617732675622047062353066104016602755704578677260376636082632526506057173816361868253348168171755151062823522066020418818632307513542804243556317063765822868038468506613448543036820231730106212347485234367884828616827033357121850832050360848747865116708334325478114764064545882530235517784101378158280387668200424153038757453662564868561401622005841426338428326845853813752150205647048731768316114171432031210530176405308626212315625877622410617144857321075301351544462610553051243543667566675865335022131344837646363774338358017020828322812301042686502414653278867536671246033825211786357550517555870412326345585188457210000315518722276643085112001162624655523063655320741885067301234547663482785273242871867433610317833314257358238168035870421442233173234774652833582072540045143452135211450447284405865524301678168533008608553068110010402510031273465112253237686727627477608688360860655175382170833104267041778753258183846702848155552758183213003518102058824468267721170670211086383333614167717873621734000234476376137205763060645015200727731656541667312526120835206388554240354487387761200858280506664805026810157822733523020574251831872646604616365770712618804337567105781aa2bbe68aee92ffd1be88d01dd90ebc8d1a9f5da65fb482fa23e92a0bffab2416637956b1a4f7d0e392b910710069fd0e18eb26e6ca741ed0915fc9fce0c0ebcca45c7be24649829b0ac3a43c4cc2e4ccecc827fd3191515df2a120359341577baf0bc05f8358d518a57ed3033a73b8230e8b23f627f6145afb0ed0742146c61a21aa6ce40ac75928f007f39e2696383fa48c75694f106e623b6f41e070d0e985e9d542ba2b5f53a47b00cb6472f9d03c3dbdd1c113b08128105f6fcb281c302c0410c32234e0e9f279ae96f3ceb0b0a490443a8cd46bde80aef7b1bf7df48f98215b2f556d0eb916695417dd643c93ad1d703cb238418c6199f7fb4936cab6490072a245577fecafa7507a2abbf3e2d185d9dca22ceaa93662168f43ece8421b7a9a5a2226227f22bb497615426881eb9bafaeb7e14a177ac6102425791a1511fa9bcf2b3e453ca701d0c8ac45714541a0478353173a6ee57078f1059517910bcccf0c9842483cc8e5d35166ac13bdd7d9c760819752ac40cc61528f4a93749bf5711216101cb0ec79b6e0bb92d4f9042da176e6c175ea1b2738b7a6355551af4c11aeb5ba92ecdf28e521e1730598e480a6ec130c65388fafaf5bd3f43f566d0206a6ceffdc01aefbf52b46bccabce80af453d1ce840b3157d4b1d15ddbf0e864939a5c411b471a9077e5785ed9928ee1c05e0bae9d4fb8c9b0b7a814a23784b04f63bb5a533aef4c186217a24302e706af88d4f9e85b71ce427d19c149e01ac698ebbe6b5cea2e3a43df2976cebea3c96424d2fda27dc3dcd7a36990ce7b9547f247039e83194e34b3dcd90d65d3641ad5b90c4114d0441fa46fac16a9f0691b36b39012f2361ee0b87c23fc454b21205ae0d7e6d9c162061924c2513c369ca744dd2ddcf9c0c314413d4898311080757309d5aad1a3761a3223b60f66b0e392f821597a011188bf35b25002c298f01d6a5463d3176e1c7fd0ff1a70e112adf9230e9fcc9c423e310e67c35860a09cc4d3dfc4ec0b16af467373faa59d0e326d82b6054382476a1d47cefd2709ec829e3b29ae0c09e6b41dd540cec37f0032c949b9298ade79306e376c6184fbf7440c14d217b1a557886ca79af8625dcb9142126a70fad6f813f3a5625f2e138e625d38b399e20ad05d682552180feee5c1e370f2b6e6d5720ad313b98bfd466468c727dc1f2f1cd141dc7cce3592a46fb3c63302932b832f309ae30e6714ab952ab84d76a59306d05e1251171f8c7f8b7b2abed123d47428741a8583ee5b8e973950b4f5c754da4679f3a06eb18115c3049de8e232afb65747c0aeeaf5716fe5b89ad6ace90f8cc4e137a8d9c65cc3a98c7fbaed0e7451a8f623890538da9a7b821d8cd9f49a1aac810eddd7ee00aa8cf342f0491a50e617dcd535242d54f0ee8392d1b8bf7d69c81fa335fdf4ae163a1bb7024ee883dbff9a1ce154f4316d6063dc7283f151c4ecf5a9e8d1c25d0238cab9a925788fff6bd68519713694b231a07e826cfb6f3910428e3219116782e07e132228b558cd380591866c028e1f3bd2327bf7c61fcacac8485eb43213c20922252b2931861e077712cbb5701876bcf66faf1cf6582d4f4eb87cf82c1b7807a255e73ded3a7fef23139de96ae800c2922246a54f3f3a6eba2c8e8388dbdb41a4131a69280924f6d7c13952adf9f6131c1d6ae6a3a085f8fd5e4a45c2951a8d65c345cc067b13ca32b1a6c28a6359c48dfc119ff7ae92054169dac29119508f17ffb0bc925e357af70b85c214db0368e1425ac878978c346485cfeeb9935bd94d203e271c2ee9effc63c54b6d05c15eafe0d0d562c458b0c7eb0d84cc123fbc30eaab78b47f9cb11ad7acb54221f56998177d85ebc62deea042e411707fa78c545445372461bf5d4c9e4b5778bde3c9db02f697965d2cd2a10be66aa9dbee728b52a9117c53a5a2d90d59f86d8a601436ca41d4a99e3c2e66261e37a3a5b7d4dd21cdd46eb4c62268520ffbbcaa8bf3de714652cbf83e7e2cd57fef6abf8946392a33d984fe1cb1a08fe5dd088f974499b704d94f0646c7977dcd7a75e8012ca35e39ca7ee7ae1c0c27013a32dee29cd141379da504cff6ed8853959840e829170d2d15a265cd9a8ba48718848473090f40c1bf3dd4159267324bf9858400091fce515d541f6608d395dee9c5f673375e443f104339f444c4819a630232ea7d413cd8a3556e60d7d20ed42e45cbe335aa1ec684cebe7b32c5bf4f68f969932961930247e2a9f279f5c587120879f3f61025d6b6dc617c9fca4ae8034b00c8dfd6797061a36c12979e85f4aa7c9f7e57fae4aa44db1af6306e982a723b6f58e9008b4bcf4a948fb131d08afea9b4bd093ce76f8f6366adf4eba4e31fc5ee6df22e1ff1370c81937d29007a9138904f569b95a38c5de1bf03711c9d41fc0e72744426ec510e600d1231c99c7fcbd91eeaaaad1ee8a27544d0ae7871b4b881d80defe22f3188c250ab8760277be2295157be5f33201233b53e2348661384134e6a9bd89e8f85b2f4e217368fc86161f491413c8959db67aa5d51ded0854fa779ad305e3a6895542cd84da2e8f4739585f7af91dfddcb35f7e8c6f90d1eb810d8abd36334aa02e84a4cb0df03961f5aadc0cfd45a7f59678b06204ce0613f040f3dafcff3d59c56b655a3d3a0359340a0f91ab9ab1a17621a1a57af588c31385d44667e9258e5870756aef7ad2e2b3e3364baec218e0d6be14ea5139fd672755f7942f4bf9e023acf94b1e15c58298e29b958276f0c4f04631d41d99559e7a7483aa39252647d8600d33a4c8624d9a663afa8c927808072a4c6a63b92a76f76a79176261d9050e890d52ca68279af0b09b443c001a4092531bb8e251f7adcabf4e49dd1616f42528cd67283f2c52479d7dff2f383ad7eed58c1621e4dad50ac9c9fa5096adb9eae77b19122aca00d48e967050303c93d90976a3ddd5b3ba4a816cf0019b508db2e65cc47b187c78432e41dc9bae328ec529dc3f6c6be048ca843832ec04348421113a02b60b35ca66132059d4d5ec297e9b92e8aa3130e30daad74ee7e021541f0b3ffa72df618969d18b7c6936242555fff1161d85c033bbb934894825be9271eac5a445363743f81c46315f547995d6925fe76be6b7145d022ad1a015c0b8101fe30a81d363b2bcd627bf178ff12023f1bd82665393a49bfcc5aa1f1c4fa318736a301d00dd5d015a14640b91e104c814056892de7c624240c06a3c5ac14e565fe5fc6170bf315913ca6f5bcbabeb9c110803e12d81ccbef3c48b0dbbec02f8616227ccedce48437d801861964934b149ccf34fdf7d60d29ffb46854ce5f3929ae9b6c051c6825399b9ec10a9bad1586d2e75daac68ba2527b021e3153f419b0ac23a961799f016a37572c91ef790635a1d7b7e7968aa570b5897c6cf03395b5fd2022114ba84df417f8f105810384baa41eef2a5b0c7c3e320237bc67dc36809cee73ac388fc9a0873b2ab63b638ad364f28b1b7d002ef2cf5c