diff --git a/src/bin/nomic.rs b/src/bin/nomic.rs index 31a0ca01..fa43ff3b 100644 --- a/src/bin/nomic.rs +++ b/src/bin/nomic.rs @@ -2964,25 +2964,10 @@ impl RelayEthereumCmd { ._0; dbg!(&dest_str, amount, sender); - let rpc_client = - ethereum::consensus::relayer::RpcClient::new(self.beacon_api_url.clone()); - // TODO: use chain_id in closure without breaking fn coercion - let lc = client.sub(move |app: InnerApp| Ok(app.ethereum.light_client(11155111)?)); - let updates = ethereum::consensus::relayer::get_updates(&lc, &rpc_client).await?; - dbg!(updates.len()); - let block_number = self .config .client() - .query(|app| { - Ok(app - .ethereum - .networks - .get(self.eth_chainid)? - .unwrap() - .light_client - .block_number()) - }) + .query(|app| Ok(app.ethereum.block_number(self.eth_chainid)?)) .await?; log::debug!( @@ -3001,6 +2986,7 @@ impl RelayEthereumCmd { self.config .client() + .with_wallet(crate::wallet()) .call( move |app| { build_call!(app.ethereum.relay_return( diff --git a/src/ethereum/bootstrap/sepolia.json b/src/ethereum/bootstrap/sepolia.json new file mode 100644 index 00000000..b67e7e67 --- /dev/null +++ b/src/ethereum/bootstrap/sepolia.json @@ -0,0 +1,560 @@ +{ + "header": { + "beacon": { + "slot": "6184960", + "proposer_index": "332", + "parent_root": "0x4a55c4a32b62cd4f1ce03586d50c496be4cc3398e7d31ebc18cdf5bdaa66f4f1", + "state_root": "0xcf8881bbdd007aa626d577e2b9bafe4d55b46b9a3fe889ca20a7b9c3d6757a9c", + "body_root": "0x83f3e99e297d3c7b0ad92435a2c6d13b7a26cde6bc4f14b1d9fe56f0325267ab" + }, + "execution": { + "parent_hash": "0x8b78e540567da567ef0140db7a9ef2203a219b3a0fcd21fd0a981278b6872c09", + "fee_recipient": "0x4df6eb2ec570b58cc64f540247a8adfa11f1cf63", + "state_root": "0xebdb8dd0d46705e91648e9a6deb38e04c5bc9c60b3e0bada64b7d9615c618034", + "receipts_root": "0xdff159ec01408341662f07f5137a5b70c406ea0372c8426bbba19186337e17a4", + "logs_bloom": "0x00000000000014000001000100000000000000000000000000008000000080004000000000000001000000000800000000000000000020000000040000200080000000000000000000010008000000000000000000000000000000000000000000022004001000000000000014880000000001040000000000000030000000000000000000000000000000000000000010000200000000000000000000000000020000000000000000000000104000002020000000000080000000000080000001000002000000000000001000000000000000000000000000000000000000000010000000000000000000000000000800010000000000000040000000080000", + "prev_randao": "0x12a2afc73d78b5415596ffc938196be4aae008e42ee6840b99c2822f8a302672", + "block_number": "6950011", + "gas_limit": "30000000", + "gas_used": "2147595", + "timestamp": "1729953120", + "extra_data": "0x", + "base_fee_per_gas": "867790239", + "block_hash": "0xae37b4323fabb1fdd610d1edbad2fe6ece8600b70882698dd66dc24556970595", + "transactions_root": "0xc0d1716e5338f20d5f9570d05aa3905f379948650055905084191cd18c9848ff", + "withdrawals_root": "0xa117e7bbbf2c4eec9ca92cc73db737baf9169e1cfd4b7b86f97741ac6a77be5d", + "blob_gas_used": "131072", + "excess_blob_gas": "1048576" + }, + "execution_branch": [ + "0x50dbcb1fd7c53f50bb3bd1a30640f38eec60300722977902a47779cae66d448c", + "0x7ed7ee7026e0bbb859f509b7a8c35850c2b3cccc8e70201660756e6c0cdd92b8", + "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x6e2ddff45ed837201a8535fe4889ee6b811489d7a6b28f52c38950faf68f2663" + ] + }, + "current_sync_committee": { + "pubkeys": [ + "0x94bbc6b2742d21eff4fae77c720313015dd4bbcc5add8146bf1c4b89e32f6f5df46ca770e1f385fdd29dc5c7b9653361", + "0xb404beebf60026ca6843f2953cfcdee494d495c8e2d18865147102ef29a8f0ee470961d2246fe5a450c622d20ca51d53", + "0x94cbfc4d6cf52cf4b05ab56e5ac07f01fc4f0b85bccff95031778607b895d188ceef194b7ae92a69e5f68e7a5d2278b7", + "0xb1ea1e8ab5dba06c7cf3f30512d2db1b9ac360cf9a639ad7bcde9221012b4f65adb8322bc2ae291b6b19c58eafc73232", + "0xaadc207454f44821b05d607585d5f1998c7f6b2266ad6c6e8fb37a05244913d1ae5a655b63a079c999bd30cc63255b74", + "0x997d3b82e4753f1fc3fc2595cfe25b22ac1956d89c0950767c6b9de20623d310b1d84aaa72ab967ef1ea6d397e13524b", + "0xa4baa3dbcaa9bbdbbea7d3052d739b5dfb248eb910aa246cf494b07292faaf5537dab0971f2cfdaf8c60aea018a51575", + "0x8528cf6ed82d9f729f9aee83c3ef763d85649d46019c4ca7dfb58d7824c2003f88ddb2bc5a40c4d78d86e68b675f4e56", + "0x948a89e9404f0b97c8ff2ddb334cbc3316aa29a94403d79843a619110efdb4873f4588c8930e64bc562e9d19ea32cf5d", + "0x9194bc45e11d7276ed1c9ef3ad5a33d6a27372f5568563ca8ee213e2e7029dee404ab5acbaecaef698129798d35fd895", + "0xb552707ec0d9124dc71f0076e56ca63878473c953663b1b8952e828ea0bd0945f2f410a72d413e9efdf536b4c9e280dd", + "0x907054244ae66504bdf29bd5bd0389d20687264d19d4b36272ef7762c00c1ef7a32e2c5ed04a2cc5f2403ecaca764f20", + "0xa9300a33927335f482dd0e44d0d57704ebeb278f732ae8301073cb7d5e457f02a0cb03268de71d284b8c23fb96947469", + "0x86a533b02ae929f67c301649a2d58651b98cdffe731b63fa32aa1013c271634bbb088c0d02865913c11bbb1bf57c0e12", + "0x8c5a9f6eb0a3ea95e75362b06e5cd23968447a212cf22e1419c984d74432c51d290b717f80e8ed3e76b1232216f99758", + "0x90fc170529bcc0b80c46a53fffd8323fd2cc5cfa9b75ea4d36db21bd1f198335ad2bfa87f8990cf9cd9fd7989ecca718", + "0xa95bec86a7c8417a8df3a0158199327ba0924d3b7dd94cd7c1ef8489b10270ae64b8537ed39cd3699a48942bfc80c35d", + "0x8289b65d6245fde8a768ce48d7c4cc7d861880ff5ff1b110db6b7e1ffbfdc5eadff0b172ba79fd426458811f2b7095eb", + "0xb4f583e10aa9af79b4ebd647e0fffe1c720112727e5ffac4313f236737491fceeee194537786c561cd5777b453e5b03c", + "0xac9f0b44105cf77ad721b97b0f04a37fddb2bb62c345b0d22a29e2870b8964d7484aad30e454c74608ce9901043501a5", + "0xa4c4b96071e7bc92e41defba3507ddf423d93f3a94271b1f9812dfc4660e4c9fd24e0dd7aef324c46deb8d7a7c97eaa4", + "0xb26b4d483bca73d3f3a976bb595a0e40f9a42094e0febbad3a1874934be1939a1b362ee4ea14a4f5cbfa9b1392796a12", + "0x99caf2cbdd4427666fcfb506bb6956772e058150b0638eacd5db2e8869c8565c1ff2c63f308bc3143874e0f31446292e", + "0xa373408beb5e4e0d3ebd5ca3843fe39bb56b77a5d3d2121d4a7a87f9add3ec7376388e9d4b8da0ba69164850cb4b077d", + "0xb586e67ae1826a1cdd651ac785e4b38f8a0e042f103a9b7dbb0035626d5dec3ded04a4e2cc09e63b4b01aebe304e40d7", + "0x9604da21e23c994a0a875ad5e0d279c79210f7a7de5c9699fac4aebbd76d39b703eeec5dd5efc9ad6b9dc58936089ddc", + "0x8ca75fa6fe9a9bd17fc6b09dcaf19bf9f831f35cd70a945451a788baf5b29e363c0eed6316bf9cd18d2e604f3f1e1066", + "0xb409f87f0632aae9bc081345b17a50a767ba4198f9ac9d352246fb3bebd29ed53c9d6f148c2f318c2eb12846b0aac4cb", + "0x89e3ff351ce4f0d43cbb6385bac30b37431b31c7c073bacedbe0a60af3dd372aca672c6c4b4d05d2c4b7a040e80f3ef5", + "0xa35fe9443b05f6632b080d0812e71142dba534b328f7d77e165aa89b370c158be708fed2ab8d8b3c60a3f83d6b1c4fd7", + "0x8ceeec6c85df65d52e3d56efcf95f88b59aa085b61bb026fb228b855f088d9b676ffd5f0ee2ddbae00662b2f9ce770b1", + "0x8633ba9d7e98d07bb1ab1a35927d25172236bebce1504e7f9e9e25e49761e72589e531b8d5a361edb733d69d7d5cc524", + "0xb49379bbb9f954d2ef5574199607bc6b3aa2cc3b48dcc3745cc77406bba2a394929844fec1b87c4ce65cd0ca0f83062d", + "0xb40a3bae2b08c13db00f993db49e2042be99cde3d6f4f03d9991e42297933d6049394c659e31f316fcb081b60461dabf", + "0x8368a0f17c8427beb71dbf11a09a2fe8495a33f08c29c74a9a996a88aa01c0a09f9555abeb1ef1592cab99a9e05875cf", + "0xa0617db822d559764a23c4361e849534d4b411e2cf9e1c4132c1104085175aa5f2ce475a6d1d5cb178056945ca782182", + "0xa07826925f401a7b4222d869bb8794b5714ef2fc66fba2b1170fcac98bed4ba85d976cf9ee268be8a349ae99e17ac075", + "0xa5817c74a394b0359a4376ef7e9e8f7dfa6a7829602da225074fb392b715e1fd52c50cae0f128a7006f28b22f233fbf5", + "0x9831b8c836114f6d8213170dde1e7f48d5113974878ae831fc9b4da03f5ed3636342008228b380fd50d4affe909eb54a", + "0xae36ab11be96f8c8fcfd75382bb7f4727511596bc08c25814d22f2b894952489d08396b458f7884d6b3c0adb69856a6d", + "0x942bee9ee880ac5e2f8ba35518b60890a211974d273b2ae415d34ce842803de7d29a4d26f6ee79c09e910559bdcac6d3", + "0x8302ad0f2234535b55b975c5dd752c8a555d278b85b9e04e83b1db3bb2ae06f082f134d55216b5cacbf80444e1d0af84", + "0x9210be290176d7e8a5005d27e7ed825067b1c678b174bc8180f92b5c03b6c3d1822356edba84f460caf6bf5275cd7efb", + "0xa7d1676816e81a752267d309014de1772b571b109c2901dc7c9810f45417faa18c81965c114be489ed178e54ac3687a1", + "0xaeeedb3c73a9eadef14396a474ca83ca9e3885fd5f2c1018652360481d0be49524de22fc1ea18bb7abca66df5dc7d309", + "0x8b6bc5b51ba51ba6cd8925766b9266c59f5c1af2e029fe5c51d9332cbde1d0399afa967aca5119fafca623ed0f465354", + "0x941cd102228aa81ef99506313a4492a17c506e7169808c6b14dd330164e9e8b71b757cbe6e1bb02184372a8c26f7ad1f", + "0xb075db32979df905cef986cfcd6db823ac21dd4013cecfe088885390ff8acd18d76dec793b80db5f7779426127daed7b", + "0xabd7248ae069d3a3a45b0ef4dd5d7d54b62994e578ea20bdd3b7876596673953b94c5b109a6e4b953b517544b915368f", + "0xa03add7c6987ed1ecd6d57e5b3b13ac9afecc168069f5f076d795d6a57a268a3592d464889cb5aeea64ce2afb3719e2a", + "0x8fd9711c2c4f7af282555989ba43e968da4a6b1143b9a6681a8ac3e52abbf916b8ac9036d7c628432969d2001c9623b2", + "0xb72de0187809aaea904652d81dcabd38295e7988e3b98d5279c1b6d097b05e35ca381d4e32083d2cf24ca73cc8289d2b", + "0x9779ca2759dbed8081f0cbbfffcb3b842ba335e3ae48a60c5e5c77c7a2a0623e4c415ec3a023cc4e216885fcbac3ce52", + "0x80bef6e365eb22a9b910c7e28eef541fb11b3c92c9a24664063ee3f57c4f3ceb7200917ef8c9e6ad87bdd9e633f8bd0a", + "0xa4d4f2e41aa4dd511fb737582118587503ae3e03fa658748709ab639c7e5ebba93f9b179e158b6ceb912323d906c0001", + "0xb1bb33607d10ea8c954064ecb00c1f02b446355ef73763a122f43b9ea42cd5650b54c5c9d1cfa81d4a421d17a0a451aa", + "0xa5bf4aae622b58a37e722c3d1322b402907f10eec372a42c38c027b95f8ceba0b7b6f9b08956b9c3fdfedaa83d57a217", + "0x8b50e4e28539270576a0e8a83f5dedcd1e5369e4cd0be54a8e84069e7c3fdcc85483678429fd63fe2aa12db281012af2", + "0xaafe14dd3b680f096010788226d8413ca628feedad79a2bc78cb04d47c6ad910f7f46ca87b8f8281744625d8f42d5eea", + "0xb518c3490268a23dc86a61b79089340a81461d0dd27299155a11a1d20c541aae79552e6f434cc0268a3965834b9ea14e", + "0xb5f8554b68a95f8986d6aa00943b8a2e60ba34f9aa4f38e872e0c9fb7370e5e2812b197d49bbf8047400bd7bd3ff9a23", + "0xaa103a329b699d4102f948101ce5fae27226419f75d866d235da8956f11367e71db5c0a179dd63007ed53f7eec333aaa", + "0x89d9fb1eded5b0855f66bbb31f192cf63aff013f8400d2d7da90fe764b7ea3c14bb09d632d1b5962c98085258d1277b7", + "0x93ccd8c5f82374e0bef6562e16576f742d79b6f400e3485ef36e148088b61fbd882c3d2bb38ab0b43fa1dac77f31d543", + "0x8eb03001ac9e22c6956a682ed458e650785c36d23ddbcd51ac4d9cc991325c02519ff1958987a08eb29ff56ff6e2c293", + "0x8e2a281e944a28673fb8b47aaa288375cefd3a6be20e453131d85363ecc4fd5b250e7f9d7ca1e53408c54943041945a2", + "0xab0ad421f6fd056687b4fa5e99dff97bd08840b7c4e00435eb9da80e0d7d071a447a22f8e5c1c5e93a9c729e5b875a1e", + "0xa156e24fba7e966105307e89b102106710e2021e694c090decf32012e8794c6a090b27063ee605db40e435bf8b6ebf9f", + "0x973091c0e72354e0df4488c9078d11eec554c8cc84771955595aa1dd7a7a9dc9e29597924678aa20ecefe5be394fd2ae", + "0x8175b420d8d4f052ae7f627490d2255c1481085ac9eecadbb49e00d828d6f93a98afa9695a30e60f35933c75920b3748", + "0x905a97217fae8cfdc4a006b644e91b097df28e02da2f19f77e18f4b0c4aac2538ea83919a722eee5c0ff315a1daf3cc7", + "0x83eb2f58e5d1775a8d92ea9eec121a1917dac431ced3b2e9ef7dd670cf719f82c1d0694b312150ced991114925a4912e", + "0xb0ed68167a67490bd7d7d49e83341606d6e6fdd99b82e46747c2190d270719f81c5f5f8733646c246260f438a695aa3a", + "0x8d7dc174aa361d046cf183dd202cbc12fed780d7053f7047e11af9aded336318bf9928aab73ebfc81ca86f12007077b6", + "0xa606e46771815260be8800e6092dd340ea8630b51bae3962fec369b7dbec61c2ce340fe38bcac51f5ad5b36121e0f975", + "0x93abeaf05f5a6a7e8152367bb556b7760f74e63847539c6d7740e649770c681a67841e8b601a43ae50aaa3512bef06ed", + "0x93ba2e000bdb7269818d390bc4232992d280e69abebe2db2ecb6fcb1390d323238c9793574509bc1fa34051ac1928f07", + "0x949b8b056e465813496fbdd71929cfb506b75a7aca779002c437745f651527387afb84bfaacdd0c2501893a7209b4a5f", + "0x93e4d7740847caeeaca68e0b8f9a81b9475435108861506e3d3ccd3d716e05ced294ac30743eb9f45496acd6438b255d", + "0xa26c326f3b48758157f74993971a1bf0913ae292a4eb4a4653ee53a2a916782466cbcced54c71685668ae0a7ef0e210b", + "0xa90d9502a9785e55c199630456fcb1e794bbeb0f5f8c022e66f238a0789998b126cf9911fd0b7d463b7706dc6f9ec128", + "0x830e70476c6093d8b9c621ddf0468a7890942589cae744300416639a8b3bc59a57a7e1150b8207b6ab83dafcc5b65d3c", + "0xa0bc362946a373566c0fbd0b8bdd62ac76d972c960c0b0d8589304d18252286f7277e3b58229e6aa8a8bbf2ee2d99163", + "0x8ec38c68afdfb6ba019204039c2fb49a35467058f561f626fa87314d705fd615a7b9966576052be1b3690028d3c5c7bc", + "0xb76cb8cb446eb3cb4f682a5cd884f6c93086a8bf626c5b5c557a06499de9c13315618d48a0c5693512a3dc143a799c07", + "0xac2955c1d48354e1f95f1b36e085b9ea9829e8de4f2a3e2418a403cb1286e2599ba00a6b82609dd489eda370218dcf4c", + "0x8cfcdfa192b17321be4e447204e1a49ecaadca70a3b5dd96b0c70ab64d1a927d1f8c11a7e596367e5fa34e2307af86fc", + "0x897f0316496f0c775bf63d546103df711a4b0915c3bf893e22a6837c9585c0e5f2f4740513e0bad4839b76fce3877844", + "0x9332251b4b56579b201a2fd9e777e4be80aa213bc986ed5d1187cada9b225a7ed18f1f5bf68c2839bf330e00b2d63f22", + "0x946948e31311703f64d34dc6faaae992e39b7ced92ecdc01df9761e3819a6db1266be718fdf434fbec912da37d1986f1", + "0x81c3a8c00cfe4e82f3d8cb48de7d4926d5ec2f7689f9cb85c1886a23758bc107a4bc6e978601c3519156a169d0bf6779", + "0xb201b0546f19c5db88df9c684cf55ed623bdb43927d06051bd595497df741feb1485961f64e8d3d1811d9e2e9e1e54ad", + "0x86a06be6d04ec3106869ea5866b07bafcfb0d5b15fb9fa6e01b634c02f9f5f15e2279a7227ac7881344abacc983ea12e", + "0x993726e0b1c2277b97b83c80192e14b67977bf21b6ebcde2bda30261aa1897251cd2e277cfcb6193517f1eb156d2fe86", + "0xa13bf1fc1826b61cceefcc941c5a4865cefdfa6c91e5223308fa6a0aa6e7b13a0499a63edf5d9fff48fdeae83e38dcbf", + "0x8cc5ad6a016bd2bbe7db60e497e83529341815c4301d9f3060d43efbd094dcc6e6ca01470e28d6c89e57d4adf8c2d627", + "0x8c627caf25eae6764501b9eff35aa90bd4f24952cad712aae20344579e83ecd104ad1f7915edc4f9023b17fddbdb4cd7", + "0x8027e3716601f04f1bec13c787805cfdff2c85a63390cc3db377594580a3292c730b833a002ae5cfc0a826bacce666bb", + "0xaec5e915f23d327ceb37612ced6a3fbdcb3153ae075fa37c32146a7aac038fb65e03a87612b9a8c2a89188fa98c0a630", + "0xa16938f556b8c11d110d95b8584cecef8b95ef349ea64b59df806cc62c52ee48074d0b3f18d84533e41583aefd6a9d43", + "0xb9893f7a47af457a9efd90ddc0c0ef383ab34e9c1284e617c126965cd9f0de5c54ee8b7b5208ff190366fe445e9c1325", + "0x9920c52effcbd2a54502957fabc7c560250c08941bc30fba42d1a5101cd987359ab5725152e3638f6fb3b675e12d1060", + "0x9615800f8c95f95bf25055ae079b964e0a64fa0176cc98da272662014f57e7cd2745929daf838df0094b9f54be18b415", + "0xb77c967d0802218a206b8994ce4407b7b8272c812d64cd222701de3a35754a83ed9f16bebc9b69975f04ecc6a6bfec07", + "0x9582dc00ce0b175c0651f8a4a92d84223a2cb9cbf8a6f58cf92fab6e78149d3c22904a6c4711ef1ffee1e7ef4a4841c1", + "0xb4aa92a60de61ad089cb027ef19a211c720ec0e51743b1166e3d71bac08a9ffff2f0687e250c6a7e1db866f7c4ae8f29", + "0xaf49306611cc619a146b04fb3b8f2a9aeab1194cc9631c04e45e37fda35cc2676ff5f29f07b492574ad7d53627132908", + "0x975c3261f0f32d59473e588f89593be38f5694cfa09394a861e4330b7800fb2528ea832106a928c54c76a303d49140e2", + "0xb9e6c9f2562e90bd3008669a42151538b70faf028cc5bbc09fd6ab3febc626df911fcc65744a2ad793ecaf3f91a1f701", + "0x806efb61d1c948efc10dbf9bef30197d1c269e5e7fcf20a84367b26223d33fade413a0bbf4e33f0d1f1a00967289015e", + "0x8f4e902bc762394d65f6b543e68f64c13b5e5d6866d1ef75bfb786fdcc0fcd46ec1317a8cab4f2f97d6d3cf58926aeab", + "0x998e4ef7eb91c21d4ac2882f4bbd6d544fea90d905d28668a5fdbabd234d96be4aba8918f97d4a1e891a30a8e4e05a4f", + "0xb71c11828ecad7731136cb1f5b80392a4add8d62f8866a781fdde797a201ebf6d483b2348aacbea2061a5108933b757d", + "0xab37a400dafa918d28ef43294b18dabcb4dd942261832f9839e59e53747c7b1bc44230967a9610b261f3abbd648e3dd8", + "0x95fa868db7592c5fb651d5d9971fc4e354dff969d6b05085f5d01fb4da1abb420ecad5ecb0e886e0ced1c9de8f3d5cfe", + "0xad2456725ac3aeb0e4ca5c0502a8abb4dbd8a8897d9d91e673fea6a0cffd64d907b714b662d73c0877b98d4ab3ce6a89", + "0x81e0992e7c1c54c21cac32e36b90b25e1e5b72aac99c953c3c4d019eced64d7e316cbc0840204a4a51a4ad17d8b1d508", + "0xa7acf82999de75f231fd80770bcb0f4c720d6b1e4a2558fa1ce854382fda92beb89fea5b5d229dad85fafee7a9e98329", + "0x85b63dd33e2cc178cfd55d67509717c3d8b81a40d6be468eb5579e4a1dee3d0be1a5f93c90e2f0cdd012efdffa7d9235", + "0xaaf15335f1fa2a187f24f3db7966fcda52c2859113ed8f460167538f5cde43429750349f9714edda0adb6705d401d27c", + "0x880b4ef2b278e1b2cccf36a3b5b7fbce94f106ed9fa2820cb9099a7a540a57e9fdeef5c0fb0a743049828fc2b8c46163", + "0x8c22f1f2a530879a93e744397fa6acca57b01fb62b62188ffa7487464815c605e1520ff4bb18e832753893649ab80d62", + "0xb1c56f028f31f0ff86bdf55788703b4d809becaf3e4d9d349f1b660a07d2f15e127eb72a0e2a5a2742313785a3de43a5", + "0xb930ecc2a26183240f8da107e80979b59da4e05f090316d982815ed6151d7750490b85273187ec4e07eb221813a4f279", + "0xa58d2fb1c2612d28c54fafa7f2e1e6c336c24435abdb53e1be9dce9aebecbf7468a348b872549535ac18aa003f83ea87", + "0x87c288b63db2cc89a31b57593dd3632fc0970e305175ae4917f2ad9f7916fd77163f08c491feab0de2dacde7d615111a", + "0xa413befdecf9441fa6e6dd318af49173f19e8b95b8d928ebe1cc46cacc78b1377afa8867083be473457cd31dfff88221", + "0xa4e2df74c8e7257e3df1e4f6a9ad4141c8299f43f02bcc53bfeeaa1698faecf81a4ad2be7f5ddbd1be657c87110ea34c", + "0xa03daf351de2b711e73fcefaa02ba23a90a8c68ae6e31672caf0f36bfe435b663846536e75279ac5fb63559b7397eb24", + "0xabf7da952c9d8f75fcc67fa7969fac0b26d4dc3e022961ed674ce85d734f11620a950fb1fb0ef830fba1d8b5bc3eced4", + "0x941c8962debd2756f92a6a0451a2bf7fbc01f32ed03d0823dffd4a61186628a4c3c7c482b18589ff65e4c449fa35c2a4", + "0xaa19a75f21a14ad5f170e336a0bd07e0c98b9f5d71f91e784d1dc28a5f5eb6870a4eb35bb41edcf9e6efe982ae5c2c5b", + "0xb34d4d2e15079e7e80fdba30cddf4fc0e6c9a61f7ab06a6ea0a4e55fd5bf632c6d72e021d6264d935439d321de883bb6", + "0xab6b47627cf76d9552c723818db5ebee7734542436b50ffe15b3a96e8e7a6b54f9a0965de78405e16e309193f147108d", + "0x81cfea085de08a39ecb888831381c4e60d2ece13caa69a1da2ade95841311f0e6e958863fe834f8ac70e358f730a9dcd", + "0x880f51ddfd824ce64b336ce26993249c9d05263def782a8246e87ec335042b0a81d2b91782a6cbbc9911f8208e1de704", + "0x952cf6782b0ad3e85625391cc5f486a16bb5b1f8ea20defcb6857bd7d068dcd2701bc7ed5c3b773a869180d9042f772b", + "0x8dd55efbf4f9cf6aba47c16730bbc5dc3d332bf2e9f1be8695f755362ad2f8e6f6e2426e52cdf0ba9feb9e17533c4b06", + "0x936fb9612ea1a7308c9112f3fb6eb4be3171c2c32f3c57576d68467751b47ff7df594cbe05add9c29a07b10013ce215a", + "0xb31949c4a21181a54928f25f8598ea3dfcacab697a5653beb288d218d312133e5a93f434010ffdab3f3ebd0b43b207dd", + "0x8c9906e1f5c918b6724255bc0dffcd3bd4ff0e8a130f4e055c8a8ea43aac28b0ef36cc229e028182d8a52aaddb1f3155", + "0xb2349265be33d90aaf51362d015ce47c5ffe33e9e6e018c8c6e39336d9327ccdd13d25e792eb33b43ed89a162f6ac2fd", + "0xa154892ff23b284040e623bba940a6a1ef1207b8b089fc699cb152b00bcce220464502cfa1dfb5a2f62e6f3960cdf349", + "0x81f145ebb9a5674a5b052d0e9059acc8f8ab612dd9f54d43ff620202606e19a86a9b284dc6480d555a030e5fefee8c50", + "0xabeb50e9b72dda934df8f032ecd0221826cb988bda6713ca0429b7c40fd2829804fdba8da13700cabba05e945380b753", + "0xa866633b4293e726accf6e97ac90c1898cac83e8531a25b50ae99f0ecb477a692e6a5f2488447ccd83ed869ab5abc406", + "0xb15e1b4ac64bafbc4fdfead9aeff126bf102fdd125c1c914f7979680ec1715fbeccf3dc35c77d284421ec1371ed8bc32", + "0x807c510df25c0ba10d4aa06a462e02f050c69a977c64c071401ab74f9ac1e60788aa504743b4cc1982da835ff9ac2541", + "0xb97b2f1b2d6d744f2322812825ea1cf91453dfe1bbbb2678776e40e7d0fe682239d0dc8053f94d97e5a9678232b7a71f", + "0x972cfaefda96f5edfe0614c01533b76153118712c1c02c505008204a5be2aa438675d97f43384199517b1c08c7c9fdb2", + "0xa0230bdf83cd469c7248074bec535eba8280cfde587d7c63d307149e9626bc7642b4bacc9beff2d8e8f6ea398dc0ade7", + "0x8163eea18eacc062e71bb9f7406c58ebe1ce42a8b93656077dd781c2772e37775fe20e8d5b980dd52fdad98b72f10b71", + "0x9542760a620d27a9856c490c8f0fadd90bbf06f539ad11339d2a6cfc0f262a798c8905ee407f53f718a72c1468d756f0", + "0xa54e104339286d3ce8271828fbac20f6cf7afd3b72d9b194b7cbaf65f6612416117be492bf4aa88faf6ada56cf4b6462", + "0xb5036d4c241685bcd67156e4ab0eba42b97f639947d54b17af2c88fbcc5fc57359c7df4bc7f8df955a524fb1501a6fda", + "0x8a277710379ba4fababb423026d9db3d8dcd484b2ee812439eb91b4b5177d03433b7a4486e43efbf2d2ce8ccfeabf323", + "0xb464d763e5ef724ab7ee13a60015df5c9a7809a79188ff6a7e0d5e5400febd42ad7330406a59704a44a08f2289d659c8", + "0xac2c98a0ab3f9d041fc115d9be4a6c77bd2219bb4b851cbee0d9257a4de5791251735b5b8fad09c55d16eb0d97080eff", + "0x8853eff72fa4c7b4eda77e448e12bc8ee75f5cb0f35b721c7ee8184cf030a11e3e0278a4e76b326416fd645a9645d901", + "0x80e58680edb62d6ef04727a36e41e5ba63fe787aa173171486caee061dcb6323f8b2de07fc0f1f229c0a838ed00e3e31", + "0xb429841b1eb28c9083ddaf05385c2bb55f2b6becb3ab97163b0d0af7c9e878e402110177527f8c6e592a52e9bcb379d6", + "0xa0047e03c89a95248543618e6b7ca2c7aad7acda3c9f85771ec5c93fa898c651e8b2ea3b6b799d8cd592290a986cdd7d", + "0x9161ba220130eea190932ecdad9f114e385a31ec51c71cc8de451ffe5e75abcda37227c6a77f7090d4d8bbf134421bca", + "0x876561bba29e656b7122f1cb51a02dff1ac7d470217d8a4799c01e61816c4660eea91843a5a42502ddf842d2daeb0586", + "0x880b99e77a6efb26c0a69583abb8e1e09a5307ac037962ddf752407cacaf8f46b5a67faf9126bdbcb9b75abf854f1c89", + "0xad28da04c80723df1443d5391f998ae9700de91c9fc3f1544d03d698a97cd94fe1753f9915c1d6354185734a80bab484", + "0xb3e313e79d905a3cc9cc8a86bd4dba7286fb641c2f93706adb3b932443e32eff2cbed695beeb26d93101c53d5f49d7db", + "0xb043156fcd02b75dbe940c763fa8e8a7c7f6d74c1d5395db5ce544af3b6097eab61686950535a810aa95889ced12f74d", + "0xb9691fb57be7aeb9d43995b8022051f199978d6ad635e1623a1bc1754b250fb8a94985cdc1e623e98767690a417e92a0", + "0x8aadfcf3562f1c357068323352cb1745349a27a7362358d869e617c2410db747149b993ee9e881e252ecdd42fd75f351", + "0xb7a2c83971c4e4132f3fcaf3c4374872de67ea5d89814492309cf924520a23787401f9621681fcf526154e80849a7e72", + "0x8d38b9c5873ea4e7beb06a669587d6da8298160bb0fac7fd0ca5201a899392013a9a9eddf6da8e416b52cebf6c85cdc5", + "0xa129c9cf33df42b5a98ad98be9d940207ae154c715d3bde701b7160dfe45304679fb0481a4f9dde242c22a9849fc2d9c", + "0x87587504e819bc7f0349705a05c15e8504fd6b2c25c3fd264096cdb7aaa22d8078da776215925d9d775a7f9355b6f0c0", + "0x9104b5af82dbca914370eadb5518b26bee7ed7edeca74b741585ba8b249204e2c998bd47a02cef4335e236f8efafef94", + "0xb48490c5a3bc9e66cdc78994f7c73e0f2724fec8a304b4147799e5142396df155ef7c42065ed6d2c0393d138fb4d2a0b", + "0xaee36de701879ca9d4f954e3ecdb422842fccd72930ff09977705d8da9282284b160b6485319d1e48259b984c5e38700", + "0xa7179d338fe5a0e4669364a364e17f8d00cb6c59a80a069afd5f4f14510df2eee90c07826553e4f7fe46d28f72b2903e", + "0xa684a09add047c0fe648d9c5618500d1816047168e055e8ac8c952c3544a462cc095b32fab07d939947a58fcb4ec7ba7", + "0x8e2e9a1a8bae9fffa594324a2c643ba0609f291146a104ceb9fc1f26d4a25604b97e9fb392c01689c88cac90c310333c", + "0xa59249e4dfb674dfdc648ae00b4226f85f8374076ecfccb43dfde2b9b299bb880943181e8b908ddeba2411843e288085", + "0xb2caeffd79a19667b5083b75b183d273e732637a6c9fc34e7ab5fb13766d395aa6cedc4ff816a3760a6a64fd51582bcb", + "0x8fbc274c5882666da39e7ef636a89cf36725820c8ada6eec0ab9b5af3760524b73a2173c286e155c597b4ed717d879e4", + "0x9104ac7ad13b441c6b2234a319e1c54e7f172c9a3efcb8c5fab0ac1d388b01895a9a208f59910bc00fb998b0adab1bc3", + "0xa6d7e65bf9f889532090ae4f9067bb63f15b21f05f22c2540ff1bb5b0b5d98f205e150b1b1690e9aa13d0dee37222143", + "0x99dad12f78e1a554f2163afc50aa26ee2a3067fc30f9c2382975d7da40c738313eaae7adbc2521f34c1c708f3a7475b7", + "0x91c5e0b9146fe5403fcc309b8c0eede5933b0ab1de71ab02fac6614753caac5d1097369bdeed3a101f62bbcae258e927", + "0x87fd7e26a0749350ebdcd7c5d30e4b969a76bda530c831262fc98b36be932a4d025310f695d5b210ead89ee70eb7e53b", + "0xa23f3dec1ef45c126f040e5818a1ceea4283bc8ccbf9b8a2d3a770f93872777647893ff86fea463144a355c32a01564e", + "0x98eccc5eeacef24188409d380b772cd5c72f376c461032cf2852fb8ce2afb37567c059e5b004395ebb5d97fd31028407", + "0x8bc00371649fc3258d8500edef13d2e5e0aff203f1a9563ac19891d7667996705390427a3319d543b20d95b28861743f", + "0x85745bd84c92ddfc55df11fe134cf70e3c340aa1c7cdd6188a03308cf3a840f4f19629f9730b2e6426424989ff03000d", + "0x8ee8873de7cd28a54ba2c63a80b63399effed76b154e96ed26e7c0668b9f2476e298688b6a00c4b2ab9d020a897695d7", + "0xb79b9289dbc045e1d6ab747360696e0a2e4ba4ab7013ca7f977b6ef6e9ce9c4aa41f2b526ec3e5209df3d2cacd548da6", + "0xa6f0d5053bfb37588a8b06ebee8c84a7f55b943c04075abbed5000ac6c16d9404d40976f6197ee1b313590750df93721", + "0xb284286dd815e2897bb321e0b1f52f9c917b9ef36c9e85671f63b909c0b2c40a8132910325b20a543640b01dc63b48da", + "0x8f8daead3a740fe48dfc88b40737b81371abe6b7f53cf270d6993ac1cc913fce684a23d93afe644d59e7faa7634994dd", + "0x86ceb649a337a5a79c17b496993ca07fa93b38a582367ca04f3dfec5cef8f268d4e8080e5a76b150f5be1b177ef6984e", + "0x876afcd045c8a18967923733a3a43757652289b0974cd348238a693f30bb57f38664ecb97877a5e5f7d0185039a2bf54", + "0xaefc682f8784b18d36202a069269be7dba8ab67ae3543838e6d473fbc5713d103abcc8da1729a288503b786baac182d3", + "0xa639bdcc6f167b3d488cf2d28ebe4782c4f37a5de4ee3d8f4845eef50c81ab7ee421db99c02c6404fa9d45a948b6d37f", + "0xaf3e694ad71684f7214f86bed85149db039971e1c362119b979a135255aa226128802e58e2caaeaf8d89304371dd0440", + "0xa61cb5b148cb7ff34775dead8efa7d54d7141182356bf614070dfaa710ebf07a4dfb684dad151db60c0f8261c30a4f40", + "0x8016d3229030424cfeff6c5b813970ea193f8d012cfa767270ca9057d58eddc556e96c14544bf4c038dbed5f24aa8da0", + "0x8e6bbfe492ecbbb8dc8889d3dcd7037a58db605bc6bb79131a72a9b9c1bad630e75f5e5e0c1bc407e73f3d13b116739f", + "0xb6e57034ed025ebb5e677911b47ad51fa2cdfa4de4caa158ae5727d33c94c27b5ffa63dffe2219fd17ea26dc6169fee1", + "0xa5cf6f4fd67aecb845eebc8d7304c98c69806d774d4c468350f7f82ff0f5baeecc56837705e39432a8d246aa2a7075ed", + "0x8f7bbaaac458bada6d852fe665c87c646133bab16c0d5136c3dc922095b9d647d93a9de7671cb7bfd4cbd138ae0709d1", + "0xa60642ede2da19e9e4a2fe5a31360fba2c871c25ceb8a867c8189fc62c191a5494cbe59a4a53f643d3025ab264e9cee8", + "0x9282add41ea47925992831d76289b09d313946c21ae4aadfe0df002ed62953d3d9aa4973e507d4d89486a5759e44b641", + "0x8c26d4ec9fc8728b3f0340a457c5c05b14cc4345e6c0b9b9402f73e882812999e2b29b4bffdcb7fe645171071e2add88", + "0x887a4277ee8754733f3692a90416eeac1ebee52ff23173a827f0ba569bd84efd806eb9139049f66cc577e370d3f0962d", + "0x827dabda84c7f7b1adc0f5ca0fccf0729e9d7f78e1ffa7c5e9c4f66610ff0ab776c880b00c77137cf7abe14df977febc", + "0x8b3f8fc8d2ec7a8db6ecadb8be90f55c1be4871bde10eb18c1773dc45dce042d93baa65b75c4688eb4125b6b7965c2d3", + "0xb2fc4478830f2ae4234569346d80b59899247c609b75bd2190a896498539e1f30dca5edbad69f0224918d09f0d7eb332", + "0xa75bcd04fcb44ce5cbab7eef6649155ec0bef46202e4eb86c88b4ced65e111f764ee7fb37e9f68e38067040fedf715ee", + "0xb8a6c999068c13fb71a99d75eabadf7edd2d32e28607baf001a0aeec412fdd3575602c68d3feb4d743b90396705e37f3", + "0xa5f97d27dbe892f2b3b664362a7fd5f098566ca4d0ff350ebd84a2e79afbc18cbf0b2fb5e53b9ee3635b2f36e46cfe28", + "0xb926a21f555c296603dc9e24e176243199a533914f48994b20abca16f19c30cfd0baf319268139fe3f83ce69afdc324d", + "0x8266f9cc52944d85c50ba04d421c0ecb7ceac774f4485bca84115772ade238fdb5f5bf93f1f6c5288b3a44af177042e5", + "0xa76adeddf2454d131c91d5e2e3a464ef5d3c40ee6a2ab95e70ef2e49e0920d24f9b09276250ed7b29851affbdbc7885a", + "0xa3a930dd70aeeaff0f2e3790927d5425db40467ee106261615de5fcb937bb1621be213ccd8b3a14d96c5908bedc2e421", + "0xa62c2e7c692403e874a16e08e46a067e19dd561993ca07ff79cecb53c753763b3e49d372638c96c0a8c921bfa0798a0c", + "0xb919391ac60e21fbf25cb2d6a3ce6edf9ddc493073e5e19c43d319cc488ea7fa2b4c6c9fcae5477d83065edb7f92b7f1", + "0xb886f7a3476adb0818c62efe1124ad90a177c7628a53ce2b5db87661dfa2018d3c5a1862a88cb9bd207fc5cab0915c5a", + "0x91412f6f2d5662c541f77a4fb884daaadb305765e148dc2f5495cbf9ca29fdb3f53af6fce4493f3f5fd7c867901e98f3", + "0x88e7a12a90428bb45bcf4b01442c11607433211fc2f9bee9545304eb66e0b4b5339360160bc782e185391385da7c5ad7", + "0xa931bb29b6200899e8a8c257166400eff9888594daa1e37501390a1d219b019ed1b730d921a8f6d6fe62dff7b86ee387", + "0xacb7069fe0428d350b8b710a702f56790bdaa4d93a77864620f5190d1ac7f2eed808019ca6910a61ec48239d2eca7f2a", + "0xac9f29ad08aaf27581fe1f12e210ad4ac6011507fe3100763a4120f9e439f3c6d191f3fb55aadf58bd865cfd4406c68e", + "0x839d65a5c224c5d04352529a5071ea997ff39916dabb38b7adfb2b10b7bf09d83e052d32a5cd56f06b61836d95a1d997", + "0x902a533bdb93794d150e433084c4c8200555d96fe88f145c2cfaf16ba69cc534e86cc5a88f671851da7f6c11a02df6bc", + "0x91066bac5341cead3d2cb168fde7da62b3dcf933ff5c1d379a4dd424b218c4e2ebcce038cc342e758795ecd4dbb8b790", + "0xa02f7fec0661394399a82b2e3151009160b3f5392017ba579b301ed42c85100c295acbfed46b6c58a9d71796ed0930e6", + "0xad19e38fbc31a1f99e8ead1437016333ba9b15dffa43fe617d410fe82775f06fe5abd2d5f2118802914903d2c2301748", + "0x95718b06017ba9d45894867fd67148645d25d9db2229aa89971f444641ba9db4c5c6f0785f3b25cf2cd7fadaa6adc5eb", + "0x9722c1079db7e2e1c49756288a02302b43b8fd92d5671585ac1ea7491123742a2744a526c12c9a0b4c4a80f26342a3a6", + "0xa7d76c88daa3ba893d4bd023e039e1f587565d317609cc9ddce73f2d3c4d6d9facee20fca31c85322f10fdf15267fbec", + "0xaaeb466f4316874c2107a0de38dafafa65ce50039c20723e8797815238011426f4e77e29fc573e7c6d2df85c1bbfefdd", + "0xb380ee52038a0b622cd7eccf4bd52966573fadde4fe8f70f43fa9c43a5a99b3eaf58335a1948b561f5b368ab4e0710f6", + "0xa80ac2a197002879ef4db6e2b1e1b9c239e4f6c0f0abf1cc9b9b7bf3da7e078a21893c01eaaab236a7e8618ac146b4a6", + "0x92a488068e1b70bf01e6e417f81e1dc3bcec71d51e7eabbc53b6736e8afdb8b67d191940fe09c55783be9210e1cbd73c", + "0xb7d1d1edc5e72c11b55aa0aa85d3aacc38db925c0d30b082c7c47d39459b8ff2e7f969a754c814ac2a3e7c42a8885792", + "0xa9a90f77e54405ac852fe5c9691d934e1836c5a5813b3a2c5ce6c2ee6dd01302dcfcd5fae8d7dfcc46ee5ce47c5a6759", + "0xb80e8516598c59dddcf13fdb7a42d8f5a52c84e01bd6a39880f4acaefe8e4b8f09cc1b1a2423cd5121f4952201f20078", + "0xa52c15840b89d92897d1e140b2b8468a88886c5e1092861e598b3a433b340ded5b35b3d632a9879820fd56f20ca3a68b", + "0x90f1d6745ed9a2fb2248d35de8cc48698f9e006dd540f690c04038ff3d22bd7f9c3979f6b3f955cb397542b3ef1c52dd", + "0xa99cde5c7c85ae291c74c893e598cc0e6eb2dda2a81dbb504a638eb21dd2c41d6e5caf7baa29e3c1c32e94dca0d791f1", + "0x87cac423d0847ee3547f45ac5babf53bddb154814e291f368cbb62ddd4f2c6f18d77a1c39fddb482befe1a0e77d5b7fd", + "0xa1c0c317e6e352e16e25c140820b927161ce5d2c4c2e10bca3057ba4d46b4f42ad7aba20de86dad9fc6368ea92695268", + "0x8c6fc89428c74f0c025e980c5a1e576deadf8685f57136e50600175fa2d19389c853d532bb45a3e22b4a879fab1fcb0d", + "0x969eb809ff2bbc9b51055d60ba635c175384c3d005c101a6c2d18efc6abd915671d6e37f2febd242d946e210a5506cdf", + "0xb611e52def8da2a83989f5b8391fef61774b980ce82ee2fe0acdf24e4efb81f40b9c9abb0a2010e843101efc170f9832", + "0x85e8259980319bc750607f5004aa83f7d7eaf20eeb164fe3db13864e3d31e1f53ea42dd6d9b30ce710089f193c895d51", + "0xb5fd848a30ed097c718753d168ef88240ac68eed847c5c964a6a6e1a6d9ebf0344179d8b3a46edbe9c8cdbda4cd5a0a4", + "0x9348cf0fbd4414944935b61d9c99a9ad4c1b1825a7059e698a2709b0f07adaa26b32db557f32388b44461285959d25d3", + "0x878156b5b59032dd2741bccd4a61040c5698c99ad7a286365c87fc888b5ac839143325c9d379eb7c91396d2c60059e94", + "0xb9ed23f3f26fc9f31e1e30e8ae88482352fab6ef79a2eb8939dc78110580708f482ba3ab306ed6e09030653b9704a80e", + "0x8368bb9b9bb2e17730c42ed1100eb870c88a8431601312aa8cb1e738cdb9ca2704dfd432cf1703c0db043259819631dc", + "0x8f11ee58ef82b1bbd2240d3f548d8681e22bed5ce118d605bed4523b4bb39899ac78e15337daab92666750dfcaf32aff", + "0xb4a1d185c770ed41021ab0497a2ecf724fbd046784418b8a4af8d654dd9b10c2f3333e6f4f9e6ce385916546a2cb6a8e", + "0x916391f70e2d543b0e69d1e8c5a1c0b754d2191497b96ceeec47b37bd6d97a5a21f8cc8d11435147f5a5eff85f3b3270", + "0x85f2ed3ffb03e50c8f22553b8e6349be6244d893aa37a7c6dbd221e9e121579e5a04466e60d6b4d3567bc747b1fc1e9f", + "0x919c81bd1f3d9918e121e4793690f9ddd96c925ae928536322d4b98132f21979c1f34731d393f0ae6e0871af4355a8ad", + "0x84d1ee720d3724ce8caa5f76ab822c3565ee4e13c3bf9a9478b39aeab6ddb8937d1f3fc5fcf7faaad4a16214d2550c1a", + "0xae96dc808c316a677977831bad1e529ef965dadb5d6aea25ab008fe7bb1543e596e33052cfbe4279fa060201199d2c34", + "0xa3e91428c65209d182cc6b95b6d6ab6ed9d6ee915a992760e29a0c99c19b2caeefdfb87803d0f675c5c5362ca367a4ab", + "0xb2a01dc47dd98f089f28eee67ba2f789153516b7d3b47127f430f542869ec42dd8fd4dc83cfbe625c5c40a2d2d0633ea", + "0x8bca3560946189e4984126acb42153d8dad0b60e7f86518b55ea9ff7c899c9ec12821850943b6adeffbe9363bce4d217", + "0x9439b663e4104d64433be7d49d0beaae263f20cfac0b5af402a59412056094bd71f0450bc52a294fc759ca8a3fddfee9", + "0xa9ef845ab489f61dbfdcd71abcc29fc38f3494a00243b9c20b9cd0dd9e8a0f23304df84939b9652cdf5542d9b3ee085e", + "0xac5c01c51dac6ee1cb365c9b03f09906d9b7b9b4d1b73c44d9e8e06823025d7070f242898a975420bc87d6372382cab8", + "0xa850bc33f5c73df134d12eed2b410bc4941c457edbd28e0839e50e6ed2d387d19241e9e00cdab76c80fc4a3d35804e24", + "0x8d6e3df29419bd0da1deba52c1feebe37744108685b49ca703e1b76fb4d612e3959d3b60b822506e5c0aac50b2f5eee2", + "0xa2b1ea43f51460b3cb83657b4e296944658945d3ad6ae7b392e60f40829ba1da6a812d89f0380474578cbd0ab09801ac", + "0x99deb1c0acbc0e773df4a98e68bfe89cd0240903fd0564c4cdef27f0c20417e4506c9e2b173a4a6c9e20e637f9387b5e", + "0xa3d327f48eb34998a3b19a745bca3fade6a71360022c9180efb60d5a6f4126c3f4dfa498f45b9a626ca567fdd66ffbff", + "0xa9fdc2209bbf48970a404de3d803c65b11be96ab5a165183d05ed6477b3a0c633c3d6f0cb8eefb430fddb5b5be8cf887", + "0xaacf809d4015c7b809713b901893a5353e59b186ddf18c8f3af02d2156db3dc49406e7c1f4aca04a46c99348ed539f8f", + "0x989fa046d04b41fc95a04dabb7ab8b64e84afaa85c0aa49e1c6878d7b2814094402d62ae42dfbf3ac72e6770ee0926a8", + "0xa3d8610c2522d330df02511710e52b1d9bdc9f2b156deca12b1bf754266caeac4f449ed965d9863558df43ce9ae65a44", + "0x85c9217b6f7b8baffda06ffead7174ab9d1d9ec4b10b78d99e742835796a522d6e2b5ddc5c7282757dd896c76698eafb", + "0x92b53ea758e85cd81b877eca25c01519e03c33df55bdfb6c8508b8f1b11b2f573339048eb741ed64a3d12d78bf6b3929", + "0xacdc948f5441a44832c73316a25e0ddcadca50895495daf2b3600206ce0f2ebc5113dc00d0ee497e9bff7d519fb8611f", + "0xb2e8f2b9455ac8b1544f2631d9cf374b0bc8884178727720341d26b6d9c6a3a9e95cb916eb46c613fffabb8d974fb111", + "0xae2dbb2750d97e94ec0fc9da1c4096259d89429120e4da43e5a74fb3494778f457426428e73ab54f9e9ea939f8fdd3c5", + "0x951b27456e2af80436608aadec54ebd03bda37fa58452631da63bc5ff3eecb5ffb73d356b19f6c9c4225fcb0da8fda20", + "0x86ca8ed7c475d33455fae4242b05b1b3576e6ec05ac512ca7d3f9c8d44376e909c734c25cd0e33f0f6b4857d40452024", + "0xa40a83176a3890c867c34803e0f2571125c2cf1596767468a74107ba9b2d663c74e7c56a3de61bd7ed0c8db39534c7b4", + "0x907c827a4fb5f698bf0e6f10ca07741c5b8e3ecb26aa53f938ba34ceb50c01be80c4afc5ac4358a5fda88eadea0cbe73", + "0xafa1d94996b77e9de7312e087a18e5b72574b9fe3a0c17fc5fc1ab1e6aa924d8494adfee338fa2e4b2d2bcfc9b1f64c3", + "0x88d8a32231ff2bfc39f1f9d39ccf638727b4ead866660b1b8bfbdf59c5ab4d76efddd76930eff49ea0af048b2e396b6c", + "0x87c2989f377be3751da3bc19172c5987d21c095cc3d851ee5120f67a5b3986d387b058688d54336d8510c49c6a66d754", + "0xa70a79cdb02f144dd395f93d35f232569d3d0988a447099e40597d76ee3bce0241fb27bcb03a80ed3eb7e6c4003a40fa", + "0x866ec39b9eda580d96bc2bff76af5cd4887b6788675149ab33bfefe38db82ad01b8d64c6b60704210918f3564cde1110", + "0xa698b04227e8593a6fed6a1f6f6d1eafe186b9e73f87e42e7997f264d97225165c3f76e929a3c562ec93ee2babe953ed", + "0xadb198f70a7f1969ed0958be4a9a60dcc1806bced79c63692b9aad6c5648ffea1fed60b24bf4b1862e817cf229e93e83", + "0xa79ef16ee66514c2a4f34605a624dbb40d446f2637f943a4acdf0154c162fa12b30e151f03fb1a1cf100052186f94ce8", + "0x8acd9b1213e397b2bd494714aec2d7b964558d0d16b0d4bf9334fe7804fb1d96f484b48b859a0589a61f31eed35c80d0", + "0xb3a5497365bd40a81202b8a94a5e28a8a039cc2e639d73de289294cbda2c0e987c1f9468daba09ea4390f8e4e806f3c8", + "0x9530f92929f61f9afeea5737bded7aaff3078367aaf65b2c75f0f4263b6e90990a2bf64927774c4f0289120d49558d6f", + "0x8c9fefe233d0d657349b7efcdc368f5aaead27071d224af780874751e7d241f6b88f7650fbb4133043b24bbebc12aa48", + "0xa3615114600b4e805a45a04b16aa53c2ca5d8a39fe6efb3d359d8436583cb94719be750ee2fb4bb29823b4f2184258c2", + "0xa8bbea7eb6c75bf058c421a3735d8c651e9ae6b1931593b13a588e00aa7dfa62d0982c7cdcbde1d9800fb75a208ed0ab", + "0xb12fd5f747c5223c5150dca2728bb3a363c5bdade5a9d1415642b2201c51aa6bba20a988c51bb6452fee7e05a8586b42", + "0x8f6fde2ebbd7682c69026069cfe93aa5410071f05de9ccd7070c8c3299a6539b39b3798f01a0b4e9b1330510bdb51de7", + "0xb3f1319ae34ad1d59207288f01d3d7b7e1bad7733fb4a819a09b011d72a4d736bd3c7afeb74cf56da0e00cf712042ad2", + "0x976eb5543e043b88d87fda18634470911dfe0e0cabab874ca38c1009e64d43026d9637d39dcd777bc7f809bbfc3e2110", + "0x985af1d441b93fa2a86c86b6d7b70b16973d3971e4e89e093b65f0ae626d702202336869af8e3af3923e287547d5384b", + "0xa73fa030eeea2b921390246a177065a4c6dc847875740651d40a1ceeaef8aa0d24664d3d28dc42b04bd14879ed004a2a", + "0x88015bec478fd3ddff72efda0e8fc54b74faf804b0a3473cca38efbe5a7e6dc0be1cfe3dd62b8ac5a6a7a21971dcc58c", + "0xb549d272a7f3180826a978d747507e4dc80d82784abb655cfcd3a69cc72e7d58c70febea1ce002a89852a8f934ea70fb", + "0xa4cfe97f6e61e45577ed6ce6eb7d1d9aca9e323b79b30736b407000555bf3e2ecbffd6314585b09000f09ee8381903af", + "0xa9e573274f5a131d6c7641bc0576a2621b6466a5bf2cecb21058160a854b1b9e0be176da2b6b9b3ed562fc36c5f09119", + "0xa53912c9c42a1a93ba4c3a946d7787c11fcec1011d13d71d2b13f26da3935a80def2f59453de41386bf35910afe96aed", + "0x887709dd8a4447bfed403c885889f9e30bff8fe1b1adbbb75712611125e703b2a23f5b7777ccc1fd1fed8fef0e6b81a9", + "0x815f53751f6d3e7d76c489f3c98d2b49214938cac8c2b417e2d17bb13446c285fa76fd32a97e9c4564a68f4faa069ad2", + "0xb7eb6a49bf8f942dd8c37c41c1b35df43e4536e07ca9f4c1cfbbf8a8c03f84c54c1a0d8e901c49de526900aeac0f922f", + "0xb63ace9e3893ec7b7c853023b359c34d4baaa0ac23908b476ce67c07d29f5e5e895e90c3d3f58f8433ac5d06df894d0d", + "0x99c935fe18699bca9852200c292690a2b834bac508890c4ee9af1aa6999a8d590bf6a3a274bb55d5a73f1b7095d10f37", + "0x8cf8412bd48b21b008f0207b1f430ed96bc6512c3712dffbbecb66e493e33698c051b27a2998c5bddd89d6c373d02d06", + "0x8117fbcf61d946bee1ce3dff9e568b83716907acfde9b352c3521cfed44158874af8dd5b3906b4a6b49da2fb212ef802", + "0xa23f076306c120dccf69d7d2ac7f83a377a72d35bf448f88feff8b6dba9307fdabf34452e30b87407b2258b9edfd1174", + "0xa1359866783af9031d20ac64380daee86c8054a9af62e4d2100f87c5aeffd0ca48769560fb9a550675e6cd1e6382f32f", + "0x978299430079ea9a0868eb1289ea175e133e9f604129d56b1b1d0f768930bc4c64db921e08f352bfe6ad2296123e6ba7", + "0x8cf06b34e7021e9401eb705dde411ecf7e7e7185f8c0b0aeed949097df31812a9fdd4db7d18f9383a8a5a8d2d58fa176", + "0xa10788831a0cb2c3d14d8bc214d92bee6e2a9e92c423d2974760d84a6872a9465d12b628f9bd8a6e777a7db6f509b3a0", + "0x86c53fc078846c3d9bc47682506f8285ba4551475921fd388b96291741970c34b8de4210202e40d2de4acb6e2892072b", + "0x8aee7bc01a8a1540858c09a4141532dc759ae45c402ffc5a07eca298dd63c4c097d09c253469bb818d13f0602a84af87", + "0xa75f29ddd8124382233f2434fcd158d7659fb64cf086b67da7416665f153f34915cb0fb24afb891e1848c08f3af76aac", + "0xaf76d2de3664f45ed4024f1b944cd316cf758393232bb07bc695e5eaa7f04e7e09007f29e83f62ef6fa25d1000113ca9", + "0x8f90e72a54e6894d511061957162e753010812346afd4d90cfedb678b99ba1aacf2b6bd0e49b4b0e684da8082a048619", + "0x973dcf44ab60f55f5d10a8753ea16db9faedd839466a130729538f3a0724f00f74b3ca1de16987d7c6e24e9467f62bc7", + "0x9427579975e81128057097972bedda9f0240c97233631a23c50ce1a007c0d0d5898deb0daccf4e1518dfb9abba81bf71", + "0xa3b109249ac2900806f0f39338da72d4f2cc6d1ac403b59834b46da5705cf436af8499fa83717f954edb32312397c8d9", + "0x854aafa329e2b2563355641eba95f2aba5b33d443ab16f5e342048f97d97c4e2812ff27c6f4180b8110272f3151be690", + "0xaf03bc1e94067741bca4978b9cf065cc6852090fde3aaf822bbe0744705ebda5baac6ed20b31144db0391309e474ba48", + "0xb8fdf21b57d1d5eecd93f76c37230d379b652dcd9026a158151adc38c7ee4273cc2b99e47b89ec05f57dafdcaa7a3b4e", + "0xb9574edb9567f07f85c7c2e6ca6c02d90ad7c7b87d49796f1e2fb7240ad071fb755cf13ca8678668a56217c62df168eb", + "0x860f5649c5299211728a36722a142bf1aa7cbbfbd225b671d427c67546375de96832c06709c73b7a51439b091249d34f", + "0x8e8f63ec8f4f1f7fcc61f893b671710c3c17f9d2d26c5c6ca40e671bd4b252bc0cc1655e6780d2ddcf2915d8f623b9a4", + "0xb2cf2cf8f9e750c1f28b72cae7e4e0091ee6015caac897c5e3b37148b57e64a7fc11efe99a4113a4ce0965d74cbd7a9c", + "0x8018499ef720e28759133033833edfe17ed23e42f99058bb79fe844ddee823cfdc43916be2dc9724d18f9726e6f1b409", + "0x90d32e6a183a5bb2d47056c25a1f45cebccb62ef70222e0066c94db9851dffcc349a2501a93052ee3c9a5ee292f70b92", + "0xac63fc758c1a3bc5cbff0f5e0b5a07a5aa801363b129d4e0360165c7dc1057ec37b0d808e9fd6b179e2c1e66bbc6090e", + "0x93c1b107eed20ea64c303f53819aede3fc3df85ecf1009174398a8be1441e374657697936af1b9f6e655797478557cea", + "0xa1ff5fca9d61c68110ef3b0354ecdfb7f2f069f6560e6ceb8a58050bd4bcc0b98f46835c9d36cb09b01164c4473a2da2", + "0xaedf4a81999a5dba1a43c747d669a761998c4903d16a4ed46482701d167cad5fb913cf67f78edb29c4fa2a297919ecef", + "0x860c0eaee51b7de26e99033f352aa09c093943b59237f1313ecc35b0d711509bbe9f939c4bd646deb7de8103eea9ea13", + "0xb82862fd65378b987475f98b06878418f5cd3d7d46cae08f01a631eceb8890db1995272ab869694287263bea2a8279d8", + "0x8e662149e22ce32383461ceb489b912f3c6320293d6edf61499164beaab7a265ffb9de3e0af6c95ca824d800718e1506", + "0xb5f32034d0f66bcbccefe2a177a60f31132d98c0899aa1ffff5ebf807546ff3104103077b1435fa6587bfe3e67ac0266", + "0x94bb68c8180496472262455fd6ab338697810825fa4e82fc673f3ac2dacfd29ee539ac0bfe97eb39d4ef118db875bab6", + "0x98aebd4bf15916512508a5fe89d814d5d76423c562cd3f0a0af504c8cde53be30f4df00e3ba0229cbf8528e198a0df11", + "0x875977457a3a801e2a25d728bd3424535d82abc9d473d785b6a66b66d9bbac5ff66166ae6ae16485fa2e326828100373", + "0x8a0192ef0903d7a5ed2e5614a715901f2554b324ee72390974dc90727ff08dafa580041a21a8e6c48a3e08e1b042afab", + "0x85f7ae1a7a7c793c408750ddec2d7f58b985fc3cdf9fcf6b2192bc57092b8a271b2fb6ced0639baaffe0bec3203e568b", + "0xb6cec65e5268818c82c0a4a029b02f8d23de98b68730a445119fee670118eb34027c23c987fac950f9b0151631328a4e", + "0xab4119eef94133198adb684b81f5e90070d3ca8f578c4c6c3d07de592a9af4e9fa18314db825f4c31cea1e2c7c62ed87", + "0x858b6f1bd3e68fc536bdf1f4bd96db032994eb76e71571e2d85af73b898478b82f9ab432732b0beebc0864ad8025ae33", + "0xa6786ee290d753ebdb1dfbab50579b4769974143cc7ba8558235ea4208e848b2bef2c2d719ce34b05ff026ca40d8f35b", + "0x946e508e1d399f22ae69a42102574c3d2827adfa47796c4c1b947f6ab84812f1474fd667c9491f13d4511cca3e8fffc7", + "0xa37185bd96faa526dfd3ddaff89b1eb29ceb4597bfc7e346bff9d6b3225b9ca87cbce0db94f05243c7232ead5f6607e8", + "0xb7efcb232d3b639921ce21e80744c293ea77e25982b609e8cc82bd3999a734ca04ca43f41d9c7c15d162e0bbc3152495", + "0xaf9d13103868c854821ba518907b067cfba025d739125f1e9cce0a04fffc3a2a1f25506c1209a0cfe1d6c1572c229ff0", + "0xb9f02bc67fe93d74a16acc9325126710cf137ef9c8125ecd8355e071236c1ca4cde6dbf95f734b0ed2ea63384abc2646", + "0x914f0f1bdc62c3e67c607e6a3df69ff47e396fb46a3f2aebf74d39fc4f2f8735bcdbd1814de99d6ad20cbe44c3f82dad", + "0xb3c36fa39f668bbc3fec028875a820057dbf96f727bb423280da96d5d50e885d23bc23fb73457bf79089691ce7663a7b", + "0x8295f613c162159f368340ca0fc2fd7776f7ad64eeafbd132bd3be1f1c30b5fbdc5f107f12fb0cff15b12c08621f457f", + "0xb38e558a5e62ad196be361651264f5c28ced6ab7c2229d7e33fb04b7f4e441e9dcb82b463b118e73e05055dcc9ce64b6", + "0x8b027c14affe47f83ee59b504d83b2fd2d9303de2c03ee59d169bb199d9f4bd6533d7f8c812dd7a6f1e8155e3e185689", + "0x96f1a36134e0d4137a7fe8bbb354f50aaa67f28f194ae2fdbe8be3eb24596678d8c9287765ee90c1f2778d0d607931e0", + "0x860d581af35d522b5eb5fddd92a98a6b4cc483fda00820d1ce4530e07892890c096e99b33976ca3550bb900e830ad3b6", + "0x90cd4b0321f145c07a899c0c9df40167969bf338d8b29d1f8baf845ef1655e5d411e4e5fdd90f86c14ef0c8cc3976687", + "0x94fab50e1f826709bca45da6574aeeaae0b2b6e172c30798bbd886720e18dcfa0be4c46b43cb14219b172b6afe70c062", + "0xa9d47cb4c69fde551b2648a2444091502a56a778212ab544ac75cc1bd14d0f043f4e31de47fce9a890ef5428cc28dd41", + "0x8962afddcb1a26cc8ccd3c993109e79a4dd747ca473b8b5ef93d9c2e71d29623b834ac945074acf118248e3ae7878a6c", + "0x86eac7e4bbd3a302fa5eab35697d26f17e0b646f097ed5e74fb45ad857615d06e829c7187bc20e136085af97d487744f", + "0xaf2dc13a599c834b9af1b54a4fa675c0db92e807cab3bfc825f2c5571b3bc2e1c213cff941cc8b1080d894036f9f73f8", + "0x8097b13908662d245820f3b045d8c2c665fe9a054e9c661323924ec86dfa713b36b0c787ad4dfdeb979318810e687a48", + "0xa9b0a06469c7746a0a23c459a2fe75dd474e2cb1e9806afe872febf054e6f13c2c183761ccb890c6bb4d87abe597de1e", + "0xa02883d525e251708bcecf6cfaf7d07fc5e1be92fba24ca8f805e96b7dfe385af449f5687de1dc6707a62ccb08c1d590", + "0xa0b3dff15982a38a2f56d8c6cfc5c5543c045bf2db24571d23387ccab42abe2756f34d5f0bf6a426bbad3c358b8bdb00", + "0x8c432e044af778fb5e5e5677dbd29cd52d6574a66b09b0cd6e2a5812e71c91559c3f257587bfc557b4b072a822973a60", + "0x93f941b4fe6c05621e7a651b87669eefd60b6e8a4a8e630a51fa3fee27417b9eebce39f80a5bade9ca779133ad8388f6", + "0x868c13bb6bec7d56afd4e518f2f02b857a58d224fbe698be0e00bc178c1858e6bf5f0f7824fa013d5c8dd6f6e4147974", + "0xafbf44071c2c905f7c8ef396eaed7f13deb7a91719cb5e8b9226aaceb876d81a10076383edc6216bc2f5c38a480b2957", + "0xb083c4cefb555576bb37b71f30532822cb4b1e1998e35cb00ffb80ca14e2853193c16a6756417853d4a74d625744dd76", + "0xacdaa6263cb7ffa0fa159983888348fef7f0514abd4d897884bb6eaeb57c68e61044047215ccb0f32face09b0a72ea3b", + "0x86793899ef71740ab2ec221d0085701f7909251b1cf59a276c8d629492f9ef15fc0b471beedc446a25b777391ab00718", + "0x961efdc21788e047fbe8dcb304fa1294fd5aaf5979561bc393bc88e323453e2d62ce3fdf6b5b6e8c8e52e522ec9e71df", + "0xadd7c99ab5d627951f435bf2bb8025e835503f643b3de8ea702094027923513edd7307590cc073f56586b06b7b5fca41", + "0x87ca4fa85a257adf7e21af302437e0fa094e09efced2d7ebab6cf848e6a77ae7bfc7cf76079117f6ed6eded9d79ce9cb", + "0xb879c91e77a8c5670f5f9c12b46d182867f1de75458474388ddae4dae88eb99105ce51fa78c2e39c5eac1127873aa1e6", + "0x90a908b47d0c29a2d0e7e65a212d7e1788454062f46458c519c7f2ccd794ff21d4c24b91acf42a71a509aff6544f676a", + "0x90bfbe37ac3992432e68c95c0d4342a9712126d1f50089239c9f4f6c0c202b54334e08604d245b97dc8e8f6706f6992c", + "0x95c0a30943ef34ef0a644439d857446e1c1736e18360f3f41803b0ca118e79af3fb9c608ec440a8de0f79d2c245b583c", + "0xa8cbb85e8f38734d95b9d69346cbcb169c149b9801d9da46df5e27b5ff8d0ab7b870c83db3fac32a90d02efe5fb8fb49", + "0x8eebee05702bf1574b12597b72a86d5badef064879fa9d1b9aff5ab75e5c71d81d8bc404f2614085855d6ed87f581238", + "0x981b2d7c56ff38f1d02c5d7a7f8bfe71daaf94d48c3bc93e8083a0a23c1ae1ff05f90312deb09b35d4513c1ffa573d86", + "0xa044cd5a3b727dc1cb59875e4025718375d12e706fffcdb48874e51a675dc2cabb209670192e408cdced5aeac65192e4", + "0xa4047173b5906c9b4292aaee1e91d9080ae74b1d3eb990449ed1f96bf22c3ee80f4915361e5bf7dccce24ae1618dae77", + "0x94d3c9406dc6dd7241a726355643d706e46b35f1ffe4509ac43e97c64c07592821156ba02ec9a78978e66709995a0ac8", + "0x8acf2c566ab7a822dbfc1e535443cd1b634d0048829cf1a77421a26997ae062cd34de318ffa543528646d7732d4d5b7b", + "0x8d286e63f64a3e24c2e4c2b91bafb7c6a71d9438a2ffd7288c58ec6de9db6194eaf671b39c5a462c8658ad3cfce46f85", + "0x95cf2e038c790ce7a2960add7ab44804375f04ec6829f8cc63793dfe9fc48c7471079f81b932726509394fd3d46a52e9", + "0x895f71f0bc6356d864ad92a858895d9962c3a10fc92a686c033852b24a30c348de4c75fbae3a6a47f4e05a65cbde7e85", + "0xa6dd7816a96af369540013a456722434a5a918673564519a253ae5669ea3afeef509e29f35c6cd3ca7fd29f97987cfe3", + "0x9500df9a85cd8ee801329651bb15d7b77c4a59216005ff61769cdbf9de18da2fdb0d1afe6d5d922353fe22bdc8a8f772", + "0xab7c058199294c02e1edf9b790004f971cb8c41ae7efd25592705970141cdd5318e8eb187959f1ac8bf45c59f1ead0d9", + "0xa9239a0e1250d355615eae3f43a9395d5c2943aaa37f22a1b36ed04aba544b0fb83cb5fa93b76c67c13d3f73e5e845cf", + "0xaa318e541c171104c94abd4110f9269efc88ce98ed472aa52ed877634291f6355314b915230723da00069eebefda97aa", + "0xabed4c86ffc31393f53cc0880ded0c2865df897a56a98a5ab04736623957bf489fb174d9dd8cfcae17c2abc2a77d6914", + "0x962e2c706de6e0894666a9a0233760421bbd8cb8066e4e38259554ec32e25d257c4a06b387f312238743a6e4ac42602b", + "0x974a5180e55eab23d4c973fbee6ad1010335161ecdb849fe6520b34c1f96530a4faff80bd738fe281019b79d968c472c", + "0x91013e0d537fb085a49bf1aa3b727239b3e2c1d74c0f52050ff066982d23d5ee6104e70b533047b685e8b1529a0f14dc", + "0x8db8b6e067931e8923f8c1d95fda2fa2ebe6ce17a04f420f106eaeb08e98748e3865b9e5fca18494c2359d35627c00b8", + "0x820cc2ac3eed5bce7dc72df2aa3214e71690b91445d8bb1634c0488a671e3669028efbe1eae52f7132bde29b16a020b7", + "0x8ebfbcaccddd2489c4a29a374a2babc26987c3312607eadb2c4b0a53a17de97107c54eab34def09144b3098c082c286b", + "0x838d5eee51f5d65c9ed1632d042bb7f88161f3789e6bb461318c5400eaf6728e7ba0f92c18e1a994aa4743145c96164b", + "0xa63868892ce200c7d82d7ae041db371c91ce03282adf796c8b1a1652732ec77add0945727b110339a80596c367c97deb", + "0xabf19b2cb84bcc87d15e12844d053237a139d76a35ca14250cee2415ee646d98bf97c42bd2645f0790ebb388dd561d59", + "0xaf6e6cad67e54efe92976851bb789d79debfa2c78757103b69e43d1aac3d768d496017b8402ebc6e0b176be5aa6eecdb", + "0x912bcfe28f56098d7f75f90fa419232787905e1a26170f274d2cfeac25636a21081b07065a7f515188233575cd85cb4a", + "0x82fd68050fcb8a203b78217aa89ccbe01482f5ecadab015ec13b605f64ecd5ce7b98e3403b0681de2852570bc7b7e845", + "0xa10f19657a9bc5a5c16ebab9f9fddc3f1d812749cd5d80cb331f51de651873ff899e0670f1b079b29a194572de387a17", + "0xa802b9ffbd4f01b877791aba27da972be4bacacc64a1f45687be4af01b84bd4b83fe2ba1ea78e29d7683f6c777ab2543", + "0xb4f034f2b53ff9989e8a0f12c1484c58ed7942432a429af58a6659feaf23f7d2bf20ff7b9a7e0a28a2e09c9a730681d8", + "0x93418c312300d4431dd7c304fab1639d8ef927d4a36518642c574769953321cd0516e0dad739d6e2ccd315ff1257275a", + "0xa3681ac11c5426767a2f1cdc89557746d5501d70add50bf4f2c9165fb5055af0644f3013603209cbaa0414d3dc794ee7", + "0xa3c6cf60e891f64fc384b2d35651cc84976fa98bdba22a196bf70d95a68575a7451854c5c30c469427f63698eb574613", + "0xa07b35ec8d6849e95cbd89645283050882209617a3bb53eae0149d78a60dbf8c1626d7af498e363025896febdba86ee7", + "0xa322b5d2a6e3cb98b8aaa4c068e097188affef5dec2f08c3e9ce29e73687340d4e5a743a8be5f10e138f9cabbe0c7211", + "0xad7d2e3820e9c9afb8afe3d01b62bf7e05d1d5c3697045562059a4421892e37515ad87251c780f917e3cc72fbd318be5", + "0x8a3987de0131b7461bbbe54e59f6cefe8b3f5051ed3f35e4ad06e681c47beee6614b4e1fba2baa84dff8c94080dddda0", + "0xa3a7196fecd25e9cc7cac79c35365676e48c7be1493df255676adff2209c0719f2190ceff3ce008d08efa07c244c11a6", + "0x8bfa106ada4914419bf1d8900c5981dd5b90c3023196d7e918d62879fc3a575bd0a25f939366f7fd2240df6108b069ec", + "0x81534e2a182da0c6831479c7e722953d267ba9c63a204ac96a178b1dc90d0a6ba8737002688ba5f102eda5669249f114", + "0x97f1a7370b4f5acf83b466f519da361c366915f560385dd7eff9d53700ad81b25c9862bc71d35428e82372a5ae555ea0", + "0xa7a4330db26ada2aba7de071bd4cfc08a8a8681d6723fa209bbd0e852a7cf315b37ec719289afab0970dd0ff00dbe935", + "0xac568059f6526440655078ae8d5c13860cb7ec82c36db744a447f98721ba5ca88aaacf377ee9dfa6dfb8313eaac49d9c", + "0x8bb045e7482b7abe670d72eb2f7afe4207b5a3d488364ff7bb4266f8784ea41893553a4bf7d01e78c99ed9008e2c13bb", + "0x8cc8d279ec08d0a5a2a09ad07fabb0122eb65f48da2571d83f86efa2c1c5bc51b04ae94b145f0a8ef19a3988638b9380", + "0xa05273c40fc40019bcd23f662261757970f3124b77a9fa7c387d74ca32fddb065438f9b456e6b3302517d7492296edce", + "0x9467b7d5d90b8653b8a2f248f30475856e28407dd3fbc4e1a84445a8f2da5e181796e1cc5c293aab60a6f8a8aba1f4e3", + "0xb07d7c3f1d486f5657d5935e3d67403024ffdcf25da5c460fdadc980d8d6b931de623c4f8a3da5eb6af346193eb36573", + "0x97c36f7b0edf0b51bbb2ccb04494adbc944406ab4ff31b2195565b766688b7b7047c2be68a853436b3de3ee1ae449937", + "0xab671eb947490c43fd05e42a787344b21af89babb705393c82748eaa0cfcf80bee498d275a1eaf1d647ca3b2923d76ea", + "0xb560c33950a355119845f63defb355807e56773f636fb836f7746155fad070e384fc1091b8e5c057e4cbc7da9275ecf7", + "0x9545f94c4e9056e360dd999985f8ad06210556fa6f07cff77136a2460605afb0ff1fb1d1a2abe4a4e319fd6c29fff80f", + "0xaeddb53c6daac757916039e0992ec5305814e9deb113773f5ecf10355cc3723848fd9c55e0a6ffb6bcff4ad65ed5eb3c", + "0x931923f0c1f75a197e6244d67525b524ceb07510a6aae8cb3d56167cc1aacc76d26fadfa1bdfc55d8439c6ee4d4d8174", + "0xb7de6d7a4afb05984dce153e5570b104338265e45c8f0156f4d45c458f47add234a479e01c02d3c1817c170b5b65b100", + "0xa8d15870aab9cef8e116a77ce29afab4c1ed87e5f61f7fa0166df0be48c31b5bcc2eeb76a6da1f056a5518f665443054", + "0x802f512bd4a97487491c0e07ab8a94d5580c72212032e34c42b7039b860a7cf8f1e2e24b7185b80d3ee00a9cd4c92903", + "0x87144976cb0d55de66f612725c6d89ab35a5222e8b003329b898e732629f5b7022a7223c9cc9ec820d3d1553e7b2267e", + "0x8a99b6193bd225e9b9b1f8dd668e2a69fe0c5284766d622784fec2bd74e65bb059706de24dfb2fc222568b663ee05c90", + "0x91bf4c32fa8888d3829d3c33e12550d2ecb70762d5eeecd044d4902e4a7f8b7a2592cf6cb7736eb6bd9d312f85c2777c", + "0x941bbb3565f0019619aefd551a471adcf28a089bf272bfb2c84e47312d09263f3a64da317e940d857ac72191730c294b", + "0x9793a74fa578ace75b083578277a1ae8766d41a5c508b0f1135fb97dff1d0826002393a7276b18cbc4b3c5671360ce0b", + "0x854410e6fb856da8b997ebf28ae2415ce6e1f9f6a4579fad15b5df61709c924a925397b33fe67c89ffad6143a39d756a", + "0xb0d4231814e40e53ab4eed8333d418a6e2e4bd3910148b610dec5f91961df1ad63f4661d533137a503d809ea1ad576fa", + "0xabf28b692bed19ee9152d5f8ade776f0a42a9762ea5f37d80f47ff219fc0a8ebe5e6eb920453e1ced3ea5bba19ae5be7", + "0xb09c1f4dfa1f003396dfb6f6201a4b2c9d3f9c7242085639b3e2566b46d68942d06b984226f2f45396adef285a428515", + "0x8cde690247d4831dfe312145ae879f4e53cb26641b3a3bb9eb4d590c56c11ece3cfe77180bd809468df5cddaea4f5ab1", + "0xb1a3e6baed1cc37b9a67f38648f4fe365d23fb982027ab4202c3392d5459d7995264c2e9bb8e821a3e75e71390b6dc7c", + "0xa211120e1bb3b10138df1fa58efb009a298b8771f884b82bb3de15822b1252124a68f3980f96122a775fb96f05ddc3d5", + "0x8c7ccbea47f3fb6c15863c84c99a9094a00f2b5836200eeb73dbf84fc8e7856369dc7ab09f9d51ae42909fa94c895afc", + "0xb4b7dbe1146cf5b3b7bf3fae3c3556620010b2e7e424aac8063d5c24bf22b002f36b5447dd3fd1f918e5780180a16c5d", + "0xa3c66439724d737d20a640bceed8671b20cf6795671b6d442ed1ea5eda6723ae559396c24f44e982ba7751dcc6adef5c", + "0x89e19b665ce7f6617884afaf854e88bb7b501ecdd195a5662c79802d721f5340eca8c48341ad1d6c78f519f82e5a9836", + "0xa22b351f139096f9ed5baafe27affde1351685765805d458381e392e0bfc51cbd8af5909b3a1da05d0d176877028eb32", + "0xb2baa7eba496ac4ef60ad8ef27a9677f9507820d95a1c572d322621c4d0226b36146bfc3a9ca1645d123acbd945de3f4", + "0xb00d95908e72c6051478a422eb2231b5f797c2fa5c696ed1e6b9c9996ba1d8236f512443f18c01ce63312c38fa383fd4", + "0x8658925a5447c8013ec33fa917bcb5fa418af910cf46d840ffc8b8a4ff471d4d1ca993839121b69de1e6735291e5a9e6", + "0x83a798f47a4f62dcb8b531d463b0fd4a876d47a8ca990710290549255033c909de709471b4e823a60bf94d8baf8b5acf", + "0xa131f61a215d689938b1997ec40357b939bd2a2565df04cea7800674e23ba068d0ce28bad32f49f3099434f34445eb4a", + "0x9466afdb35d113733c0bc10b2e08ceba1132881c126524417602fc5a3fa4a626f6474b5f3f6c6dff49d74b9d8e91051b", + "0xaf51da717d2a45ab96fad5d9317ea867ec4c6a411af6fabd72e568230099a04c036a0f114158815b1a75da6474dc892a", + "0x971997a5c2bbce1e8e1520da7cc84d59d6973773e541758486856856082bfba0dfc3f8ee578c69a4412b74a5fa7c808c", + "0x92d6f0ecce7dec409f8e6217cd265869c4aeda70c5b4052ccd84d27b9c187b12a6317879aab2a551d7b90d77c750eda3", + "0x951aa38464912a29df2101c60771d6de7fadb63f2db3f13527f8bdacb66e9e8a97aaac7b81b19e3d1025b54e2c8facff", + "0xb495404544c9335d5f184cd6873299a93174905fa34c14092f67d9b8545e71fab29545bc337e380dffcb533f7390e9cd", + "0xb8fca0f7bc276f03c526d42df9f88c19b8dc630ad1299689e2d52cd4717bbe5425479b13bdf6e6337c48832e4cd34bb5", + "0xb9eed89e003894ad2cc9d9b93a45247e1367ac69a00b0ed5e3280c1188b4cb90eb870d449b83a852a798bd02f9d0c813", + "0xabbfb501071148e98b6aa56308197356fd993c93e27fd58987eca82036c1ae0ea89f9fb1a06c82851234643904c58453", + "0xb67146b202afec0132ac0070c005cf664081e860339f8f4d45ac3e630dda05560936e646673e652d08cecd8d18fc64da", + "0x86fa3d4b60e8282827115c50b1b49b29a371b52aa9c9b8f83cd5268b535859f86e1a60aade6bf4f52e234777bea30bda", + "0xa97b80bf780fba51a5863e620317812418204d3d5a1001710aa0cca383cb40855d9da0ddfdd40e1d2e9336a4543ca1ad", + "0x932d72ae4952031f9070b1d7cc2e827e06eb606e0e10594d19f56d9460cb5d1675bb3e19ce5752512e3bec256a0d88bf", + "0xaa48afa77d5a81cd967b285c0035e941ca6d783493e1840d7cbc0f2829a114ace9146a8fbe31ecbd8e63e9b3c216a8c5", + "0x8027bc62b59f9f15613e38da74ccc71fc3eaee26f096d187c613068195ce6eb64176013f2d86b00c4b0b6a7c11b9a9e5", + "0x91647cabe8a105de929a10b245d264150f6863fad3b057593ca7f74cc8f78bb790492da309d74109805fe352d0c70448", + "0x805c06e565ee67cab0cbccb92b6656fdb240b430766eade3c6b0a0b1b93c840e2b4f028601451dca135c783239463880", + "0xb5988ce430afce35829804e0afeeb91fc578534bd9ebe64717b51dd0d2bfe32ff028b210850ab272dfce03fe22be85c0", + "0x997a91da55801acb6134d067ad65a9a44ead0b53d3871bb97b46ec36149d25e712d7230d38605479796190abd3d134b7", + "0xa59a20a570769bd011a64917c77a134b7a741a202e3f08123354d1c2dfa8577d00b29dcb75ba65b983a9b628e887ea24", + "0xb49593ea6040ce82cfb5aa2881a4b0c42b78aa9fc8467d79c8e4a8ae4ee7355842841c8e1cc0558362047ed80de44fd3", + "0x938dc1e182f19f40ba9a4eb5530407e58dac27a237b259fad4ff070c8abf98a0fb107db6017e1da25a855c8867e80bae", + "0xab6e3180dae399d41243f23545e5e6d118844f9b8edba502a3503fd1162ed826f9fc610889a1d685d374b6c21e86067d", + "0xa2053719da2b7501dab42011ae144b3c8d72bd17493181bf3ae79a678068dc3ee2f19d29a60b5a323692c3f684f96392", + "0x8171f20c020faae112bb92ca213c1df5b1050151496c70db5c5319212bada83b120d515bd7d8b24736090c574e1b7203", + "0x9405a2882279c691a42eb71c928ecc1c1a054927471e5ec7ea1f95283235349ad0c9888803e2fac748c73d241931eaa3", + "0x8e2c1e17e7d9c7ffe56334195256b353854b2724bac6fcd6ab2a595cb34d541ae5e0a863968d42b0a07971fc26323251", + "0xa2040b80ceba0fad581f904f743e620f78172af026a9ad5ecc2f627f0181ab10c6cee238b07d1ba0e459c97bb85f7f48", + "0xa70a5be6546e4f745aeca090061792584915c6a075bbca14c3eb34d0fc2a7b7169b20199be10b242fd0d7923aa70e71f", + "0x991e0fc7fddd0e316cf4bfe20478f10c15b8bbb618e6be52a5095e457ca52db8adc008f47d4624b6cf4f7d6c2b94a29e", + "0xac3195143035cdb4ddcd5f93c150035d327addee5503ea2087b1a10b2f73b02453ddd1a94d8e7d883e365f9f0e3c38c9", + "0x877a37caf56ef7cd5037118f797cde1caecf472fa6bca7b2718ea55715136a2672d494c07a237606c7e7430a96a945e8", + "0xaedc2d47fa2662be6ab58ddd3682bd5e53f508162968fce8326c75f92fb3c1a25c4d4d0e6904f9b6cb1ccbaaa9dc28d8", + "0xa60c4db2f208cda284b2a2def60024f3d88873191a88f6b71cea186a79c8c2af4e84692f619b17d9dc2f5f3dd20c7e35", + "0x871e70f0446749e5d48d0c113a27e2e2a13e88e703764dfbdc2bd31e921e6a549c54afab53968ec3d856c5e4e6d029fb" + ], + "aggregate_pubkey": "0x97d9249e0a4c106f7457fdc2c7a8914425e11c3f87576cab03c9b4ad7e8826966f60c409c04c7ba5634a51929e6baca6" + }, + "current_sync_committee_branch": [ + "0x807ead1c52da7b6ad9bf63c77b5532eba40be5df636d804f1d5cd91cf7284254", + "0xfe6fdcbb3f8f0433635cb24351ae1dc1c58896117664a01e5558e64445f45355", + "0x3512cb0b87a5cc0d2c5359d27a580d042dc55527e0c2f7b14bd923d83d17aa21", + "0xc5d918a6d6faf80875eba24d8e59b818068da4c60bb52886759aa9638f129831", + "0x752871e9d8cc403490f1c7cc925d73d57dcbe3a345c60899a683ada955e5fc38" + ] +} diff --git a/src/ethereum/mod.rs b/src/ethereum/mod.rs index 87e030a7..9f7391ad 100644 --- a/src/ethereum/mod.rs +++ b/src/ethereum/mod.rs @@ -77,8 +77,6 @@ pub const GAS_PRICE: u64 = 160_000; pub const APPROX_TRANSFER_GAS: u64 = 80_000; pub const APPROX_CALL_GAS: u64 = 100_000; -pub const WHITELISTED_RELAYER_ADDR: &str = "nomic124j0ky0luh9jzqh9w2dk77cze9v0ckdupk50ny"; - #[orga] pub struct Ethereum { pub networks: Map, @@ -321,6 +319,15 @@ impl Ethereum { let msg = conn.get(msg_index)?; Ok((msg.sigs.message, conn.get_sigs(msg_index)?, msg.msg.clone())) } + #[query] + pub fn block_number(&self, network: u32) -> Result { + Ok(self + .networks + .get(network)? + .ok_or_else(|| Error::App("Network not found".to_string()))? + .light_client + .block_number()) + } #[query] pub fn light_client(&self, chain_id: u32) -> Result { @@ -610,21 +617,6 @@ impl Connection { ) -> Result<()> { exempt_from_fee()?; - #[cfg(not(test))] - { - // TODO: remove whitelisted relaying once we have proper proof verification - let signer = orga::context::Context::resolve::() - .ok_or_else(|| Error::Signer("No Signer context available".into()))? - .signer - .ok_or_else(|| Error::Coins("Call must be signed".into()))?; - if signer.to_string().as_str() != WHITELISTED_RELAYER_ADDR { - return Err(orga::Error::App( - "Only whitelisted relayers can relay returns".to_string(), - ) - .into()); - } - } - for BridgeContractData { dest, amount, diff --git a/src/ethereum/proofs.rs b/src/ethereum/proofs.rs index c07f2fc2..b426698c 100644 --- a/src/ethereum/proofs.rs +++ b/src/ethereum/proofs.rs @@ -24,7 +24,6 @@ struct Account { _code_hash: H256, } -// TODO: remove unwraps // TODO: change error variants /// Encoded raw merkle trie nodes @@ -75,7 +74,11 @@ impl StateProof { state_proof_for_index.push(storage_proof); } - state_proofs.push(state_proof_for_index.try_into().unwrap()); + state_proofs.push( + state_proof_for_index + .try_into() + .map_err(|_e| Error::Relayer("Invalid storage proof".to_string()))?, + ); } Ok(Self { @@ -93,8 +96,7 @@ impl StateProof { state_root, keccak_256(self.address.bytes().as_slice()).as_slice(), &self.account_proof, - ) - .unwrap(); + )?; let account = Account::decode(&Rlp::new(&result)) .map_err(|e| Error::Relayer(format!("Failed to decode account: {}", e)))?; @@ -114,31 +116,36 @@ impl StateProof { root, keccak_256(dest_key.as_slice()).as_slice(), &storage_proof[0], - ) - .unwrap(); - dbg!(&dest_bytes); + )?; + let amount_bytes = verify_key( root, keccak_256(amount_key.as_slice()).as_slice(), &storage_proof[1], - ) - .unwrap(); + )?; - let sender_bytes = verify_key(root, sender_key.as_slice(), &storage_proof[2])?; + let sender_bytes = verify_key( + root, + keccak_256(sender_key.as_slice()).as_slice(), + &storage_proof[2], + )?; let sender_addr = EthAddress::decode(&mut sender_bytes.as_slice()) .map_err(|e| Error::Relayer(format!("Failed to decode return sender: {}", e)))?; // check if dest_bytes low bit is set - let return_amount: u64 = Decodable::decode(&mut amount_bytes.as_slice()).unwrap(); + let return_amount: u64 = Decodable::decode(&mut amount_bytes.as_slice()) + .map_err(|e| Error::Relayer(format!("Failed to decode return amount: {}", e)))?; let dest_entry = U256::from_big_endian(dest_bytes.as_slice()); let dest_str: String = if dest_entry.bit(0) { // length is stored - let dest_len: u64 = Decodable::decode(&mut dest_bytes.as_slice()).unwrap(); + let dest_len: u64 = Decodable::decode(&mut dest_bytes.as_slice()).map_err(|e| { + Error::Relayer(format!("Failed to decode return dest length: {}", e)) + })?; let dest_len = (dest_len / 2).saturating_sub(1); @@ -158,8 +165,7 @@ impl StateProof { keccak_256(BridgeContractData::dest_chunk_key(index, i).as_slice()) .as_slice(), &storage_proof[i as usize + 3], - ) - .unwrap(); + )?; let chunk_str: String = Decodable::decode(&mut dest_chunk.as_slice()).map_err(|e| { @@ -178,7 +184,6 @@ impl StateProof { verified.push(BridgeContractData { dest: dest_str.try_into()?, amount: return_amount.into(), - // TODO: check sender bytes here sender: Address::from(sender_addr.0 .0), index, }); @@ -198,7 +203,7 @@ fn verify_key(root: [u8; 32], key: &[u8], proof: &EncodedProof) -> AppResult [u8; 32] { let slot_key = Self::dest_key(index); let chunk_base = keccak_256(slot_key.as_slice()); - let key = U256::from_big_endian(chunk_base.as_slice()) - .checked_add(U256::from(chunk_index)) - .unwrap(); + let key = + U256::from_big_endian(chunk_base.as_slice()).saturating_add(U256::from(chunk_index)); let mut key_bytes = [0u8; 32]; key.to_big_endian(&mut key_bytes);