Search in sources :

Example 6 with StandaloneBlockchain

use of org.aion.zero.impl.blockchain.StandaloneBlockchain in project aion by aionnetwork.

the class TaskImportBlocksTest method testIsAlreadyStored.

@Test
public void testIsAlreadyStored() {
    StandaloneBlockchain.Bundle bundle = builder.withValidatorConfiguration("simple").withDefaultAccounts(accounts).build();
    StandaloneBlockchain chain = bundle.bc;
    // populate chain at random
    generateRandomChain(chain, 3, 1, accounts, 10);
    Block current = chain.getBestBlock();
    while (current.getNumber() > 0) {
        // will pass both checks
        assertThat(chain.isBlockStored(current.getHash(), current.getNumber())).isTrue();
        current = chain.getBlockByHash(current.getParentHash());
    }
    // will fail the max number check
    current = generateNextBlock(chain, accounts, 10);
    assertThat(chain.isBlockStored(current.getHash(), current.getNumber())).isFalse();
    assertThat(chain.tryToConnect(current)).isEqualTo(ImportResult.IMPORTED_BEST);
    assertThat(chain.isBlockStored(current.getHash(), current.getNumber())).isTrue();
    // will fail the existence check
    current = generateNewBlock(chain, chain.getGenesis(), accounts, 10);
    assertThat(chain.isBlockStored(current.getHash(), current.getNumber())).isFalse();
    assertThat(chain.tryToConnect(current)).isEqualTo(IMPORTED_NOT_BEST);
    assertThat(chain.isBlockStored(current.getHash(), current.getNumber())).isTrue();
}
Also used : Block(org.aion.zero.impl.types.Block) BlockchainTestUtils.generateNewBlock(org.aion.zero.impl.blockchain.BlockchainTestUtils.generateNewBlock) BlockchainTestUtils.generateNextBlock(org.aion.zero.impl.blockchain.BlockchainTestUtils.generateNextBlock) StandaloneBlockchain(org.aion.zero.impl.blockchain.StandaloneBlockchain) Test(org.junit.Test)

Example 7 with StandaloneBlockchain

use of org.aion.zero.impl.blockchain.StandaloneBlockchain in project aion by aionnetwork.

the class MainnetConsensusTest method testImportBlock3293724.

/**
 * Test for importing block <a href="https://mainnet.aion.network/#/block/3293724">3293724</a>.
 */
@Test
public void testImportBlock3293724() {
    // data extracted from the main network
    Block grandparentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90cc9f90790018332421aa03282731b03ea7535997fabfa4014f87c79509033825dda9dce865db4afe7b528a0a00983f07c11ee9160a64dd3ba3dc3d1f88332a2869f25725f56cbd0be32ef7aa0ee55bfe4efa56372e0669bba4288404872d46adf42789bed81afcd269e2f52cfa02748d6a9fbf8f6983c20c5c16a3804f556f359aaf625ba7d32ed23059bb8c873a07588383a48f58213ffbdc1375e764d85268a24586e0d1388bf28db27512d861fb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000007b6ef4a041494f4e000000000000000000000000000000000000000000000000000000008302904083e5004f845cefbc9da0e23300000000000000000000000000000000000006000000c8cce00500000000b905800153008606146cdb61b13b94223775fd1caa2abd7bd30edf3d4ec2030728182846297056024347e856f1ee83137ac0b24354457e3b9f7e386f8559797a304674f3fd2581853d4c2507286341c347d2f535dab9890b6dfcf212f1ecbe3f2189547befd362bfee68dc5bfb9abbf23217d9f1aa33c291b1a34bab35aa1dfb25d677e66f828a1c6c4e12fa499c4139ef74538bdff568c9ad18ec99812d3e2112e208fbacef5daa60002f09204a83d9b7ef550379ebd06c03aff26539ef393912d5954c4280be2dbc11a7fe05c60af08ebae8e76490e3d3b9d6c46667818a207533ffa1a42b09d2e940409443f5616d1cec76c8fe4bae125cd7d4d81a9f5dd84f9be3999c8632a59b8fab234a05573378f70aa5dd2a287de7cb4247f8822311f124b6336b6528788ff04ce83eec8399a2662127aee63127e86730945afafc2d5a672a3ebfe38954937d9449eb49a66a3a46b61c8968b08f54831ec6e6aaafa3b37a9c01d229df108365b8b1dc09276a45091e0844b8b679aa0a984a1f7b9b54b76fe1b32890a1da9215b1f43aa81e04fea2ee8120ac4563261e1fa59631e67c1f1abfc1271013b48870b9f66ebc1a2abc7bd7e0be2ca4fffea76f0e097faad2fa373efc6f370fbbce1506579035f4ae9f0f0245ddef2cea7cbaf69340649b841adb24696fa53e3978b7186d8d4d74b8c6f1bc98a389397ccec6b74b17550106917e256e00bc68ad6fe5524a41b9c683721a1102e6e4fcfcb06e5e07e32750f7f9dbe1ca7f75af93330a7f73f50b36f530a5f39e1979b98aa5753cf21d5d740a5310d0f4214f3e1fd85328c97fcad8f2ae3498f4bb4aeaa6f220e4c02557ef6d7211fe9accee66083c2f3a0af18ba471959b1bbee51d20bc773f22989c43e4069f3f91071ede1c59b2fa01f3501dcb00cc69ac193319aa27c7079a5a833875e779e177eeea4d1eda0455a9099047391fba07a5210f9e5a6154b17bf2e6f7e38ea959d202ba052ab6238ae361a07741301286ddb41c1296228715f17d582192ae4f3503971d76336de5d2bba62473f019b0ef0daac732c9a10879237f3f9289c271eb379a324aab654c631abf342dfacb53bfb2a3fa9f2441bcf4ff0564dd46ebbb1544bb35204270f5ca48d71341a7daa108e9dff84a08b98d7ce3d33a6a36c6659e466bbdfb6a0ef9da606e329c0a166bf128be5a321a13e188568cc11ceeafa255a4ca1b660a862d64927f94c4110ed5d99d0641d7199b21a81f9d905e2ad2a650a3985df527201f08fd856492c9b5423098d13e0d654d559c47c837de5f15e488e9a536ea6b9f18922ba1b6998ce3cceb29098e211de90e97f6b1e43cf82c59ee696b28c86b1162c7470c173dcbefb5a9105d6fe97e0a1ea966c9450df20d161509bdb82de6edc5b783202baafe82bc1ac6fdf34dae193b999392b86c297406b05bf6b1fe701aec9cfd9d53380a4a162754b2a75e3bc36984e6a93d994499ba601f0670ce468874c0e4bcc7b6416c8a9dc7451cb2af1d690c8729953ca12ffcd5ae851e701e89b7a5c193386aeb0ad8799d5b8949153dae6b3bdfc3975f74cdfa63a09f6f161388916c0a8db85ef582e94e9f8169cdfc75d97c11916066da581e33a2b30631997b2a526987ad6f73d73480c2b4f5e5686a62ed4a4b8a0ad7a73723c2b4099e141534cc6c8adc22be7aee5d225a1d6d7d2b90b7ee353eb3e5734a26a74fee08c168304bbd05a7d3a37bfe2f0865bf37779428121e56494da2d3081d1bfbb6b952d01c58d91b0ff99004f224ea66d2ef45256afb4f7f7b2e1095ae577d0ad58cf7d69a32b10ecb88d81e46fc0f9615fbe4c352b2f9cbfb50f2328520ce8f5780b53e417e0b8f6aeeebd0cb8cbeaf4c760857c5c83a2601e962bc17c0de58b635256ef1f2456f250f567d5745303cb8e90d3a43bb062653c07dc0b90dfbad2b61688ef6fcc86816c97b702d979f0d6cb880857a3739a10908fead0e65f90533f89e2da0a0f43b9b1476a01c5a54f043f43c4c329a2bb3548d2cec38467ba69403d587948232308087058a1916434c70830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a9a4d4dc5fd60df35ab2a96bdf139db1e8f88a8fad3aeaa526834aa695b018e33943b5e68e65a4ba591b4a7f9f5434f9dd32569997e86730c62879080701ef304f89f2ea0a02077a38e7789aa0466b70bc9ab37f5f0d806cd82e74c21622aa814d9881020830132798087058a1916c72658830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a2d3da8caac5a545ac666d815fc426ea8aefc69c3ce841fc7d759d36583515c19af0eaa0d6ddcc41908310545d0f4701c6d34aac8e0235f3cd32e33836237870bf89e2fa0a01ca9a288900158ef711235676f7142155767e64554fb81142323617b78045882ed2b8087058a19174afc58830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a222fb1a0cb81a61c550937839808f1dd15e68545d5a180158d350a3496c1785e9b78383f887c6bb0ab78f8df6d79fbb74030f3889c2d7e6129aaa276ea049c02f8a88303c485a0a02607bd3d3780fbee965b1ae514a406b0a55cd9e981151d59a0db7d0a423bbc8814dd289fdc25f580808800058a1916207aa983015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9ebc4a8505b12d2e62653e8368aac61177212726af6354ad4dce3727c7f036f0ccefd1253e62bf7f7f24f440eb708d906c850c2bd7a10ef78867753a2e97c6a1e06f8a88303c486a0a0583ab8893d3d264a84557bb0e432cdc2df079efd3ba4abe7c971d2423621578815023fffc0194580808800058a191637b43b83015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9eb02ee48b993dab39ca0d528e57cede9062fdb4b29cfa00bfb86b1116bc075881b8ba656b37896ca8f32fbc3dd44f4aa0ead280620fade8c018e807f314ae9e601f8a88303c487a0a00db532ac25cc975c2a6c9f7e69f76884773ac0ad3dcdb9a27f98a4092b2903881564485d1d57bd40808800058a19164fb02583015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9ebcc30d2f1b1da1c4d72175036fecd6deb77b958748267f15b196829421fadc81b42bb4e4cd02ac3425a466e6a930adfaacf53967cea3da31f6950699c22a7f203f8a88303c488a0a00847d17840989a75957ca06c096855c64719b22db67bfaef370378bac87da7881787636d0b182d40808800058a1916669bad83015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9eb404643adee2c10d05ce5669ad60bc5c67d383303a94d51d74280dce58b288816d280d0650bc7e8d2d2c436aa2db9b466d417f41ffa1dc0a453954ba36fe77e0df8a88303c489a0a0fa5db20046053eada12a7be523cec9aca8891f69d81d6d34b09c9a23c89c5a881516f540acaf4200808800058a19167e9dfb83015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9ebef5cddf0271423bfa5f9f735dc48e5807633097ca03bf93a167b5f97b780713f0f3602f83836238ca89728260abb3e111f84f4928e43a13523e24497c30c7902"));
    BigInteger totalDifficultyForGrandparent = new BigInteger("38070954301112");
    Block parentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90834f9078f018332421ba026374f5d064482ae94f2e4d1066c36464de46f2e93b462179a130da258a72dc2a0a00983f07c11ee9160a64dd3ba3dc3d1f88332a2869f25725f56cbd0be32ef7aa0038f86baa46af4ba35ed35a5192e4f6f253833eb80e0335849c027b164a4a494a040086d9fcd72ba449b9103146fe5a84a6461748be8a790fd842154c3971249d8a09f8704e2d467487158a7a10257ba0a03733970643fa82e826763b5c902dbdd5bb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000007b501aa041494f4e0000000000000000000000000000000000000000000000000000000082520883e4c7ea845cefbca4a0e232000000000000000000000000000000000000030000002e6b050600000000b90580007cdb02edd7491a689a6b281e151fef193d55be6cbc5bf98d9d2ff74e295d3a14839dff585f0acffcf133c503f8a4e814132f45380efe14082086f00b4b68af75a325761ff5b2fb007930f0566e095a24c1dbe74179813f02f5065a4b9afc3f787b0e1107a614c6968d4f63e0bf199f9bdc0ee61a4db47bcc36bde716bc23f1e45559d70adf19bf31e67865a0de492cbf11fa4cc5c9baa616e3686f2feb5d6aa25bf3cc3971e66e64808ccd39f70f230527dc313ce2abf10c27f505683338585afeafb32ce41932314b094430251af9475f5d51fc781ebe4cfb60ac056b769a675815f57054240711f3597387596ba2f7820903ed67b4d404b2dc745636becd21c2c7a109f72d3a0a55afae4fb73afb32d3b93a32cdd1e498e5bcaea5fb218a38b85f4b22c56d8ac65dd52e2f57ea17cd776f7347c41eb8413c11ac3e64f34dc5b7d2fcf6b7c99b048c5ed4333d21f75fea7f1f63884e8e22672be9dc72e2c80269eb28e8728e9d12e9ac60dc961bbdf8df16fd75570dd3f3b866b11e3617689e8ae8db14d76b2c61bf11171df2257cde4e53aabc97174dc997055cf5d94f78a037246d87e9358567267a80604c5043d0e1c73f6df4980314ebd8bd0836db6c69bae24bf7c6ddb47b663d759c935392b5db3de55190aa5c3397c833b9bc0a3a21376d722c82fe43d72801fd648a914dabfab5fbf99cc03ef8fd309d4ee03f98f1bcb88ef442fe393542943370ba47af0391ec1be3b03de71638f24cee365a3b08ef4e3cf94d041d543b7363b65b1493bd32f6f3ef2dc55becab03291cd74fdfdff661eb5e460d6727b60c7dbbddce32e56660041f5abd88079d39337d681139e64d4954426bad31049565ad4fb2c39faffa400bbde77cd473b2ce561d7225a032bd0a185fcd356e2637f99e367209d803f866740a8d74bce4125e14a4914c35205613aa8a0d0b3fc65a241212afa1e36461a65b023f41b982a02909f2ad9d7100e77057d334678bb4ead302bb22810889bc0c6972d90ec120e96b668d461e086f1a5bb6152c59bab4a7119a0ba4b6bdefc4efc03b9fd45783462b30fec593feefb80eedd272d3829282daf7203210dd42a2b797702bf5ee0bc5fef703a822fc7427ad75a43ee83b7f4cd23d39991233d87e947b2d9a3822957a644ec2a9b8c1583865d9272e8f5f2ee813ca3c6b042ae183b4ddb791cf7282ae46f0c1664be6e502f914e1471c1a19542a2d96f2b73a08c56b0ac8c76cbdf07d6009c759184b435afca8bc881381320de39331b13f824841e452917647d12beb2ea735e76b9ffab613f7a1a081365e497d7773b2bd193d4d3c591be45934c01999609e51371dfba1d7d8f525645a12447f9998b597252a75c93377922754c5c8c264166d166b03ab4b4b738db647a418d60d81486dfc053f94f41e9b5f6c538735e47cfd8e2ee362ef28c7af0837ac83334c4290d3f3cb546c09f4875cde35344955023e466f01b83e74c13bded97c952e12441e9a7aab421cf275ae0b4e710079a10d424a16ce219b1f1d7566aced64d3f70414601978a6617b2589440c26fdcb3ac223d5efa0c4096bb791364a0b33efc7592106ef1cd43c1f097c239203581fd78d664ef6f18ecf75aa96a08cce3f0ebe6c660882625d10120c435dccd9577301c507762126a9417806e65d0621497d5e7de6ae866ca6a4e3b9dbb37539740ec007dd0f5988a8a97cde213f32994f48c12ba5a4a0025b59c3a2c5321f69802e6f05c617128db14177c852047ee2cf092419c25208bc0aeaf6ad69c2de63167c770b98475d1532321d4cefe244925f3fbc680335fd7fc5292672c54496e6306e472c4ee9d7f46f866db0ff02b5074acce2caf99faf7e4ead099a861ba5e6d354e6318109411a40f768b67c66531916b224824e043608f588d5113347cd7fc18e90a971072113a2870519ed56775727269f257d8044014e75bfa14151322775f8c92033556ef8a0f89e30a0a0d61217b261d6a40085246c2fe151bc7536c1a0867b698212e179a21b153b5482a4408087058a1917ceca88830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46aa5d8f0acd09973f54bf23c5b2e48bc1fdc71e72e2f668e9a92d19b267bfebbc311ee38df9fed779a9e32d2075835d72a24cc5a413067cd1eae295189083b0408"));
    BigInteger totalDifficultyForParent = new BigInteger("38070962382546");
    byte[] worldStateAfterParentImport = Hex.decode(hexEncodedStateData("mainnetStateAt3293723.txt"));
    // block to import
    Block blockToImport = BlockUtil.newBlockFromRlp(Hex.decode("f90aebf90790018332421ca0855142fbf91831d2d7ec1e421d397a45e07211ac880b393cc23c8979045d9ff1a0a0305694d2c938b4b383f06946c1bd1363df40c86f721377e321da7abbf831b3a0f30f1664810717a262352f1a04bf4baa93e350a070ae31713dd4de41eac99deaa0b150d8e8c4f8f458ddcfe245695b153ba0e41444f8ea46ccaa73453d372ea996a0e24c156b92a7f6d806de5dd349c768d839267e124d7b34cb44a463c343b466f4b901000008808000000000000010000000000000000000000000000000000000000000000000000000108000000000000000000000000008000000000000000000008000000002000000000000000000000000000000000200000000000010100000000000000004000200000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000100000000000000004000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000004010000000000000000000000400000000000000000000000000041004080000000090000000000000000000000000007b501aa06e3231306b396571753168617368536f6c766564000000000000000000000000830b5e5483e5011b845cefbcbfa09a410000000000000000000000000000000000000000000000000000e7a19f0ab90580003f341d810253379b0d031e7403368e19760f2e04dd49335d9d36e68a266d247fb4be6fc6969e54aafb650407babe35fb6d5eeb35ac8c27c027a9c91adca470597d181650972bc4f7baa03f8371820dd87a9a2790ed1e2b0c1b74bb4407ef43b1a4ed2dcf931a2a2c49fc7372fe18ec435e6e4741897ba2eb1e7325573e2365d431365015aaa59b1de1ae4c2219e81b242f4d19671e00f8c73a17d175371e92e60ceb72a976775b143f88af6f2a4a000c1aa6474823cc1c9c8f571459df7d2c02f2a597d8002d86f13e65b8ace4ee49cb5d483e6eb6792e9b6793351466027a5927818831b8c46fcbee439287191d33da671ba28dbf88875404ac15a7490916ef7cd7c94c37994110c2fbc41dcbbb98bf433e19fb538e02d84d07a24ecf3bb593134a2608b9ed5f894646bf5f0ee48e38334ac11d93bbe3e4e87f5aed0a678c52dba39c5d341cb937b427380363bf039960ac923473bcc20e89cc1658b36aa507b5292ebe07166d5f2e3b86d12b56d5de46efbc629652a287dfe91591d02b01e3bbfc0bfffbeee4863bc46510bcba6f9b57509b26d20e6fb53afb0a1703d1b5dbbc3721db7575da167c2ef2408133d36b0dd9d24c6d1737095b5177ef50f117c7b8fd6dd5aea484e745a1f2075a3b40d3b8643bcfa07b90bb85309af7a5c9366a2c96470ec0ca73f59b49febc4aac228b09e3a39d2088777dee2117627b223d1e8db8706736bd8663b1e634985fd46207fd6a0991f2002c9082a321b0f616ee190fe92e97c42baf89ce3a15a82e7eaf4a5df1cdbfd35a7d252c77110fffb09e2a63c8a6e02acf2640c5245b7535d3696e0e66568e38e74ab1467d817e95918bc2ae1a6d4d2af1b40de0227d0ee47bb01496281c5b26a1ee5617eb3cfd550ea0c3f724932bf01b82196d8103f78c5b5862374a0a2664ffa3d2e38159d4863e79dee295bbcf5710bd68ae3b1c13a96157a2a3e24bce4325e1e8e0477f6661727000f1aa105ef7c072bcde6b1147847139c57b502a250f05eb92684ef2be2b940e7d0cc591e994ea9a9035ca9804af9c89b20697a8fd10c05667bf7b6f6ca2e37dc0c66d226fd72e37c700a6b53d731ad9ccdc3805f96770eb07a3093d6840d4e7cb51081a4d987abf16c6dd5dc92945de03ba592579edb3b3bb6463d635d8165ecf1a3ae719a0c988a22bd1547979fb83c167c9380d43f1be12061e787e3202a65c85b67edb445dbf85c1045769a106bd0284964810612226bb683224f92f7ecef53292e62e11647c3a843ccc47f9f9b0f968627b5858f8ad8ee466ed1d6e58fe54b3eea393925c333d5b718186f81e1e770e34e4d1bc3bf53a966152094b1f3b79225ac1a273a11f0a3ad63bb0978218bd81aa8abf86bc09dc0dd7f754331c35a99a07541359ec6141200413cf16db13662f29bf18cc910cb3e72016e0f4e5402e3114fb24098be8ed9a1fe4253b0853d416e0506530e57b8c1fd31941180db601a0c3984c76afc6dc59318d67af1334dd4a8c7c091a17fc0cddad338a1722efae3f86fe4a807eb1d53d96da0494f91f6c9728ed66a62f6b42df03d9c921fa28e5650d8631766eab97b475c7e49cdd17d23529dfd6b8baaa07450b1a7bf55599a5e0884fb38eb025fc344b7ac72109faf4d8cf98abdfe54a6c16c7c14c9113d51affb394172b7fbc3d5cffa274173b2de4b1f443b6236437553a544631519e5c6a5939f92267ab3e9ca737061e71bea60234f49453f4637818f8b559f9af5893577634b5430e3f9317ad0d27166a24f6e159edc97757a62f84e0c93e0946d99850952b3ce203c415f503034c31798f788e21278ae5dc68833f75be3f0d37dbba240a7625eb9943f50f9c5554732469acfe0eaf1b37329c00b2f952243830375521a4dae8d9cb784ffb4b12f6b0558815fca3275115814288d423f7c8f691483e0b71ad47e5fe3a7637be502119f406eab1607f9c8f8cb75a42852920e276bca0f90355f89f31a0a0fcef3af6c0778c28594d801c94d8d2e8560c67f62706fb05375d94aa2142aa83010cd78087058a19185294d0830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a9b9e1b1075563bb0dbc9237029fb8d4e6417b26a55ad17b70a2443d305c1168471886d8a4dab7b32faf28365db8e0daffec00673aa417b4e832e379ccfd2660af901710ba0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e363380b8d468c5b193a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503d00000000000000000000000000000080000000000000000000000000000000b00000000000000000016345785d8a00000000000000000000000000000032692a6261736b6574000000000000000000000000000000000000000000000000000000000000000000000000000000000001a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a10000000000000000000000000000000100000000000000001bc16d674ec8000087058a19187ffdd0831e5d708800000002540be40001b860f0998449029d2234483bcd1010ff92f78bcec989d421ac920a2bf6bce027c19eee0e250526071e3b026cc609887241b77bc266a101d790db23402acb96e7fd241b22cf105f394e1b1fbac15f4ff4e44806fc6bb9532a30db7967bd7537e08201f89e32a0a0aebd186ed92725cd91c4851c8da0b6b595a61f6aea71b6eee717e2022af1c882db588087058a1918d66eb8830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46ada13a42111589b4cd4b2f54513be65e29a67e04160e1cdab7cad5b83d803e3dc28506339c348ac8cd2dc30d64deae35d0a0c0df07c707840f24cc3485fa8890cf89e33a0a0cddf3a0fcadd1f543c5a9a42eae8bec46a9d40a2f0c21b17fb80b33643ecd18285428087058a19195a5070830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a042bf176313bb1302cd97132d4dcf2c6b7677110a37fbe203fa7e61ae8a8f9cbbe46d119e242207ed7ea720956c8b2aa4076aca98ac10be32c1411259e8a270c"));
    BigInteger expectedTotalDifficultyAfterImport = new BigInteger("38070970463980");
    AionAddress contract_cab26 = AddressUtils.wrapAddress("a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab26");
    AionAddress contract_c3d4f = AddressUtils.wrapAddress("a036264ea31559621f5950c1dfd063d0a3b89d555e7a3ce732e97fc2eebc3d4f");
    AionAddress contract_62127 = AddressUtils.wrapAddress("a0fa1fc00ed6616df7bf795340019c773d12b66f834726f09e0cf86928b62127");
    AionAddress contract_aa803 = AddressUtils.wrapAddress("a0b75b3dffe8d4f0e3c5d07f31437e939040593230d6658cae57b2a0fd2aa803");
    AionAddress contract_e3633 = AddressUtils.wrapAddress("a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e3633");
    AionAddress contract_685a1 = AddressUtils.wrapAddress("a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1");
    AionAddress contract_e26fd = AddressUtils.wrapAddress("a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fd");
    // setup blockchain with state before imported block
    StandaloneBlockchain blockchain = new Builder().withState(grandparentBlock, totalDifficultyForGrandparent, parentBlock, totalDifficultyForParent, worldStateAfterParentImport).withDetails(contract_cab26, Hex.decode("f9066ea0a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab2601a017b531d1f727f993328da132bf62a7cbc54f0198dcf3cfc9f00e02f3659ff9a480f90627b9062460506040526000356c01000000000000000000000000900463ffffffff1680633d5840631461005f5780635df8122f146100a657806365ba36c1146100e3578063a1e6b0661461016c578063ff42bfd6146101c057610059565b60006000fd5b341561006b5760006000fd5b6100896004808080601001359035909160200190919290505061021e565b604051808383825281601001526020019250505060405180910390f35b34156100b25760006000fd5b6100e16004808080601001359035909160200190919290808060100135903590916020019091929050506102a2565b005b34156100ef5760006000fd5b6101436004808035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061034d565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b34156101785760006000fd5b6101be60048080806010013590359091602001909192908080601001359035906000191690909160200190919290808060100135903590916020019091929050506103c3565b005b34156101cc5760006000fd5b610201600480808060100135903590916020019091929080806010013590359060001916909091602001909192905050610592565b604051808383825281601001526020019250505060405180910390f35b60006000600060006001600050600087878252816010015260200190815260100160002090506000508060010154905490911491901416156102695783839150915061029b5661029a565b600160005060008585825281601001526020019081526010016000209050600050806001015490549150915061029b565b5b9250929050565b8383336102b5848461021e63ffffffff16565b9091149190141615156102c85760006000fd5b85858585909114919014166102de5783836102e3565b600060005b600160005060008989825281601001526020019081526010016000209050600050828290918060010183905555505050838387877f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a435060405160405180910390a35b5b505050505050565b60006000826040518082805190601001908083835b60108310151561038857805182525b601082019150601081019050601083039250610362565b6001836010036101000a0380198251168184511680821785525050505050509050019150506040518091039020915091506103be565b915091565b8585336103d6848461021e63ffffffff16565b9091149190141615156103e95760006000fd5b6000600085859091149190141615801561040a575033858590911491901416155b156104f45760405180806f4149525f4143434550545f4d4147494381526010015060100190506040518091039020906000191690858563cf0c64b28c8c8c8c6000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156104b75760006000fd5b5af115156104c55760006000fd5b5050505060405180806010015190519091602001509060001916909091149190141615156104f35760006000fd5b5b8383600060005060008b8b82528160100152602001908152601001600020905060005060008989906000191690906000191690825281601001526020019081526010016000209050600050828290918060010183905555505050838387879060001916908b8b7f9096ccaf3bc136981b8a043d4e5ef1396a340697147a05ff0597f635003acc0060405160405180910390a45b5b5050505050505050565b600060006000600050600087878252816010015260200190815260100160002090506000506000858590600019169090600019169082528160100152602001908152601001600020905060005080600101549054915091506105ef565b945094925050505600a165627a7a723058208af95ce52c89ecffb3f67449a149ba9fbea69fe903e07d6c514ced5b647aa6e40029")).withStorage(contract_cab26, Hex.decode("f9410df876a0788971c221e434af0efcaf5e8f13f987f29be32525ce5b0e28e31874ca40c056b853f851808080808080808080808080a09f1d3cc1940c2762f4114785d560a6321f198b84c8711175b0a610bbe99750c1a0930bbaaa41fda1ea815ac0889ec2bbfe6089b45ba8551afd3eb63cd377b6d30c808080f876a00ddbafc0e0dff8f22a92e7903b867321a60f798c4639cbef611cf0552ca5a823b853f8518080a0b4e19cdd265a84c641fcaa76a0df3b55978bb4e0bb67ecc76d6931e6a16a88628080a06455b04f6d09f136dd027a31d55c5b067625fa66d50d9f9dc17f27c63b46ed4a8080808080808080808080f8f6a0fbb9dfbae505d1ebe78d31f65d7acf8def64924b67a41bf349946808cb365cf0b8d3f8d1808080808080a07c619208e4d50311ba0a4f15fd5227292675bffbcb1509f7ccf2c46030c76b55808080a0e4d46454e6c8f24ec883efd33c1a9a8ecccc337986bfe28ec27951ab069226cea0d367385c7652afbebf775dcbf52049070a61492525835d3e767705de6cff49c3a038b4b768b302e9bd71d25d8886a1c7c678dc604c645a056940b70aa086683e6c80a0f80fcdaddc6c65555f2770dd0e59263da1722cbf6fc64fa68fda4a36c09e9023a0dff4072ee1b2a876bd4c505eacb512e06f29893d736261d00aa3ff56abe267f680f855a036ae1b5f6884cddeaa8e3679c15ecd1459771b88555dd4a562f3e4990d7edb6fb3f29f39ce967ab03574af7e94b4cd16b67278d412e2ead48ecacb6535c2c9d7f9529190439c5629a8ff6c34d1a28281ffee26fdf856a056ac4d64284d26e2d19d4fb99066e966d4fc401f33b18c1b0d72e439b25f5074b4f3a020b1ba3c94d5fabffff795bef10799adca52b893507b4b4367d6724e9b9ada3b9190a06ec711ee13d913bab46cfd615914ccf856a01f2b0e22a8bc542a934a4e459b8e91725687ed5da13748ad94aeb17524411602b4f3a020bb51e3896f5f735473094765f1f8b64548c9ab9327804b487d837bfb32c3cf9190723c5c86298a4b99d436b0de6959de93f876a0955f0457ab439b9f4b15dda9497eaf9ecd6963dbf74da2c51ecd821955ae9c36b853f85180a045cee60ae09659bf5f2eaccedf67490ace96654ef0505fdcd27ef867d0b2f68780a087847a340d57eeae7fbfc972b7a1ed7880191cb88b9e76c9c7c0cc472e26732180808080808080808080808080f856a0fac7cbbb14065869b5224580430971a0216e98a78ef2db9f9baa7af62123f5f6b4f3a0200e08b9fab50def1c8ae0ad44dd6bb2e992b3a7dbed7818daf82440eca808a79190a0fd1887216c9620a64a6e41fa4c345ff856a0600dd1fb01dd454ee579f34adf14158573e9830a7a79faf4d7477a5b7e15d1cbb4f3a020dc68d1fa04172661606a74d732819bb4d8af249a7c6c5d91eb5d17cce6da709190a07406a455df4ca89c7157ce24201690f876a02c8933c959c8670ba40616e739a92e6a211be8d8525929fa9b1f40d03323efcbb853f851808080808080808080a0685c7c2d67d4135c7c31b6ef59f25e693db934ea9968b0c7a1e835fc8ae71f988080808080a0d52ddb4ce2b7dd123ea5788a701bc30089cc51942f64ace7b000cd7c89d8a95580f856a0ad120a4993a5e5ddadc96299eb3cecd605dbaebf50946df6219d685952c4f470b4f3a020e248d2ae1eefa6f91e6b60926386cdec846024b9c3decbf704b26de67d8938919066ffd2c92d3b521444069cc15043bdd7f856a094aa3b5c3dcdf6e7baf220b040370ae5522f52f87bc38ced3ed95b7e6ac0c0bcb4f3a02018a65f4ebe3f9022e7ca55d51aca34441586ba206e29f3544b43f70089f0c79190fc496abed83b2db7f9f5a574605880e3f8d6a0d1618349e6813f5cfc0ae3b99ad6873d060a114b17346662f891ac210ac837b9b8b3f8b1808080a007ccad3194eaafeb7460acf796fc03d3f47fe4ed7855353702fcfc01da0bf8798080a0dfc0b6993fb99afc1fea1f2353fa6639f79faa2fd26adcf5758936c1c98a451380a0d9e5ea4d5e838fe45f2f0885a9e68244694bb817ebeb923fed8baf8802c4e6d4a0f86f339d1058feebf6a3402d0ce64e02c325f727dd8c9cbf280ea192970b756f80808080a0542f5709895e3c35d1c02c0a8df15b0d46089fbaee4feeb421dd2ce499e3277a8080f8d6a037eddf9c5a3f10de73d62468b38baee49389b645037e4fca953872de8d2ae583b8b3f8b1a09b2cfbc18dba6aeacd40556e0e53f369b093627df7eae35595ee25c4d49723ca808080a0ea57938d6f6adecb3fe7da79e1d92bc7d0044854cc369cce111a8b3abcac85bd8080a061a32707b1ec79647c453bd8450533a7da1205d9d0767ecdc5e16d91c6b02fc1a0466a117cd13c96b18818d49859d920201e3917676bcfe88b91e5776a01e79fbb8080808080a0a3371060ecbb55130ca271e208df30204b6397d8e2243aa867aeca33c9e0955a8080f876a013885e2135b874cc911fc7d2e634ea5a4609909c77052d7866f632cf30860f90b853f8518080808080a009334c0a25eecf4c9e6407db49c7ad8f72e12552a8e29916850d2c41d62203208080808080808080a0b9cc52b39eaf087d273375174d57ebe5ff72641261492a2c5fe32dad88ab96688080f856a0cc833978e1e833773b84d44e6006e269daf282e398623700b10ff7473be4e8c8b4f3a02097ad7c7175976d0a000bb4a5fcc8188a5f863aeee161317d37d19591f460f59190a0a4ac19dcf51daefa0a947684c72fc5f856a01c7ff598db30daec33600d09269afe7ada647ece3612b702ac5679876061d651b4f3a020c1dced084213c05967ede93e35cf3596b6be5ccb3586fb0552d22a836cd1129190a03410cf24ef75ff527e74e050870b0df855a01348d7ae5fc621432eb0425b0aa7d937061739521d86a841738c8052cb5ecaf4b3f29f3856e897bf71ef4803a78b94b499d27991a5bc479be8a074498ec8c2c835279190a0c4b8687c3305930ebbb6e4739dd4b2f856a07e455536af2128bccc47b352d1a400a7d75e0d1c545cf3258453cb25a4d24794b4f3a020fb25d0e55776100e595a7f879bb8d56aab714d63ee6bd7b93c99e858361b0891908916256fd5b13bc6ee8db13140505e51f855a03601b9d51bf36810e943a1a5cf5fe72e688dae218132306130138b5d42408cfbb3f29f319fe1a7ef2face250842978e4ae1b8789549fa03f518b68d874c399bc3f4591900f094353e6859ed3c3ba95488ddbdb0cf856a0a00d207dccba60799f6fffdbd7ea253543b1afb6f3846e7bfb5af2d01cd56d2bb4f3a0207b9c96cd2abb41891642dd40f3128462990a0cf81a24d90f5a532bda670f5b91909fbddf134523c5efa403914f7c4adcf1f856a0d8310fccc8b094655e94574a74d633e0dac1f65b289b786b145852ecb1fb8729b4f3a02099c1dce788770d78f265b53fe0858691159e741cc1ea35aaa6c60c8c8a1a0291902759c01b70dd3ca22cb610c48acd1a0ef855a09b361790f433c5d6133b1b8997ee3c49ae8cc0e53dd754d3143e40847525414cb3f29f3c079e8d0f6144c4b7d3fe03a79d7b46dff37d735ff6f304107b2acabb8aa29190f0b5c3ad891553ca6d8d4f6fe1946a82f855a099ef5552d2775a94cf5157e138aa7098f80aac91f7c3395a0c8537e197659898b3f29f301a81c7d6275b65fe2f0c38ff30df941223eca370814002ff5f0db9feb6fc9190838bfda00052ffc69347073094f24df0f856a00978efd7012105813bd133585ee7304725cc07f634404d57af9b22bed33e14abb4f3a0200b0c3cd38c23984d65c40f90d3ea592a9c5f39fbc7bd05ca24b54b987bcf1f9190a03d2f7fc9f53b8513691b3d5309c704f856a0795c6b220a9ad547c58c5c7f03fa6e1f6e1fa401ad11eac5edbba04ec15b03dab4f3a020c5ef3f9174eda80f0fae1c9a0e61f4c35dca1add27305bb799ce51543c2f309190a0725a463c7dd5eed6b27cdbbedd0112f876a08d29ec066fa88f3fbeeca49876d4dfad5bc9627f8f6bf04e37bd701d3beba2a2b853f851808080808080a0455541820217c123eb1a4e995a0dfe2d81916d4202f892e362221651cdcd6eb8808080808080a02861d0039cf950b510f0f6ac4be8f0c4f5f5b406bc827b037f0e9cc4c9a444c8808080f876a003645975db51b49767714792dc7eb8c0e63d4210ed3b734e0cd0bb80ecfc232db853f85180808080a05bed3de7860170692f1bf4d25991625a3c3e9128b20ca1c16d106a9eb53de25e8080a09fdef45a3102f268a7cdfbc2e5afe2e77a629c3bd30c062af02f9c908fa2ea4f808080808080808080f856a0c6f07d74b36b9b59b2d1d92016aed4fe72b45f5db36473b9ef8c9b8f2bb9eb82b4f3a020bcbb6e3622b85b66b6e65d1440fc8b918b05cfdd8b1b21c9e6c34d49b569929190a05bf4d1c9482130810617277169fa3cf856a0db285553fa88ad42ab1cff6821bbb8972371f6f13cb18e0c9198ead5330dee10b4f3a0202cc07a47058b77aad1518393326f43882b2cb5357b522ba3c0d824fb41331b9190a01fedb4e549efd13f406c152f8250caf856a0fce72e67195d52ebebd190967c18f893759c7061811d1d5f6bcb96223a193b20b4f3a020d698c06198eeae263f6529042ef845acca916a4d3774f20619746293afc8869190a3ea6fa432cf8a57ef404ac5ee8deb32f856a0cceeaf6d578506fab791725a471cb242c68c7b550f9902ef7159f94230144185b4f3a02050f85c51a4cd3c5d0bddaf580cdb6221ea15afb8ad9d6ceb061d8ebafddf169190a037d06f632254d77be16bb3c5f428c3f855a02eb8c9da8a15c67f2404dc0f0e0a0977069586596055375159510ae62710b824b3f29f3945ce35a3eb27996b5c9186a93e3deb0ae27c2bf0a599086ce18380756efa91905b581aeca5e78781efcef4c957a7a14af855a00af169f694a0204c2bbbd4cbb7a7c0c0030c1bbb89585f038bbeba2fc760ab98b3f29f3ca938465fa95c5fdddc58dd3ea55a7ee6d45e4904fb604bcafac894bfd0139190a00da8071a3aeea71737c92f909535b0f856a08e67b7d19bdc0a0947b8a6d0c50a1fdd297b40e08d3c21295d809b0217b42f1bb4f3a0200c06d0de54bebe8a4b99e8440ced39e1ab391fe72bda818d35325e55e73e589190a000912b440f6a5daf60f37b06b4b85af856a0fc87d057d569c9554255a0667ea790ac17cbabf93357ce46cc1f7d866d8cde6cb4f3a0207453907317d2cae3729228861bb611d9de4c023065986284742309dc7e216a9190862a10a5b24a5b5c533d14489b92a54bf855a0f3e0c5b650e2da5def7ac14737330cf78010ed6680a362bde36876cd21fc2863b3f29f20f6d14146d06acabad0bf828bb99ec288c7b98275e506de9958aac9a20e839190a0cd91d0bd7937032c0b20b73decbdd6f856a0db1ce4e424839fc809bab015def4cc4ebbc7d5e39db93329eeb223425165ccf5b4f3a020e03206ae4972889c137db05f252d811b0bb3ba175f5ba9d2cfac438f1d73da91902ba158587e9bbb709172ef72d8156e0ef8f6a0be11ec205ac98f4a8e06ecbfb6acba323ea00416761e67a04ac21db5edaf9e09b8d3f8d180a0189716521e01ed528796ed4254db20d40e8a2210d8c9e5fb4847a5939ae67d528080a000cf4547bbaf5d1702c1ad0c83706397f148d6e91837ecbfbf211a5d0ed96658a007976471676eb57090fc1bd6f7e5b6acf79592a53f1b2631d4326e66dc6b41e880a07aadb6fc6a101f0278b15319a3e5de0903b051c2ba87a1dc604217315e55ec9780a0c66c6da4a0a9089fe766b11638a898d94e3f2211d01627193e1f104b3f09d3c98080808080a0c2189ebe765aace70627396b64ef0a50a65a03835dbf21400b9d479bd13e408180f855a019f5d07cbc29e6d520561bc52bc3317494a51e2110765e33123ac7e420803bd8b3f29f38d27b068f98b6821d87d414c4b8b8812e48529fc7f2faa886cbea2f1293d89190912df815452ed5a4b8e601c998c5c5dff855a0bbeb99a001e7532012244c5eed05ca277f8677358d5b9df9c21c791935fde666b3f29f3e4b4322748a30d01b3d6998e39e0f99ca5d7e0515ee16dd08927d168d365e919041872f648b51a5ab49a534a0d440f62cf855a06cb49fe7a2e524e2c8c756a42bb380c7e957683477b3e23e45f9e9e87060b49bb3f29f209aaf35dd47af6276675480c471c0705103193b5846bdbd9b34ec2d1f24539190a07721ac7826c585b675bed7394d8028f855a060bd5385a838c68869f49a7aa71d85a8a2cba6b83bd6cd64256efbd2c1c14649b3f29f202825e7ade676cf281d007e594d37954f5afbe2d777d0b9297f35c1836d069190a0ef004560df78f883969dd3626df926f855a0758a094be7201f66baf4903b597a9a8944b0e6e6f0c54c73ea2f3e786eee3646b3f29f3318c04c6d8b9a19d400898199c6072a33dbbff718921e9f51188131b3b7fa9190a010259b8e42c408e6b3d8ff5b6fec57f8d6a050f4c7007267814a33d2a8fe35e1b88c2289d3417f620fd1bca860247c376c16b8b3f8b1a01760bdebf089437225e92799947534f492e7cc4299de7f8182e7eedbca01a49380a066616365197170703d9e6e51f23ce102acdb965634c07e460858966e98879601a07cda752225944feaa452349dabb8d078c44feda7302b9cc376de68fd2e2fa2f9a09042d896f8fcc1590e04c0fb3276d44b86c10e269518de14dac8876a90476bbf80808080808080a0aa1c596e3f5b9c697826ef0e368dc25e187ac64b6dda077759353e09886625be80808080f856a0dd0ebc1e02ce5c39c9793d46bc5dca663ef5276ecf68805d6ce51eb405f7ffc1b4f3a020074a110e2c62f9727e781dbd2ed8376079ebbae9e38d416eb408e7bd5c32869190c5c6f99930f2db94f6afab2d03c387ccf876a03030d5e273742ea2ddb9f1ed780b732dda81dd0659c237d92ac9c870dc8ef404b853f85180808080808080a07162ea81221128d80e0270702b3b4427905eba381e1e1e8a0e3ee26c94699d45808080a091c3563caf8f76d7c44c6b8a291bb148f8c97f2ccf225b62ce6c5b780c54ea278080808080f856a026598322ae014331078ac5c25aef16cec574d858a535de77360f46383025e8c5b4f3a020a478ee1343878f1f6070fd398320f52da2265e8729273b1194ebeac245a1119190720986f93e79524284e3eb69ef459bd8f856a04282f2b6140da10f3cee34d32b98fe8ecad74bb98514ba7275f4ab7efb6034b8b4f3a020b6ab82af7f2a820e23f7771a5bc6c147454ab12cf57444e3afd39ee9eb19139190a0e4cc383be0044f367468b9c5ed02b2f8f6a05c8f9a2783c1593ac68c15b5bf1ce29b8ad6feee3b9c9e88f17489674efe76c9b8d3f8d180a08251ca9f60edc6a3a9b7118c3a0a072585dc626def95b6c905b8231de6b6c075808080a0c8064ca792b4314403679211355d6cec1262278be142501695482556ca93ea8680a0c09411e2bb253e3c1e97fb6235cdae38bf11af1234bae6accbb59e09890a05bba0a9fae9835694d263193f82d2997d3278d135f261be4f3f0fc58cb44da8435f73808080a02472f0a4bfbced328ec356be14db8b5feca85331619aa797a6fb41ffc995b7c880a02afbd8ae5d5ee744cfc352e2e31da1cbdc68f3a8b0f86e0aa6057675ed7c4de38080f90138a004853709c41624bdfb4c20360d5447aa9e2b5c6da6982f3e872a11791c4cecacb90114f90111a0049632527461eb7a74750258a02a53aafc76fe29ecf6d4372c3d6f733124c14aa0391bb90e7958bccea70c2cc8da6f7e4bf19717eab7fc9cbe8ffb305eefa2a30c8080a0ea916513a029af1f8f2275d17a442d83591e445f529c4a8c3e4069dab35de706808080a0396cb8dd55590620a8ddf80a083cf782c176fd22912c3b6c59e7fc742c83468680a0a0a06218bed9c7ccc69f1fe8adbd5a573cf6096734ccc50e9a7930ad821865cc8080a0a9a02598f858b93d880c08b3d85e1c1f0dd2186ab2d073e4be9da8aca9a2160aa034d83628b645191c694f11a60a4aad830e6f81d8b7196520ced8146426095f07a0aff40ed122791aaee2c940e733552989bb4f817b2ed7b7d84ad696e875d6d7b980f856a0a44881d27be8f0727269ffa3dffc84f9e81855b9da1797f77e68ecb9789fcecfb4f3a0209eac2d44fd38e83247bde6107d52d413757b56e1ee828bb5e4856cbd7d837c919074da540ade4dc522afd5eaa85768d23cf856a05c4e13acda5e0f876687f2968a2c204aaf13eb0f3643c30e20ef7547d1933636b4f3a020fffc970b03556eb993d3a73d137edacb47c53c6ab7a3ba096bc0335fcb4cae919058d7c42d5d64feb122ea4dd0ccdfde86f855a06e03417c39d974df2b0f9d1979e04a9d0060663174933d2a4628ca5ca313cac4b3f29f3f36602d21b093355ea01a4239bc0394673a0755be608370731336018a4c569190a046fc0ca4160d184be461939d2d0471f855a06cc468a8dee37e84433cce4592cec44eeab92ac6ac16b771305a30b0b0cf5cf8b3f29f36de13920a777b43d41f874472b69fb8bddc7a46ec11c746cd747c3db77d8a91903e3be1a0057af3dd7388d6d672640c21f855a0bbd415b25ca9fd96ea4194e019bb42398dd80a95cf49a8c8e2ceb9c7234e13b4b3f29f3edcd793d6f636dc1162ebdc53273d911053562076d7bd3945ecbd3e9c82af9190244aa1de7e38b135c70b51b95b1e1023f856a0654bc4cd74dd4edac8b3db933744ed090efc59073ead2c3421f0b1853c3784c2b4f3a02013bbae4ceb6ed0bcfaf9cbef6fb02586babb23f8932787d8c975914da196c19190d0dab1ba79d63a35322601dd3e08decdf856a0182cdeba4a5d84bf62ad70adcec3ac2eb6a3a37631348190f0fd702248a07be7b4f3a03272747956ae87ff7a2a4b58a3f98859907a511fc3c9e4cab430fd8dfbd504ad9190a0909e96e631750a5cf5995b65783a97f876a012963e5602bda75a0bcb8c90379bad3539515f9128e68b2bc7554f1896ca4e39b853f85180808080808080808080a00f367739aaa7f4939049b4a06890b3a3a77467033f185cb6eca730fce6f713b380a03246f895adb5fa601e78d632b31f13ba8d994756bb86865c86e2388df7f9706c80808080f855a0412605c025a76e01ebd84c85ad2697a41a7839901e8b0d25366f24732a355d84b3f29f3f3d85ecc359bfe08726ae3d9b2e22e00e4fb874b1f5067f87bd5b057b439f9190e242316b567a64f5da28cda4293809fbf855a06da23c373fdf4c496895dcae617c7dff19085e33f09e357842d7588024fc48d2b3f29f388e3eabc485e180f9c1af38835f5b29ec5efebdfab7d24311bbf69d2a971e9190a0ccb37891fbdff7cfafa67e7f399d97f90158a017956bca1da65e5106ce93e7b8a71c8219066c4ef8c63d7dca757dc290eddf9bb90134f90131a07db488e8cfabe2f9717abc3471bbb0b1baf1f8df43cab83c09aa7c5a3bdca8d9a0025b9c0a3010bb99ce2d5c6160d347d9634ac9511db956771298e60e3f241919a0c930de9d38c47bbabb68b95563d363f9c605b7445e8407dea3dc4a11cdc407dd8080a0aa35378d12feef821ffae31dc7b3265931a66b5b26a458d5feb8ab1e4f53caf6a01bc3ede86d8d639427bcae0ee9cf4fdc8269b1834fec1a5470bf6d61dec6bd0180a0d9e65fd4c7ff6b877d8fdd0dce1c14c8ea1b7bb021b3d2a488f4c2a0ff7054c280a0078cbabf1e608329d387a7d9ae3f666e32d31ece03e021b7e8c16794167b882e80a0e6731a0ea86657baf528607e72b1ea83052f9162a580fd1180304d881085a1308080a006113c3ae43309fc4b1a03bfbb729502ed93d7d31b3d90c019fc956a51a2941a80f856a03c5c54a27633de03c524bdc3f4e01968ac323c928a815790a4a6d6b47cef956fb4f3a020c5e616d43b2354cb5a91209c6a7305e4360d069e107336dbf435d9c7b387fe9190a08024faefbf2a5035ae74b95102b4fdf8b6a0b62fbaa5c0b16491f50d14d25ef45fb968540f2e669c03002291e411275fc5abb893f89180808080a08a8f541b5eed3db7f34e469bb74bc173fd951c3e63e773d0b9914716ed33841880a0da24d83ff251743716406bc3ff3911854dd39e5cb1668be314fdd84cb7270909a0e9027df9504f47bf6f63f14d56a9ef7216cf4fe8c3100fac63c7467cdcaf6a6380808080808080a04fb8e5703ced053cabb71ff1e05fc8febe033f384129eee2ff26b70baccacac080f855a0e114df924af4eccdf78618f1c359129e413f1c90c36f72265d7ec57ad744bf93b3f29f37a5bed6b0adf940ef2b39dabc3056bf711edd63fb8832eaf2f4ba13b00f449190a07bd83ff79f6a511f019c8324c998f4f855a06078e36cd63de575dd25cb2cf233827a851a8ac91b7c10e1e06a8c6f18611d47b3f29f38e7709d461d463ac4823e376c52d7d0e086f61f9fdea32473a9ce6336666c9190cd3c108a2a51a7e911b14f72dc4613a8f855a08a17f861d2941b9537bd9a87fbd76fe2f30326163e4ae42f693825ba2e0aa2d5b3f29f332c8f4f4fdf84b68e1d95d020ef84ccd8858431b0bea92ab48dab6924d4829190a0908d0110c82854ce0750473b82a21af856a0a5d585f033519cdaaa0a2cb095be0b75229e455abb5ba854a8af021b0c90aabbb4f3a020a1dcfc5195002aa8f368287abf5f8bc81aede815d301f207a7b37e948a6c179190c198779b6d22926fd46fcceb567d8198f876a03a269a3c32db88054eeb3acf03aa5ab89a8c9bf93cac53e050acd7eb1b4de10bb853f85180808080a0bf3cf6789998ca285eb774ab6bfa9c975936564b2192fa3106df65d3d9c9b8b7808080808080808080a032c1caab6c4ff4c01301ac8aa40806d617379214d293fc0e888e190c50ed90f68080f856a09299de2d468d5d7928212d5d67ea356ac9dd0bcd055a1df14138b748e0cd2fc0b4f3a0200b6cee850a00880fc62ac6279d892cba4f489643ef3daa9d913266e07ff47e9190a0ef815c27b4e00bcfaef644a87cebf6f855a097e3596084cc965435ac20c3ec836550b467e885468e4804daa7e0c78d31780fb3f29f3b69fafa0b845b63a7f55ed4f34ca80fefff1b9aed4c96209df0aa5e38d84f91903502fccd078bd1ff0321ae88f8ae6521f855a0952bb5f66abe416970ba8bc15b5a6fe62c2723f221f9099b2a7d876cf6d34124b3f29f3c950d4d1d0c715c575369acda455956af50c2ba36c3dbc376e5e00e8a392f9190a0e789c18a5761ad66b2538bce24e76af876a02fcd0083007ccd84370833ba4041876ca47ae2e7df3081b568f8ee7274f99276b853f851808080a017a034649af716fd9a46a21078e60799d2f9658cf35dfab8979d5c4631d961f78080808080808080808080a00e198a3c519117f29f4d3480c5e61e6ed7e2476567830dfa6faf663b3de7009b80f876a0ab1ced1be7482d10563fa0ac4114f7276fa1dda5c00ce521aec74afc8f517cbab853f85180808080808080a0e8ab6855e330ba6b52b3495ab2d6acdeae27daf2a61a2c56e76e1d75bc4d4d3ca0b76272d1fc4b6df3c24c95460bd0de85e7152aebb1ebf2c24152ecc0e32fb8b88080808080808080f855a0bd24b1795b9e3fc393c5955c3f16354b2b9c38cc8f9278d5bbf2f1b9722c3d6bb3f29f3cb3e36acfbb067096c27bf680e6258e991ad64da171ada6a35ca46a2a7d279190f2a4b18eacd82be83c1a1fed262b37e0f856a04b5006baf9dc32821f41ffba921e16506aed63e6aff2bc1b1b376b1f564d61c3b4f3a02017e1c952cd59537681f4be6139e0302ca29e4fa74ecf64e8081011c97503539190a00c172d5d18a9329dae0d4489339c87f855a038c6c8d67ffb9ec539035ef124681cbce8937352a2c189e665a1b0a6d1e0ffceb3f29f3e9944f3bfff038388fadb35f0009874823db1fa7ed5fffe6b44ace05bc89f9190a0e8dddbb3f2b316c091707848fa374df856a0ad48c6523d698e833cfae8f8aa1fc2b1d93c44b45c0b211d5a8c74b85325bd09b4f3a0200fd7bbe5bf5ed33f8b2dd4a8557523597eb1deb86fa5ea1a07cfc14c80660e9190a30ab1b435c557c082b485c1f409805ef876a0cd6df92cbd16bb23cd5e370388d1b79c4cb211a44f87691ac802d689d7f6f40bb853f8518080a01d1d33b67918d16b94a0fb8e5982efda404b42fffead0ccaf62b1bf0da0790db8080a0694adffdfaee7bf7dc633ce5133da351cde602ed1e456781a6c68494de7be3d18080808080808080808080f856a0eebf7047aa5be9758b113a329398f56904ea148a22edce37f50b572e462b2ebeb4f3a0209a90ca74e49312ed4cdab0dbc74c0ce085461d511b0ec25ddf242f75bfabdd9190b95603ca47322a5ccb7bf08583c88b11f8d6a0f65f6dd75db75e1867df81c36e476d259759d02e1d05b43c920cf1a49b7955b4b8b3f8b1a089c10fccaa99b8810a1a44d3049501038f273ea161b0a2b7d3acac09c16c09a18080808080a07c39b7d731f3fcb33b261fe46341193a232e9390a17b7e5610fe420932e4ebf9808080808080a022b160e86b30748fb37c258928aec860119a84864bee8c8ed21e9a2ccaa243c6a05c84ca75e6c6603aef1224db6077ea05720c2cb200c2ca0f3d7b92578a3beb59a0842a25a5c233090004e86efa120df9648d0ba37b3409c43733b7f98b6cbd1b0a80f855a00bde94f36f96c32d24bf54eb1ad16d0d739a3bddd1c30e4f08b6ece81c70b8b0b3f29f3259daee149f0ee1f61a95346cafca2d11098dfeb71b5bfce9408a4ea06b0b9190a0dfc2605618cc0c658c6f5a04e911a7f856a0165b4628ba2b55c359c01e096b1a23bcd1c3f38eafe4f23580df05d151cd66cab4f3a020bdb88fb9320df4ae6f27df2a1c58edeaecfc83654d083202de73a8edc1fd7a9190a0c046bd23c852f58e741f3ce6d975cef855a022fc46ee85dca27133ab94b9dab7aeba106220f90217ffca1dafdd83072af61ab3f29f31f22ff575793aeea2b96e37597648de75e90cda64cc4b68882736f9fc6d1f919061f325b78e91cf5dd679f69a9ac6e2fcf856a0e03c879e23f9c5f07c750f984e5b442018226fa76864b07726688dbffc158dcdb4f3a020df72ebc7815d6f739ab9d74676a5a481310649986bb9bee1f8c3f15116807f9190a0dfa4052752626266c681eb9104436df856a003244efb51db9855c0964cbce4bddd7d2091b833968e67cee6ed2015208c537ab4f3a0205e25317fb1ccb6101951194e973fa61eb0a5ec0d0352fd69bd953a9875b8ad9190fccb639e86aafd938118d1ceb8973781f856a086b92955a5dcf11d1d41f1c7484bd98b51323eb3014ee430e1a9ff091c316b76b4f3a020763afb94a20e9411e8574d134b12e51d2ea4f2fd7ef087c202b1b7271df1f89190a0e62b6a13b71e4afbf5008faebaef01f855a05b5e5b4f004c4a48f9282e213bdf81639763ad211c0a934201c0d5b4d4b454f3b3f29f208f6a170b663ecd4d94734504263968feda83af7685541cf569047924e0389190f2a48dd6953c1ecd0ec19b1e322bdacff856a035ddfefe6a302b96361e7bd9cf4146b8d3f588d7e98a67fb54796a356943ca4db4f3a020256ff50502d1f4b1d1fe8052e7565bff0501c4d5bf2e2804f3e0d9816ae3709190a0afa01d8278b8ef60c20f7302f1e2ecf855a0838e37ecc3075c29565a8f1e20ce8a4315845db9cb0881340fb6370d162d3e94b3f29f3a04d0986cdbf5d4544b5020257671e0150477027621835b0e6f3f21617da591908d916edef76afb17b1ab242396620976f8b6a086354c0b1aa8b9f33fc47222ee2f4fb312ec1e970a9678b6309e8858762f3146b893f891808080808080808080a0de6340047cb9ede82bf2a6202ae60d894124335aedc750972ef2ec0403c0c2b38080a0a4e5c3b7098b57c72b991f90a5abfb9b975ff3681d5f3c821f4b2ec4e652c628a0c508b8465eeedc2dc7267c1463e30383a0a468ab48c786b72b98341b1581732680a096713de783bc6ac79cd7cd1615abebc41d335713eb814f08a5296b5c1a4a84c380f855a01e19437722233bf6fce9f3cd3d1c5f64d9866d9cd5d8d0eeb2d8d5e38534f6d4b3f29f35e2ed2227948a427d78d55a95089b07c392d4431bf56bc604891a7c21566a9190a0fb475982f17af6315435df2a900817f855a0246826d6f44560aaed00e8182a495f04fe72e32103d25876dfd78d0cad427088b3f29f30fb2dbb1df4d6da33389200ea98b7d5291de41d807f1bfefe3677deda7af49190f38c1b2c0e36831bd56ef99840675820f856a0586c29bf23f757845be4c490123634aba6e2706cee1998f6d96a4e4370bc405ab4f3a020538c1601966a6e8c3d7da035c4c83fe7b4b4981a6185399baa4cb73d1a38719190a049bf6045bc86ce6eb7e44a2fcc32f8f855a0d2d380017d8a3c16cb551a5fae345c3c3811339bbedb4d84b09f4db82be1d5eab3f29f31dcf21ffc260760a7a8fc97e57c3a475652b8127e4f215d2a3c94de6ac6f79190a0f786b7a78ad13d4040721be01f3616f856a0edea9e33957e7001db95110624e831dcc22113362dcb5d5587d69a682628c160b4f3a0200f132d651e3dcca1e744d09d1ce38eac860ee62da303646352e303fda856469190a081848ba2854cb906d9c14892cb0f8df856a0c1e05b8c9bdfeb9373d09c5f11a2dd2d744a3475a61cd44ecf89e80fef06d825b4f3a020a8f7710228bef9fa8a280ba1075ae7c2a644b0abc8cd68cd8e30ed5efe8df49190964c11d5b4853736f40a0d86123682edf856a0209a136e7a8dda8c3a35b6f5669a55f138460fef8f41f56e42ea9deb33121ccbb4f3a0204160e75b6e1ff6108570853fc7aa9811e22090c55642443e3b57871e3ca66291908a98f67bb79f3d0f68708d47777cdb65f856a002f9dff021023e42ffece3f4c9334bac397d8b0df5e6c239fded497eab253f19b4f3a020adb8dc4ef7be68b4bdb5c70691b0f547c2f6cde3aca2334d525888c912bea49190288f0a2bda324077db6625ee81e03bf4f876a0007127f398cda07396c650856033a313d8922d832a80b48af317d1dd1d29fc37b853f85180808080808080808080a0ab520b3e94949ca7420d05295d10cc92948bd7aa47fa281d6685e0b56435d2a98080a045ec8b42c484a3a615e7f2c1f29de223676d01ff44283f604bfa193047687b71808080f876a080c2c66f07023ebeb01e8eb1604c27ca59e5ffa5dad296ced7a6259f963ab009b853f851a08766d42606366b97e2ac6f55528f54edc16a016725d3d3cdeba7eb19ecaa959780808080808080a079a76d38ad2a0012b0cfcc4e1b201510f37abb5c61e6effeb4ab929f002d438f8080808080808080f856a0ee7986d9651898a13bd4959a0805f32d8df01881bc471875da51b5ce49da4c05b4f3a020efb47b0bde6fd52717884a917372ea487b4e35cd6fa779f084ad9eec8ced92919086430ef9a6cf924de5eb16d96e406828f856a0c2848e6e65983f215390515d4ae946779ad17ecf3ecd75e0da0ecc5fc58e78cab4f3a020ba3148f24bc8515d4f72935b3db036b59e44d7d176fe8bb108546433b8a654919081b254cf536da6e20f9ce5fb4c33d10bf855a055f291a740cc547fe69e1f0e07db384a5e655ab1a3a89c727e4a0eb0ff55ccdbb3f29f34e3ea25517c2f7582e8a46aa292d7008c4dea6017b0e18414bacb56e4e09f9190acdc1e909afec30cdf0df4d28ff14b85f855a0ec438b9f26018dd5e645a911c09772707ac9862c48c17eaf037fc16146cae63fb3f29f37cc096298e6679758edee8dcce9a9c02b086813027fe78ff11ea7f30ccfc09190a0746a04ba771a89fe4d9b42624e6509f855a09bf5df0b513d10dc40e7a7cea721789ccbf7d75a26aa438c54b7ccaf1310fbc2b3f29f3fd166eee9382a3029089efba7b5b9d2dbbe62b9b749c3fb779b5fb45eee48919071b00e436f17a86707b188023acbc9ccf856a03df35ac4bc698b7013facc83a82ea0e525794b345927ce476beaec4a1525080fb4f3a0207e4ae8a96ea4b29e514bc5ecf10a1d9664daf950a1b277f7157ac233151d079190e43e84d89136fa20d140f4b095887e64f855a06101c229e63a2bd8bdec99f2c478f5c35c45a0ad2e7e1d90fac147eb947693d4b3f29f35a85e3c28a07c13e8ebe73a3329afe79644150ddbc4915510b491488237f691901d5587a122e7b80e75b6cce85b3fe621f856a02e133b64986fd0fa7b35b2a9915c7f650886af765e233cf34214aa6117fbe6e0b4f3a020cc624139201ed80cef9684b054ace3b4e8dc49c81e62a17896affd3f5efb899190a0c54daf8d6fa0dd485ea29064438501f856a0628980afdc4047ce89688e1a807d3fac7835ca88da1b2cbfec494a7a62003d02b4f3a0208f4367f8e4caaca8e04745c3ba83740a0dff1afffd4519089b67fcb70c679c9190a02a5e024f2931802ae83885361421dbf855a032854656181ee5e33a9019f6a49f575c8a1e8027647b45c6038c365f1346d66bb3f29f3bdf41bc8297b94d33c3071b2e9aea36e9dc0baf0fb46517f1ced8c12b142c9190a0f29679c2cd05fa069570d5d3e6982af90116a0c1eaa11830162cf98ac055e498d51e368a6dcbf571ba4601019020d54e106932b8f3f8f1a0dcd9ec060d81a3dbea62b7010697ed4e0e2faa85c6402a92f0498ef84b7c2c2aa09a3ef7761d0b903c96d73d4bab5d27e1e9d5a08784c6f1fcddfa608760928d2980a0a13d663af660ab641efcccfbe7ffd5dbf67019845580faad4cbede0ff61701b880a00d900c1dc410323f8f27d3132ca6eee9f1225b28da9b1fae4b8afeaa29b9bfa8a058a6f0661f6f3839d27112ddf86dfee47bfdb7d1d89891f7c4fea9532b149d35808080a0c9851ae678278c9d79a8d748fa906932985c4d7aa15c3be32c130a9d2d715f0880808080a0167edd9cc78c90e4bf3d6cdb45da739bedbf034fc63dd9d22344930c6c4de53a80f876a0aef4baa4fa6aabd7ccd00f4544cc1cf0cc949a958301558ebd24e21d72e18ebdb853f851a03c2e2b1cbacaa97b8df5beba5629c2123c7d2f8c4c1adb1f81b06cb22b6754cd8080808080a06aeba2b6fce843619ff97d520ba19433d48e3aef9a486fd3a2391648599461c780808080808080808080f855a07d4f8ef2681b37ac04392c056961cbbe2794e7828f3dbd0750ba4e8bfaaae88cb3f29f3ceae4862bd53a46df2f2d1cffc5a8b975fcc2672d1abe84fe7da70aa81e419190cf49d2c106ab811c498919a520280628f90116a0cd2cec675736425bbb3fd37bf3dc0c299e8f4cd0231a93d136594b8386cf8609b8f3f8f180a0c86bdab224d904c98f72340512473cc70e1cde3d76b965f9551e2b53c16343cb80a091b7e79d6e72ac21ffe33de23b3f713019873f051996f03cfadc5e0daf29373580a012b3a5e27f1a627ded36fe42195bfd12052daf50413fa0cc64ced9c5ab4acdc98080808080a05244aeaeed7c115c656baff2e22737c800121cc1dd6adee2e963382d48d8fb77a0acc3faac9e76a4e2157344cf8f7aea08abfb9f0910ea4f32d43299d0443ffa5980a0da0990aa361aa1653b3cb5a9bf4eef6f01fce9dc47770c495696ca0d6ee5b355a0fe2f2871d1376fd701d4a5cb3148af0ef580c479602989667fbba6e2dba45ef580f896a0007ed198b150dcc4c083e213d26b8d042898a2f7022d86cec82cb367cba36a49b873f87180808080a08d3f4bc8b9096bfb078ad653064a745019c7ff398ce8fae42892f82a7ad70f5e80808080a08eff1bab17a52c2b834b7acc8996b14c27ed7ac8d091b6d68d29f9aed48d09d680808080a02080c51c3174571459f60853580881aa2a9cbfffed090a8f3bc6511857c5db8b8080f90238a0135dd21b3216ce2d867b4179cd23796511a15d4632289d30141fdee79f1852a7b90214f90211a0541c24cab756b6f4872448b547a06622f6678f9f91b95d2858b9bc3086b0c715a0c50242d2f5271b473e36b5afea94c0985e83972b9f6114f8e581fcc1b497c231a0d589608323b008e248fc03f2e8975993d2e44d95f9ef349b1c807035f04f9cbaa082ddafc1df998e4d8b3292699c6e911dc6024249e44d2a4fd48f544c8ca89a45a0f2b78e1d988669a6d32961881c06b38b43b78cf0f3dee6c5761d2db061fefeb7a00499c4395dfc97cd2230b0ce12727dbd0c7c715dc45be67317060dc9e7ae5734a0ff513c702034e655537bd1bd2f3b11233b8ace95897f490aad85b41c31b1f7f3a0137d8800d89769efb23873accae6c22ccde83090161d6f842e64a1d66a6a7498a0006dd4c3012713034fbac07d7f1599044ac500b348437dc7633bcd6de6cb47afa0baf90fea9ff8b8f43af00cf4c4ed649cea4e58c898c53559aed3c1a11728350aa0c9c40fad920775e50fc93330819dd2874a61100ecdc1c128d24897977c482d0aa0586779ed46f06e84727af5fecd5d3c355e38a230d547cc7115655573b479ddcaa0b2c7596f0580532f41fbf4992cb58117bcba53f0884751f9c6803805ddd86ea8a033053c569f0e2760c720c423c1ca704a4767ea9beda51d337129aeca77ad4e80a01cc43d708f6cb301d65b90e6bc827280624dffa8dfefd36914ecac36b227d0e4a04ef040783eb298ceed76abe55dd480d4dbf8068ce012e2eaddcce6ffb8d9035780f876a09fc4180b488b5d5479b6b5257c122dc7647d3ea31931b1ac71fff9d02e1088c9b853f8518080a09d07b69817466d2a7ba7b7aa4aebae362ce4f04f19186ba3e894ebf56de2339b80808080a065e921e3230b1c66091a79b9b6392b6d88abfc73c0a54f691ed09bff6ef138d7808080808080808080f855a05f05de2d433047d79bed14992bd0bcf4e8d0cdf65cd7f3388901b68a4fba495db3f29f34dba6013bc35481f4ea800c88ec181e866a205bba56cfb8ef21f32a78b8eb919022718053346cb3c2d846138955328b10f856a0c47cf2287e140982aa611b29478c70966bfff3ccda61b4552fa4421d738daeb8b4f3a020822cab0f28c939669000f646feedb1b39b62e4ec14f6ba6c4b655dfcc875ff919008da46b57cd44e47e6cb273e9a4685a1f855a036292961a97ec37ea7f74cc1d649d878c3d9ceca3c48aef76c9fc518aa6a3bf5b3f29f3c1c29994abb6728f6ca568e0e7a9fcd7d1b1a8a7db86633a7a11bcfe82ca7919019dea2fc145df483439274e0162c7726f876a006b37fc0f5218c277adbbc2a12929977b7a4958ff362048ef6893a1ac5a3b21ab853f85180808080808080a0d63b63cbb8bb0ba87fa3fa14dc758292ecff6f4550001f7d548e91acd1667ee98080a032e95a1fdec25fae5db541eebd1e3980bc63f2ff6fe96298d4025749b8c727f8808080808080f855a0b38a911b397a5a4d76ba750d7991002b33fb76355f30a03ba54330d419a813bbb3f29f39ab0c0e0584297b1bb640726e34ad53f4d92f11f246af548d33511247cdf99190a01f3d47903713072089c5915cd17c3ff856a0a9a09ac4bb7e4be1105e32cd0b2953dc5674f98444350089c10fbbd3e21277efb4f3a0206317b5a1ac3cab1437feb39af99c4de1c74dd7b7561bd9a2469ea034faee219190a0390cff91733550dd3868ff9926aa8cf856a03d845b179068319e1c2b18417a7d292c1598a1fc7ff76995bdf62060d604ed85b4f3a0202eb39435e361eed58e3bd44aed20aa02b852990c17eb60cdf233deab3fdb9091909634e6e6cb01dd639fb2a24659cb9577f855a041bda248c726f69d5fecaed2284c2083557f319cec23c01a8633ca45374ac5bbb3f29f3017edb5180ece041c041f7c5bf9a7518518e2dde522add081e71df6c073d99190a0afcff5f58bd469550965a03415977ff856a050c7b4c34c6f0b8b6536cc41ffb085a392e6c3640094bc4dc5ccf0f063648c79b4f3a0201d6456d7691f16ae5a6db2ed38f45566875cadc4d14696df3f9f580e898a359190a05fe8b6fb1d07a8584a98d49c266b95f856a0decc3bf537604389a2b68b888d78cf2b993dc2825fbdd91af0ec04584da0a20ab4f3a0209b859d6d942fa370c12dd2938406eb3700c810b2775923924cb7a8f1813c3d9190a0e29f33de69290fddaa983777ade6aef856a0783296e8e0a5785410a4d4d6d9f90ed610a1b179def0ce3a92cfb4e9d4a809fab4f3a0205d2e273ab2e5c9c0f9ae7a71f05246a46295733745951627c008a92ae0024b9190a0c6ed9486e9137802d0acdcd9a04992f856a0a7dff3aa298a62adb85491a97a9eee8e9f8dcb060cff685183bf162733673e59b4f3a02041556e16474fabd5271f544e08864a4cefe31084f437d744f542bd2dd160959190a08e8698d162f60c1c9cfe0d6c73b11af856a0d78fdb96b36398000b81bd80876197a9de8f15fbcb580fc79266d9ca9678e2c0b4f3a020eb00cc36aedf6e1cb35f0bfbeb6294b303021a86f7a0548ff2f7885a7d50009190c17649b2e82327319337e0e2fc4f85b3f876a078d1541df4c2cb0d8fd0ffaf1100c794f7c0cf4e4fa02caff4ef9e1dc86340fab853f8518080a02614a52440ed95cf875d74f2a8f67014c48c7c27ecccad33f9be0197fdad5d198080808080a02a502a104f24f1c190f23c447c4bd7d9d27bda878e8e65a8bd40d6f2dd9713278080808080808080f856a0cdd83d57fdf54c040f9e591e1192bd5712ebeb9ab05f552747cd96053743acdeb4f3a0200e6be36938a5f9d05c51c1c9123a3447b9a9b2d70886fe57e8dacc1adea81491902536383e0a0966a2f8af4a6e9a1c2c11f856a0afbae8f451a5ab19f6fbe5622f51123c40658b74a9217ae482943ca19eb279aab4f3a0209ce4be6565a22bcc6d598a0ca3d906eecb4f9c34cffc3c154670892a5190c99190aa3c467d6b6a7a2353fc3810e4b16926f876a0dd0d09879bb2b85aebd9e8cedba75ceabda5e4c90530c0c6099a739cf8434dd7b853f85180a0649000a6130cd2cb69d32b6780725cd451f4d617f5a74218047b507be2e6b6448080808080808080808080a0366da59cdd2fd25d8e66f9bdd6de89f25ef0dcf98aa0173fe79dea4be9c17d68808080f876a00427a68d7e9e6aa9b6374d47f131bd3925a68a37f6ecbe465b30c649f45ecd5bb853f8518080808080808080a0e5fc3c588fc5db734370f8bab118cc3095d1404e2db420dfb96f196e2dc31490a007a4e976b9115a031956cb6fb02b889334fbc1f55ee0b2454bcd3f95710c7c1780808080808080f855a0b0097f17e36bb378f50a4a3dd29ee5fb4365e83e55bcbe3e8978edf25bed2361b3f29f20a179d2db7e204ed511e5fcc45b8b1798c54aafe44ef172c09b931324568f9190a0120c0d46f7b31005f4c26ba60d9965f876a0da8ba3ceb988da569f04466b58a7d32795ca6f84031c026ecae33010f94769b0b853f85180808080a01af1a0bde7120c48481f13864f5d81ca0d6831423b03821756c909f77fb35dd78080808080a0682c8b621bd2493af7ca2e0ee08f1ae03e57761842cde588d44beca44a48f7fb808080808080f856a0a82b19665b47935ca185a484fd3b34a67f15c3d7fe311dcb302345c4beb8515ab4f3a020a6dd631e4908d1edc583f8866d35407b2e82ff543f1b8eb523e64f245b2aa59190a00ad202c0c7ab61afd556025f709b1af855a0836c99fec866d910cb492939c5e033d654f740666545243023d11053d4a1d822b3f29f30e28fdd35990e27346501108c26cdbd824a6c2ca47d217bf5aaaa5d6a95f49190a030fd8e6a631b69985a836a0d407e21f876a09ed614bcd83aa7822221dd00d91cf94f3d3bfc596a1da30539ebbc939a15262ab853f851808080a0511a726d85fd63c15268ff45759ae6e48a8b066f4d73ce8b9a5bd2a405d267d880808080808080a0bf037a6ac4d6649ea6d2ac159f441489ab682beb6380cf00260da50dcf7a4d658080808080f876a0034c0abc7c206dbdada02b24c26a563de0159d2bb03be0bcafdce3818b8bd714b853f85180808080808080808080a05fb6b885c57d7df64ddece6a499e5fcd438df1fff2d1c1bbe5d109a02e33fff080a0f708267c95d3ede35b8c210c4572d25954feb1b86e7830440779aad9db7b836080808080f856a0e29bf9c46d57600441de803500f0342dd1c1cdbc4b5bafe86421919cea020a33b4f3a020e5c292c24848e682aa111c569a60b3f29daf5a1ecafb6535b4c566a97e82d59190a0e649954342a814332c4e14a90ceaf9f855a0d1c538862786eaac8a5398c1025a1dae5d220d4ac1bffe1e54111168735f0256b3f29f2047936f71a787b183594df83c05a6792033479c6a98536a1d2330567a60d39190a03e4611dc10fce14060722e79618e53f856a0aeddd447d7cfd83cab0c0356b5f2f8f7e5483785c87f0a2c1aa9770ab5d461f5b4f3a0205900f7b51ddc6c507ec68ad1003b1cc9d1c38911df91f1897b577a8d9ae8c29190a062913c81a71b819e3f8b453ba65584f855a089d7a8027c385c45b37c3618740baafecd29a3e76233a81dcc83243e8050a45db3f29f3bf5ae170ba85b590c7d7eabaf4c1111ec6bdc9e51d8b2885c8195247a3ce99190cf92627f5433e7cbf8cc8fc9014b3258f856a04104688801b59418a111128a80dc3c8db3835d21aaf36d99afebc524bdefd072b4f3a0209876fff482174c409f697ba972168eb1a0a77fb3606a5ad82e73025c0a7ef99190a0e51279365d382a7da92a120c1f1641f856a0dee17360f32b96db8fca55e2cd0f31c1d512b502a9ac5eb0b287161994621856b4f3a020957709912fc41cfc9f4d0e1f06fddddcc918c3dce9165587c6337d5d5998f391906a73604e061e37ce722e1c117dd9ec8ff8d6a04a18a3b2fb83af7059804bae2f955e7a0f165a520ec9b01339dd3aeb425ea854b8b3f8b180808080a0ad48790e7e4f7c5fa4a8d28679688d72829aa55aaaee5270251e67c71895dceca03ece79f6f7eabfbbfa1dda8471eb84164e62c727d2770119b4bd0bffe1ca4a08a031351d34af011c2882e89b92bd009816071bd40907513502b068b62193c4614ea02b25e349c54dfa3a83fed3f1320059c27094be3931ebd34c8ce932668e7e3975808080a064e53231c4ec72f0518f1301ad55cb2ba707dfd494a2a80d3356a64f84927ac88080808080f856a0037f87bba25f82ce240afb9d85a46802237bce7bd1c074c83023b27226eceaebb4f3a02032a461fe54a6143d269d3c925687c99ef06a08bbaedd650b72e08fb74aaeeb9190d729c7457ec24ff6bc60f95752186359")).withContractIndex(contract_cab26, ByteArrayWrapper.wrap(Hex.decode("0d84c716d0160e91ba7dddfdadbb5389169d0112be9aa2fb540b3b3137c57768")), // block 1_577_075
    ByteArrayWrapper.wrap(Hex.decode("844358ea1e0368c7d37fe232a61687dde2254d3e4c99c797993c2b95fe835bab")), InternalVmType.FVM).withDetails(contract_c3d4f, Hex.decode("f90ba8a0a036264ea31559621f5950c1dfd063d0a3b89d555e7a3ce732e97fc2eebc3d4f8080b904bef904bbb901404b65395114484ea374ca9013c321c1b3f1710d74acedde69ee25a122ece3c3fb983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728231e29ecbb11a13ba8d6db103db022499af31a369101bbc4c784c150664f2db3d8228a98b9f4db8781419f64736de959a7a36afed886ded9567bf0796522bcd994ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df353788799c262a2a8a390d5bcd28661b751d9982b9233f8ff73d0a375b78ae7abba95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e0162744527702e5c73fbbc12545e1f0e69c0cc219a090775b482225a65470c61b183ceb7b71fe070871b7db2f35bcc674bb89b0094bfe9d8878284a06a28cf87fae999bf6721d63fffb185b1504202a5a5ea47a93c84f0698f63b2f258fba72c04c088e6cf90338b8b3f8b1a094ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df35a0d8228a98b9f4db8781419f64736de959a7a36afed886ded9567bf0796522bcd9808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728a0231e29ecbb11a13ba8d6db103db022499af31a369101bbc4c784c150664f2db38080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c9190f2c96b8e06caaf785f69ddf11637ab18abeaa031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe2888758d15e17628000abeaa035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c88877c585087238000abeaa0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a288872386f26fc10000b893f891a094ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df35a0d8228a98b9f4db8781419f64736de959a7a36afed886ded9567bf0796522bcd9808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb5f4a12094c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb853f8518080808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b873f871a094ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df3580808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b83baced0005757200025b42acf317f8060854e00200007870000000204b65395114484ea374ca9013c321c1b3f1710d74acedde69ee25a122ece3c3fbf906c1b906be6050604052361561006a576000356c01000000000000000000000000900463ffffffff168063056499c61461007057806333c9f45f146100a65780638da5cb5b146100de5780638dbf2f961461010f578063c68e475a14610208578063cdf7edf7146102495761006a565b60006000fd5b341561007c5760006000fd5b6100a46004808035906010019091908035906010019091908035906010019091905050610281565b005b34156100b25760006000fd5b6100c8600480803590601001909190505061039b565b6040518082815260100191505060405180910390f35b34156100ea5760006000fd5b6100f26103cd565b604051808383825281601001526020019250505060405180910390f35b341561011b5760006000fd5b6101b06004808035906010019082018035906010019191908080601002601001604051908101604052809392919081815260100183836010028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919050506103dc565b6040518080601001828103825283818151815260100191508051906010019060100280838360005b838110156101f45780820151818401525b6010810190506101d8565b505050509050019250505060405180910390f35b34156102145760006000fd5b610233600480803590601001909190803590601001909190505061050e565b6040518082815260100191505060405180910390f35b34156102555760006000fd5b61026b60048080359060100190919050506105f7565b6040518082815260100191505060405180910390f35b600060005080600101549054339091149190141615156102a15760006000fd5b600083101580156102ba5750670de0b6b3a76400008311155b15156102c65760006000fd5b600082101580156102df5750670de0b6b3a76400008211155b15156102eb5760006000fd5b600081101515156102fc5760006000fd5b600360026000505060031415156103135760006000fd5b826002600050600060038110151561032757fe5b9090600191828204019190066010025b50819090905550816002600050600160038110151561035257fe5b9090600191828204019190066010025b50819090905550806002600050600260038110151561037d57fe5b9090600191828204019190066010025b508190909055505b5b505050565b60006002600050826003811015156103af57fe5b9090600191828204019190066010025b505490506103c8565b919050565b60006000508060010154905482565b6103e461067b565b6103ec61067b565b6000600085511115156103ff5760006000fd5b600084511115156104105760006000fd5b835185511415156104215760006000fd5b600360026000505060031415156104385760006000fd5b84516040518059106104475750595b90808252806010026010018201604052801561045e575b509150600090505b84518110156104dc576104ad858281518110151561048057fe5b90601001906010020151858381518110151561049857fe5b9060100190601002015161050e63ffffffff16565b82828151811015156104bb57fe5b906010019060100201909081815260100150505b8080600101915050610466565b600082511115156104ed5760006000fd5b815185511415156104fe5760006000fd5b819250610506565b505092915050565b6000600060008310158015610524575060028311155b15156105305760006000fd5b6000841115156105405760006000fd5b6003600260005050600314801561057a5750600060026000508460038110151561056657fe5b9090600191828204019190066010025b5054115b15156105865760006000fd5b6105d6670de0b6b3a76400006105c86002600050866003811015156105a757fe5b9090600191828204019190066010025b50548761062190919063ffffffff16565b61065a90919063ffffffff16565b90506000811115156105e85760006000fd5b8091506105f0565b5092915050565b60026000508160038110151561060957fe5b9090600191828204019190066010025b915090505481565b6000600082840290506000841480610643575082848281151561064057fe5b04145b151561064b57fe5b809150610653565b5092915050565b60006000828481151561066957fe5b049050809150610674565b5092915050565b6010604051908101604052806000815260100150905600a165627a7a72305820c0e0b4513d2521bb3705ceed0358cefcf6cac036cff927c986df9fc1602b29f60029")).withContractIndex(contract_c3d4f, ByteArrayWrapper.wrap(Hex.decode("d9b996cc544f2903fe6db6d7f6d92a3de61ff03a391293999b34c68a7c617a2a")), // block 3_275_742
    ByteArrayWrapper.wrap(Hex.decode("4f7237d7b2b65f2c6b2d3d8cf70bcbe02449f00b768d9d7c59a9f05f9561b586")), InternalVmType.FVM).withDetails(contract_62127, Hex.decode("f90d09a0a0fa1fc00ed6616df7bf795340019c773d12b66f834726f09e0cf86928b621278080b90601f905feb90180288f73f6e0b8957b858429756ad4103de113b7459d4491c63c2b0188029ba858bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962ef8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc8887cb9390c35f6823469614b39b5d481974e2a77119c9fd5835695d7388b97971c11419fd12a64dca85d163c694203bcf50777ad73f0cbd179328b1d280f376b9f4950050445a3ce8a5804c6dfe5c7a270b038ad7c272d692a7c745e010179f6d025d4cdae65a848f8afc30ea6a55b51a354dd3eaf285faca8fa78684d0701845e18e3ecb540a6697bad970707809114c767a6b8ace5333bd4a0a8c8f8c1fddfc95c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e90c1220bf530e36c400bc005b041a0abf485abacd2c2a70c59718970c60dc131f2de8c6f856da811891d8d571db860e4f8281629b23be82a33ef4a9789cdd34ee4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd56341161254328f9043bb5f4a12015d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a07d9895f295b815eb88268c820cfcfdb4f3a0336d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190f2c96b8e06caaf785f69ddf11637ab18b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a07d9895f295b815eb88268c820cfcfda3e2a0310fd29389f3567a079224bb7e842e71f5336547f050a107c6498ade29ae2e6701b873f87180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc8880808080808080808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80a3e2a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe201b8b3f8b180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc888080a087cb9390c35f6823469614b39b5d481974e2a77119c9fd5835695d7388b97971808080a095c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b853f85180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc8880808080808080808080808080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b4f3a03a2e35899e4d65137656445c9d43abe76d497c263f5e230f15573134849239239190be125ace76ea65b6d8f1e882c51e3633b8d3f8d180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc888080a087cb9390c35f6823469614b39b5d481974e2a77119c9fd5835695d7388b9797180a0f4950050445a3ce8a5804c6dfe5c7a270b038ad7c272d692a7c745e010179f6d80a095c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b893f89180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc88808080808080a095c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b4f3a03b691f64d892e254fb9233468a36bc4885860c6544616d382c4d0257092e00549190a0c0d2ce127aad2d35abf8abf643b40cb83baced0005757200025b42acf317f8060854e002000078700000002090c1220bf530e36c400bc005b041a0abf485abacd2c2a70c59718970c60dc131f906dfb906dc6050604052361561008b576000356c01000000000000000000000000900463ffffffff1680633336acd3146100915780633c7e11bb146100bd5780634fbf9d26146100fa57806356651994146101395780637412dbb3146101785780637baab3da146101bc5780638da5cb5b14610203578063ae61c5ae14610234578063d6dc726c146102605761008b565b60006000fd5b341561009d5760006000fd5b6100bb600480808060100135903590916020019091929050506102a4565b005b34156100c95760006000fd5b6100f8600480808060100135903590916020019091929080806010013590359091602001909192905050610397565b005b34156101065760006000fd5b61011c6004808035906010019091905050610496565b604051808383825281601001526020019250505060405180910390f35b34156101455760006000fd5b61015b60048080359060100190919050506104c9565b604051808383825281601001526020019250505060405180910390f35b34156101845760006000fd5b6101a2600480808060100135903590916020019091929050506104fc565b604051808215151515815260100191505060405180910390f35b34156101c85760006000fd5b6101e660048080806010013590359091602001909192905050610528565b604051808383825281601001526020019250505060405180910390f35b341561020f5760006000fd5b610217610550565b604051808383825281601001526020019250505060405180910390f35b34156102405760006000fd5b61025e6004808080601001359035909160200190919290505061055f565b005b341561026c5760006000fd5b61028a6004808080601001359035909160200190919290505061060e565b604051808215151515815260100191505060405180910390f35b336004600050806001015490549091149190141615156102c45760006000fd5b600060008383909114919014161515156102de5760006000fd5b60026000506000838382528160100152602001908152601001600020905060009054906101000a900460ff161515156103175760006000fd5b600160026000506000848482528160100152602001908152601001600020905060006101000a81548160ff021916908315150217905550600360005080548060010182816103659190610649565b91909060005260106000209050906002020160005b84849091929091925091909091806001018390555550505b5b5050565b600260005060003382528160100152602001908152601001600020905060009054906101000a900460ff16806103dd575033600460005080600101549054909114919014165b15156103e95760006000fd5b6000600085859091149190141615801561040d575060006000838390911491901416155b15156104195760006000fd5b8181600060005060008787825281601001526020019081526010016000209050600050828290918060010183905555505050600160005080548060010182816104629190610649565b91909060005260106000209050906002020160005b86869091929091925091909091806001018390555550505b5b50505050565b6003600050818154811015156104a857fe5b9060005260106000209050906002020160005b915090508060010154905482565b6001600050818154811015156104db57fe5b9060005260106000209050906002020160005b915090508060010154905482565b60026000506020528181600052601052603060002090506000915091509054906101000a900460ff1681565b6000600050602052818160005260105260306000209050600091509150508060010154905482565b60046000508060010154905482565b3360046000508060010154905490911491901416151561057f5760006000fd5b600060008383909114919014161515156105995760006000fd5b60026000506000838382528160100152602001908152601001600020905060009054906101000a900460ff1615156105d15760006000fd5b600060026000506000848482528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055505b5b5050565b600060026000506000848482528160100152602001908152601001600020905060009054906101000a900460ff169050610643565b92915050565b815481835581811511610678576002028160020283600052601060002090509182019101610677919061067d565b5b505050565b6106ad9190610687565b808211156106a957600081815080600090556001016000905550600201610687565b5090565b905600a165627a7a72305820b762c6a2ec4b955e3ee2a03a179a232fc9d28d354f9b0425ada392fa7fd3c9130029")).withContractIndex(contract_62127, ByteArrayWrapper.wrap(Hex.decode("80e6d70be43c0b739da58b5b9b870102b9b31ec2e33f508e8d251bebcddeac0e")), // block 3_275_867
    ByteArrayWrapper.wrap(Hex.decode("06e4f07d48e765eafc9ddabda106320805047afb3d4a860a024db299b8978038")), InternalVmType.FVM).withDetails(contract_aa803, Hex.decode("f909d3a0a0b75b3dffe8d4f0e3c5d07f31437e939040593230d6658cae57b2a0fd2aa8038080b90623f90620b901807702e5c73fbbc12545e1f0e69c0cc219a090775b482225a65470c61b183ceb7ba95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e016274452ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7ac34f7e16ca6b3566eae2dbf67e5b5e378cfb5ca600d070cad73a316796c9e8f7983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd8287281b5c97843f499dc69e2b32980177db3b6619a599af49eb80b127134f731b1f050f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535f2d2e35e09098b84c68bfec2652b237533867f2b6c6f3d3638219a1210037166fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2b550472a606b31a4e0e3a854eca3a1dc266b1718fdc1e469bf9513f0571f8f1e6ec943aa4109baacaf489e22c9702e3c193cc05369f46a2bf4372c6117d5e83011869c08ce50715d669b5b13fba906d4a48b4106250a8026ca7ef85f0e06c648f9045db5f4a12094c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a0fa1fc00ed6616df7bf795340019c77b853f851a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7a8080808080808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c9190f2c96b8e06caaf785f69ddf11637ab18b873f871a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7a80808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a0b177c837e80040e16d9769fdd2b3c2b893f891a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa00f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe291903d12b66f834726f09e0cf86928b62127b8b3f8b1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa00f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be28080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a0336d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190869a2a7e626cce0e65036cc22041be5ab8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa00f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be28080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e0162744528080808080a06ec943aa4109baacaf489e22c9702e3c193cc05369f46a2bf4372c6117d5e83080b83baced0005757200025b42acf317f8060854e002000078700000002011869c08ce50715d669b5b13fba906d4a48b4106250a8026ca7ef85f0e06c648f90387b9038460506040526000356c01000000000000000000000000900463ffffffff1680632f921e411461005457806371a281ee1461009a5780638da5cb5b146100d7578063cb58993b146101085761004e565b60006000fd5b34156100605760006000fd5b610098600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091905050610139565b005b34156100a65760006000fd5b6100d56004808080601001359035909160200190919290808060100135903590916020019091929050506102b6565b005b34156100e35760006000fd5b6100eb61033a565b604051808383825281601001526020019250505060405180910390f35b34156101145760006000fd5b61011c610349565b604051808383825281601001526020019250505060405180910390f35b6000600086869091149190141615801561015d575060006000848490911491901416155b15156101695760006000fd5b6000811115156101795760006000fd5b60026000508060010154905463d6dc726c336000604051601001526040518363ffffffff166c0100000000000000000000000002815260040180838382528160100152602001925050506010604051808303816000888881813b15156101df5760006000fd5b5af115156101ed5760006000fd5b505050506040518051906010015015156102075760006000fd5b8282637b7814528787600460005080600101549054876000604051601001526040518663ffffffff166c0100000000000000000000000002815260040180868682528160100152602001848482528160100152602001828152601001955050505050506010604051808303816000888881813b15156102865760006000fd5b5af115156102945760006000fd5b505050506040518051906010015015156102ae5760006000fd5b5b5050505050565b336000600050806001015490549091149190141615156102d65760006000fd5b600060008585909114919014161580156102fa575060006000838390911491901416155b15156103065760006000fd5b83836002600050828290918060010183905555505050818160046000508282909180600101839055555050505b5b50505050565b60006000508060010154905482565b600260005080600101549054825600a165627a7a723058201354df309f9093e1bd275c8e4b6ca8254861bef4925022a3d708d80ce87daf2c0029")).withContractIndex(contract_aa803, ByteArrayWrapper.wrap(Hex.decode("b0855cf505d1e461c3a94be7518b1000a367064a93355dda4f332704210c8dbc")), // block 3_275_893
    ByteArrayWrapper.wrap(Hex.decode("71d9ac36b276cdd634c8aff68c858a79c4498b91ae3e030d7fa3cb82e80b3319")), InternalVmType.FVM).withDetails(contract_e3633, Hex.decode("f93a53a0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e36338080b91219f91216b904809c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece3748dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6ae14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb5f93a7deabb401ce54ef850b887e1cda6b50c23e7a14e1498efb436b1e60cd0d3209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b8ed60b46d3916b7601b23272d15750e14b45c09c621c84d74c404fb652b606b49ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7a8076890e06dd36c1a9b723493a1d81b59712fffe6b3eb70487793b36faef635cfb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be28be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c803e9f6312b8a7b69697b60df3ef2e978b79f365e261d5d55c6f5afa3421964f267bf50f99b14465aea16d77b8aac461d31b6e17444d9bd6ec71b2e434a7ccaf2b8251177c716a73cdf77239f7527feb5c4f49b0adfd69a58ffd41e96961edaa5ed98c93f47aa58ff1310bb02b15422833c7d2a984dd6bb2b1dce9bfa7534a8c4b617cf09dd06667fd38091c57e640797e509860a4fa130713aaf78998a616061afce2efe901439befe35f191144ad64f28d1b98220393e72aa9b028037789a718a78fcb208bc322a911020b9eee1a978227af1bc11777aaaffed8f9f9afa6b310f287c4e976f4de8bdbe9431b9e7f5941a5efe74a018ca118421e193d5a8d56a6005e8ce67606a0afee6f2dbf7ec4e18cb802ca5fd26a9a14c3c9fa5e2197815c02eedc0905b1257e15adc3182da8fcebbc9ad29dd869203ec1c68ccf080925b4f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e551b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a72df23e1777a1ff9cae16e5de727013783bd9e80b72b3e30ed2507bf60a8c741d7c3721b7b1350e962857a4cb6056e46a21ba27f3cc00e027d9fa8883117d8a616a41abd43129b0603ec20897b85e93a9adece9713cc4a792ac9f572fe6697aa9633b1c901d31ba59897f2799d8ce116a3d6998f10e964416265867b6a756c387dbca5268f887fb633fd0553fce79c28c0e850527163853bfc1db6b6e136ad3e11e1ef5279569ea529d3375ecf20d8eb675a2d2b6d2df2b80bca00b2c38638894a1518f2c20a51c7ce8568eaba73746c831c6a34b5c7fbcaa419e2c2cb96284dddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb578587709bd962a6fcccb8e7ce34557ed9d87320986dff8573522735356025f4be66184c86bb9608cce32ac3eb8109d59b0cb13962ecaf6653dd11ef2f5e11696b70716ad446738382ddbe00c7c6e35bc8aa4adf8657bcc1179850aa6180fa5e3bb8b43c4781e11f4e61ab9eae8f827522b33ded13bddf2fed039f2cc04bbe190af77db8fbae70901cc9ce09abc353abf3c39343466a3f5702620fbe8df85f81401465afd9e4774a9de3d64d2b3e16aeaaa351dc7554b636f608cfff059590ba54ef90d53b4f3a03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c9190f2c96b8e06caaf785f69ddf11637ab18b853f85180808080a00f287c4e976f4de8bdbe9431b9e7f5941a5efe74a018ca118421e193d5a8d56a80808080a07dbca5268f887fb633fd0553fce79c28c0e850527163853bfc1db6b6e136ad3e80808080808080b873f871808080a04f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e5518080a0ed60b46d3916b7601b23272d15750e14b45c09c621c84d74c404fb652b606b498080808080808080a08076890e06dd36c1a9b723493a1d81b59712fffe6b3eb70487793b36faef635c80b873f87180a0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580808080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b853f851808080a011e1ef5279569ea529d3375ecf20d8eb675a2d2b6d2df2b80bca00b2c38638898080a077db8fbae70901cc9ce09abc353abf3c39343466a3f5702620fbe8df85f8140180808080808080808080b4f3a020a619de1b82a680406341ad264fa371512a0502304a464699d821bed0cdf6b19190a0d270e7759e8fc020df5f1352bf4d32b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a0fa1fc00ed6616df7bf795340019c77b4f3a0200272fafa470233b338b3780462e879976eb1cc0e2ad6f4b38f94ad0f12b44a9190a07d9895f295b815eb88268c820cfcfdb4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe291903d12b66f834726f09e0cf86928b62127b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190312e3000000000000000000000000000b893f89180a0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b4f3a020d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a036264ea31559621f5950c1dfd063d0b8b3f8b1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a8080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b8b3f8b1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b4f3a02081658ac6eea094e5b74b2318d1944de96ee646ec2aef6b187e52401588312c91909342c1bcdfe9297ef594fa352c7cab26b4f3a02081658ac6eea094e5b74b2318d1944de96ee646ec2aef6b187e52401588312c9190439c5629a8ff6c34d1a28281ffee26fdb853f85180808080a0afce2efe901439befe35f191144ad64f28d1b98220393e72aa9b028037789a71a067bf50f99b14465aea16d77b8aac461d31b6e17444d9bd6ec71b2e434a7ccaf28080808080808080808080b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190312e3000000000000000000000000000a3e217a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb5b4f3a020a619de1b82a680406341ad264fa371512a0502304a464699d821bed0cdf6b19190a062913c81a71b819e3f8b453ba65584b4f3a020447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b691909040593230d6658cae57b2a0fd2aa803b853f85180808080a0b617cf09dd06667fd38091c57e640797e509860a4fa130713aaf78998a616061a067bf50f99b14465aea16d77b8aac461d31b6e17444d9bd6ec71b2e434a7ccaf28080808080808080808080b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b853f85180a0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb5808080808080808080b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b873f871808080a04f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e5518080a0c02eedc0905b1257e15adc3182da8fcebbc9ad29dd869203ec1c68ccf080925b8080808080808080a08076890e06dd36c1a9b723493a1d81b59712fffe6b3eb70487793b36faef635c80b4f3a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b09190a0b75b3dffe8d4f0e3c5d07f31437e93b4f3a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190a3b89d555e7a3ce732e97fc2eebc3d4fb5f4a12076a619de1b82a680406341ad264fa371512a0502304a464699d821bed0cdf6b19190a0d270e7759e8fc020df5f1352bf4d32b4f3a03481658ac6eea094e5b74b2318d1944de96ee646ec2aef6b187e52401588312c91909342c1bcdfe9297ef594fa352c7cab26b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a0209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b880b853f851808080a04f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e5518080a0ed60b46d3916b7601b23272d15750e14b45c09c621c84d74c404fb652b606b4980808080808080808080b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa08a78fcb208bc322a911020b9eee1a978227af1bc11777aaaffed8f9f9afa6b3180808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a09633b1c901d31ba59897f2799d8ce116a3d6998f10e964416265867b6a756c3880a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a0209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b880b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a09633b1c901d31ba59897f2799d8ce116a3d6998f10e964416265867b6a756c3880a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a0209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b880b4f3a02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c9190f2c96b8e06caaf785f69ddf11637ab18a3e217a06184c86bb9608cce32ac3eb8109d59b0cb13962ecaf6653dd11ef2f5e11696b7b83baced0005757200025b42acf317f8060854e00200007870000000200716ad446738382ddbe00c7c6e35bc8aa4adf8657bcc1179850aa6180fa5e3bbf92811b9280e60506040523615610096576000356c01000000000000000000000000900463ffffffff16806354fd4d501461009c5780635e6dbcc5146100d957806360dfab211461011a57806368c5b1931461014b5780636e667db3146102285780638da5cb5b14610259578063a1c8d3371461028a578063b00eb9fe146102e9578063b49835641461031a578063cb58993b1461041e57610096565b60006000fd5b34156100a85760006000fd5b6100b061044f565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b34156100e55760006000fd5b610104600480803590601001909190803590601001909190505061045e565b6040518082815260100191505060405180910390f35b34156101265760006000fd5b61012e6104f0565b604051808383825281601001526020019250505060405180910390f35b34156101575760006000fd5b610226600480808060100135903590916020019091929080359060100190820180359060100191919080806020026010016040519081016040528093929190818152601001838360200280828437820191505050505050909091908035906010019082018035906010019191908080601002601001604051908101604052809392919081815260100183836010028082843782019150505050505090909190803590601001909190803590601001909190808060100135903590600019169090916020019091929050506104ff565b005b34156102345760006000fd5b61023c6108ba565b604051808383825281601001526020019250505060405180910390f35b34156102655760006000fd5b61026d6108c9565b604051808383825281601001526020019250505060405180910390f35b34156102965760006000fd5b6102e7600480808060100135903590916020019091929080806010013590359091602001909192908080601001359035909160200190919290808060100135903590916020019091929050506108d8565b005b34156102f55760006000fd5b6102fd61095c565b604051808383825281601001526020019250505060405180910390f35b34156103265760006000fd5b6103f56004808080601001359035909160200190919290803590601001908201803590601001919190808060200260100160405190810160405280939291908181526010018383602002808284378201915050505050509090919080359060100190820180359060100191919080806010026010016040519081016040528093929190818152601001838360100280828437820191505050505050909091908035906010019091908035906010019091908080601001359035906000191690909160200190919290505061096b565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b341561042a5760006000fd5b610432610a4a565b604051808383825281601001526020019250505060405180910390f35b60006000508060010154905482565b600060046000508060010154905463c68e475a85856000604051601001526040518363ffffffff166c0100000000000000000000000002815260040180838152601001828152601001925050506010604051808303816000888881813b15156104c75760006000fd5b5af115156104d55760006000fd5b505050506040518051906010015090506104ea565b92915050565b60086000508060010154905482565b600060006000600060008c8c9091149190141615151561051f5760006000fd5b60008951118015610531575087518951145b151561053d5760006000fd5b60008711151561054d5760006000fd5b438611151561055c5760006000fd5b61056d87600161045e63ffffffff16565b92508a8a8a8a8a8a8a8a61057f610a59565b808989825281601001526020018060100180601001878152601001868152601001858590600019169090600019169082528160100152602001838103835289818151815260100191508051906010019060200280838360005b838110156105f45780820151818401525b6010810190506105d8565b50505050905001838103825288818151815260100191508051906010019060100280838360005b838110156106375780820151818401525b60108101905061061b565b505050509050019a5050505050505050505050604051809103906000f08015821516156106645760006000fd5b915091507fd1055ec94b4a7a0d56691f9dbf655f3a683a28857c2c565ed0c3e910645b34c78a6040518080601001828103825283818151815260100191508051906010019060200280838360005b838110156106ce5780820151818401525b6010810190506106b2565b505050509050019250505060405180910390a17f53e51eafcc6cc48771db669cdabad660678aa9510059c72a6bb42930a9a6fe128c8c85858830604051808383825281601001526020019250505060405180910390206040518088888252816010015260200186868252816010015260200184815260100183839060001916909060001916908252816010015260200180601001828103825260078152601001806f455847303030310000000000000000008152601001506010019850505050505050505060405180910390a1600260005080600101549054633c7e11bb8484336040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383825281601001526020019450505050506000604051808303816000888881813b15156108085760006000fd5b5af115156108165760006000fd5b50505050600660005080600101549054632f921e418d8d600860005080600101549054896040518663ffffffff166c0100000000000000000000000002815260040180868682528160100152602001848482528160100152602001828152601001955050505050506000604051808303816000888881813b151561089a5760006000fd5b5af115156108a85760006000fd5b505050505b5050505050505050505050565b60066000508060010154905482565b600a6000508060010154905482565b33600a600050806001015490549091149190141615156108f85760006000fd5b878760026000508282909180600101839055555050508585600460005082829091806001018390555550505083836006600050828290918060010183905555505050818160086000508282909180600101839055555050505b5b5050505050505050565b60046000508060010154905482565b60006000308b8b8b8b8b8b8b8b604051808b8b82528160100152602001898982528160100152602001878051906010019060200280838360005b838110156109c15780820151818401525b6010810190506109a5565b50505050905001868051906010019060100280838360005b838110156109f55780820151818401525b6010810190506109d9565b505050509050018581526010018481526010018383906000191690906000191690825281601001526020019a5050505050505050505050604051809103902091509150610a3d565b9850989650505050505050565b60026000508060010154905482565b604051611d7980610a6a83390190560060506040523415620000115760006000fd5b60405162001d7938038062001d7983398101604052808080601001519051909160200190919290805182019190601001805182019190601001805190601001909190805190601001909190808060100151905190916020019091929050505b6000888860006000506000016000508282909180600101839055555050508888600060005060020160005082829091806001018390555550505084600060005060040160005081909090555082826000600050600601600050828290600019169090918060010183905555505050836000600050600501600050819090905550600090505b86518110156200027e57600086828151811015156200011057fe5b906010019060100201511180156200014f57506000600088838151811015156200013657fe5b9060100190602002018060100151905190911491901416155b15156200015c5760006000fd5b6001600a600050600089848151811015156200017457fe5b9060100190602002018060100151905182528160100152602001908152601001600020905060006101000a81548160ff021916908315150217905550600b6000508054806001018281620001c991906200028e565b91909060005260106000209050906002020160005b8984815181101515620001ed57fe5b9060100190602002018060100151905190919290919250919090918060010183905555505085818151811015156200022157fe5b906010019060100201516009600050600089848151811015156200024157fe5b906010019060200201806010015190518252816010015260200190815260100160002090506000508190909055505b8080600101915050620000f5565b5b505050505050505050620002fc565b815481835581811511620002c0576002028160020283600052601060002090509182019101620002bf9190620002c5565b5b505050565b620002f99190620002d1565b80821115620002f557600081815080600090556001016000905550600201620002d1565b5090565b90565b611a6d806200030c6000396000f300605060405236156100f9576000356c01000000000000000000000000900463ffffffff1680630434acf8146100fd578063075d4782146101075780631fb976631461011d578063245935851461015d57806328a070251461018757806345d363c61461019d5780634895623f146101d25780634be67162146101f6578063686d22111461023557806376057d1a1461026a5780638f2790b3146102ae5780639f26d0ad146102ed578063a35d33a91461033e578063a6f2ae3a1461037b578063b9e7459914610385578063be9b1a9e14610451578063dab0abea1461047a578063f11b8188146104f6578063f59e38b714610536576100f9565b5b5b005b610105610587565b005b34156101135760006000fd5b61011b6105b1565b005b34156101295760006000fd5b610147600480808060100135903590916020019091929050506106f4565b6040518082815260100191505060405180910390f35b34156101695760006000fd5b610171610716565b6040518082815260100191505060405180910390f35b34156101935760006000fd5b61019b61072b565b005b34156101a95760006000fd5b6101d060048080806010013590359091602001909192908035906010019091905050610a2c565b005b34156101de5760006000fd5b6101f46004808035906010019091905050610c18565b005b34156102025760006000fd5b6102186004808035906010019091905050610ce9565b604051808383825281601001526020019250505060405180910390f35b34156102415760006000fd5b61026860048080806010013590359091602001909192908035906010019091905050610d28565b005b34156102765760006000fd5b61029460048080806010013590359091602001909192905050611013565b604051808215151515815260100191505060405180910390f35b34156102ba5760006000fd5b6102d0600480803590601001909190505061103f565b604051808383825281601001526020019250505060405180910390f35b34156102f95760006000fd5b610328600480808060100135903590916020019091929080806010013590359091602001909192905050611072565b6040518082815260100191505060405180910390f35b341561034a5760006000fd5b6103796004808080601001359035909160200190919290808060100135903590916020019091929050506110ab565b005b6103836112d4565b005b34156103915760006000fd5b61044f6004808035906010019091908035906010019091908035906010019082018035906010019191908080602002601001604051908101604052809392919081815260100183836020028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919080806010013590359060001916909091602001909192905050611462565b005b61047860048080806010013590359091602001909192908035906010019091905050611545565b005b34156104865760006000fd5b61048e6115d2565b604051808a8a825281601001526020018888825281601001526020018681526010018581526010018484906000191690906000191690825281601001526020018260038111156104da57fe5b60ff168152601001995050505050505050505060405180910390f35b34156105025760006000fd5b61052060048080806010013590359091602001909192905050611630565b6040518082815260100191505060405180910390f35b34156105425760006000fd5b610571600480808060100135903590916020019091929080806010013590359091602001909192905050611652565b6040518082815260100191505060405180910390f35b34600c6000506000338252816010015260200190815260100160002090506000508190909055505b565b336000600050600201600050806001015490549091149190141615156105d75760006000fd5b600360038111156105e457fe5b600060005060080160009054906101000a900460ff16600381111561060557fe5b148061063c57506000600381111561061957fe5b600060005060080160009054906101000a900460ff16600381111561063a57fe5b145b15156106485760006000fd5b6001600060005060080160006101000a81548160ff0219169083600381111561066d57fe5b02179055507fa84608b60f29a142fdf93af4c92c6e0600d4aa669e4373cd1c26fff30d54324660006000506002016000508060010154905460006000506004016000505460405180848482528160100152602001828152601001806f50545030303500000000000000000000815260100150601001935050505060405180910390a15b5b5b565b600c600050602052818160005260105260306000209050600091509150505481565b6000600b600050805490509050610728565b90565b6000600060006000336000600050600201600050806001015490549091149190141615156107595760006000fd5b6002600060005060080160006101000a81548160ff0219169083600381111561077e57fe5b02179055504360006000506005016000508190909055507f3d3dc5f62311c8d504eb0b5bf60174bb19486593410dbf78e60a3c8f8372087a60006000506002016000508060010154905460405180838382528160100152602001806f505450303037000000000000000000008152601001506010019250505060405180910390a1600091505b600b60005080549050821015610a2457600b6000508281548110151561082657fe5b9060005260106000209050906002020160005b50806001015490549350935083835050600a6000506000858582528160100152602001908152601001600020905060009054906101000a900460ff1680156108ce57506000600d60005060008686825281601001526020019081526010016000209050600050600060006000506002016000508060010154905482528160100152602001908152601001600020905060005054115b15610a1657600d6000506000858582528160100152602001908152601001600020905060005060006000600050600201600050806001015490548252816010015260200190815260100160002090506000505490506000600d600050600086868252816010015260200190815260100160002090506000506000600060005060020160005080600101549054825281601001526020019081526010016000209050600050819090905550838363fbb001d6600060005060020160005080600101549054856000604051601001526040518463ffffffff166c010000000000000000000000000281526004018084848252816010015260200182815260100193505050506010604051808303816000888881813b15156109ed5760006000fd5b5af115156109fb5760006000fd5b50505050604051805190601001501515610a155760006000fd5b5b5b8180600101925050610804565b5b5b50505050565b600081118015610a78575080600d600050600085858252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505410155b1515610a845760006000fd5b7f797847cd24af3f2afd42c81caf3d2c377d9021b5edcab11d49dba60248551e673386868660405180868682528160100152602001848482528160100152602001828152601001806f505450303034000000000000000000008152601001506010019550505050505060405180910390a1610b4481600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600d60005060008585825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050819090905550828263fbb001d633856000604051601001526040518463ffffffff166c010000000000000000000000000281526004018084848252816010015260200182815260100193505050506010604051808303816000888881813b1515610bea5760006000fd5b5af11515610bf85760006000fd5b50505050604051805190601001501515610c125760006000fd5b5b505050565b33600060005060020160005080600101549054909114919014161515610c3e5760006000fd5b6002600060005060080160006101000a81548160ff02191690836003811115610c6357fe5b02179055508060006000506005016000508190909055507f3d3dc5f62311c8d504eb0b5bf60174bb19486593410dbf78e60a3c8f8372087a60006000506002016000508060010154905460405180838382528160100152602001806f505450303036000000000000000000008152601001506010019250505060405180910390a15b5b50565b60006000600b60005083815481101515610cff57fe5b9060005260106000209050906002020160005b508060010154905491509150610d23565b915091565b33600060005060020160005080600101549054909114919014161515610d4e5760006000fd5b60026003811115610d5b57fe5b600060005060080160009054906101000a900460ff166003811115610d7c57fe5b14151515610d8a5760006000fd5b600060096000506000858582528160100152602001908152601001600020905060005054118015610e2a5750610e0581600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b6009600050600085858252816010015260200190815260100160002090506000505410155b1515610e365760006000fd5b600a6000506000848482528160100152602001908152601001600020905060009054906101000a900460ff161515610e6e5760006000fd5b610ebd81600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b600d600050600085858252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000508190909055507f31fd1dc7157b84cef3d48f5614a7eabe829d8b4367a461d799875dfc347ab8a53386868660405180868682528160100152602001848482528160100152602001828152601001806f505450303031000000000000000000008152601001506010019550505050505060405180910390a18282637b7814523330876000604051601001526040518663ffffffff166c0100000000000000000000000002815260040180868682528160100152602001848482528160100152602001828152601001955050505050506010604051808303816000888881813b1515610fe35760006000fd5b5af11515610ff15760006000fd5b5050505060405180519060100150151561100b5760006000fd5b5b5b5b505050565b600a6000506020528181600052601052603060002090506000915091509054906101000a900460ff1681565b600b6000508181548110151561105157fe5b9060005260106000209050906002020160005b915090508060010154905482565b600d6000506020528383600052601052603060002090506000506020528181600052601052603060002090506000935093505050505481565b600060006000336000600050600201600050806001015490549091149190141615156110d75760006000fd5b600090505b600b600050805490508110156112c957600b600050818154811015156110fe57fe5b9060005260106000209050906002020160005b50806001015490549250925082825050600a6000506000848482528160100152602001908152601001600020905060009054906101000a900460ff16156112bb576111c360096000506000858582528160100152602001908152601001600020905060005054600d6000506000868682528160100152602001908152601001600020905060005060008a8a825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600d600050600085858252816010015260200190815260100160002090506000506000898982528160100152602001908152601001600020905060005081909090555061127760096000506000858582528160100152602001908152601001600020905060005054600d6000506000868682528160100152602001908152601001600020905060005060008888825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b600d60005060008585825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055505b5b80806001019150506110dc565b5b5b50505050505050565b60006000600160038111156112e557fe5b600060005060080160009054906101000a900460ff16600381111561130657fe5b1415156113135760006000fd5b600060005060040160005054600c600050600033825281601001526020019081526010016000209050600050541015151561134e5760006000fd5b600060005060020160005080600101549054915091506113958282600c6000506000338252816010015260200190815260100160002090506000505461154563ffffffff16565b6003600060005060080160006101000a81548160ff021916908360038111156113ba57fe5b02179055503360006000506002016000508282909180600101839055555050506113eb8282336110ab63ffffffff16565b7faa4189542ca8da242be9f3805ec348582b10a1c3c83dbc4a3b3091a743cf8f328383333460405180868682528160100152602001848482528160100152602001828152601001806f505450303039000000000000000000008152601001506010019550505050505060405180910390a15b5b5050565b336000600050600201600050806001015490549091149190141615156114885760006000fd5b6002600381111561149557fe5b600060005060080160009054906101000a900460ff1660038111156114b657fe5b141515156114c45760006000fd5b6000861115156114d45760006000fd5b6000851115156114e45760006000fd5b8560006000506004016000508190909055508181600060005060060160005082829060001916909091806001018390555550505084600060005060050160005081909090555061153a84846116ea63ffffffff16565b5b5b5b505050505050565b61157881600c600050600033825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600c60005060003382528160100152602001908152601001600020905060005081909090555082826108fc83908115029060405160006040518083038185898989f194505050505015156115cc5760006000fd5b5b505050565b60006000508060000160005080600101549054909180600201600050806001015490549091806004016000505490806005016000505490806006016000508060010154905490918060080160009054906101000a900460ff16905089565b6009600050602052818160005260105260306000209050600091509150505481565b6000600d6000506000848482528160100152602001908152601001600020905060005060008686825281601001526020019081526010016000209050600050549050611699565b949350505050565b60008282111515156116b35760006000fd5b81830390506116bd565b92915050565b6000818301905080508281101515156116dc5760006000fd5b8090506116e4565b92915050565b600060006000835185511415156117015760006000fd5b600092505b84518310156117af5761173b858481518110151561172057fe5b9060100190602002018060100151905161195f63ffffffff16565b15156117a157600b600050805480600101828161175891906119da565b91909060005260106000209050906002020160005b878681518110151561177b57fe5b906010019060200201806010015190519091929091925091909091806001018390555550505b5b8280600101935050611706565b600091505b600b60005080549050821015611834576000600a6000506000600b600050858154811015156117df57fe5b9060005260106000209050906002020160005b508060010154905482528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055505b81806001019250506117b4565b600090505b8451811015611957576000848281518110151561185257fe5b9060100190601002015111801561188f575060006000868381518110151561187657fe5b9060100190602002018060100151905190911491901416155b151561189b5760006000fd5b6001600a600050600087848151811015156118b257fe5b9060100190602002018060100151905182528160100152602001908152601001600020905060006101000a81548160ff02191690831515021790555083818151811015156118fc57fe5b9060100190601002015160096000506000878481518110151561191b57fe5b906010019060200201806010015190518252816010015260200190815260100160002090506000508190909055505b8080600101915050611839565b5b5050505050565b60006000600090505b600b600050805490508110156119ca578383600b6000508381548110151561198c57fe5b9060005260106000209050906002020160005b508060010154905490911491901416156119bc57600191506119d3565b5b8080600101915050611968565b600091506119d3565b5092915050565b815481835581811511611a09576002028160020283600052601060002090509182019101611a089190611a0e565b5b505050565b611a3e9190611a18565b80821115611a3a57600081815080600090556001016000905550600201611a18565b5090565b905600a165627a7a72305820c9d45ac561f06d35af2e9c53da13b7dcc7dc5486b211bec4c33236159313df0f0029a165627a7a723058207ffa7cd210e6b870d8a4af6dd8c6f7b13bbef4c516acea5e98c81aef728ad1bc0029")).withContractIndex(contract_e3633, ByteArrayWrapper.wrap(Hex.decode("128cc316b13b38523d62325034b4cc02127c39deea79aabccb63ac8a3414fbb7")), // block 3_275_912
    ByteArrayWrapper.wrap(Hex.decode("a2507317b2d98648c61359434b012b4b79fe73feb10d80b51a9f49954f0f0b01")), InternalVmType.FVM).withDetails(contract_685a1, Hex.decode("f93892a0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a18080b91159f91156b903e008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c42347ccaaa3ec0fa58113f76a23f8b46df802fa379087a122779f9059ae376d6c971087cdd29d4282795c402cf244aa632a19e4049ee5a400cb3db841d4e3886faada75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dcf34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb4d95ca4c64d9e37c9d1843ae4dd9fe219ea12e429f58cadfb3df102d001197e13c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d15a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b763548944615df6156e6baf7ebe5b1925bfd4b8e9c2b5941cce036bf3737b0703905f8ed42a6b0f81a12abae587f8aa587a84872d3a8b7a13ec91c304db6272037e1a5432b278284fa49f6d05ee9d6f027dc4098f427a9f904d024e94f555d1fa6a9ab1a5437b1f69bc9fd55b1e41f4efd1e4333bd231463817a7d2ac2d38efd8174c1bbccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f6e51ea4a1df9ab733c542838bf212acafaa7ec17755d6061726f95e69ad9711a5b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9df7eb9b918b18676abb30d131df5a9ca4920c1faff46456c89a6bc5fb01ed045ef997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b5d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d6482b4514106064e3bee2f1d5d7a0d054239cddd5599624727f6c00f08a9c4e4d7921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b4493bcf7114217f569830622c492c4bcccc90c2a114fb30785eceb007788b01f5eb9de6e90a8fccdf2c05f725ed581605d060d29a3a5dfe41d62bf34f9515a0a89c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0aafb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c44042d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad12bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a1f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d060e5837268d4318c794db647536a7be37cce1a97ae83b8b570020530dfc1734b3a592b5e719dda4ac89fd63830cec85a14cbb28ac4b4086a6a6033b59386925eef34569a090804f73abb60d75c7a65c6fe5399d8824fbeba6d23a9d9951892df90d33b4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe29190f2c96b8e06caaf785f69ddf11637ab18afeea020f213947568a2c4417f770b51f8667e76b20495aec1e7150dab3d5c339f6b538c8b10dfde374787bc6e000000afeea02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c8c8b10dfde374787bc6e000000b4f3a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c60919057414e44000000000000000000000008b853f851808080a02bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a18080808080808080a093bcf7114217f569830622c492c4bcccc90c2a114fb30785eceb007788b01f5e80808080b8b3f8b1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d80808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b80a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480a3e2a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b001b853f851808080a0da75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dc8080a01087cdd29d4282795c402cf244aa632a19e4049ee5a400cb3db841d4e3886faa80808080808080808080adeca0309489a9529008ce5afed97a80893cb79e2eb35654d88bcf4c1643d568a503f68a893635c9adc5dea00000b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b873f87180808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b853f85180808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80808080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a07d9895f295b815eb88268c820cfcfdb8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c91909342c1bcdfe9297ef594fa352c7cab26b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b853f85180808080a05d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d680808080a03c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba080808080808080afeea020f213947568a2c4417f770b51f8667e76b20495aec1e7150dab3d5c339f6b538c8b10dfa8017dd9f68f600000b0efa12073447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000b853f851808080a02bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a18080808080808080a047ccaaa3ec0fa58113f76a23f8b46df802fa379087a122779f9059ae376d6c9780808080afeea03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c8c8b10dfde374787bc6e000000b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c919077616e6478000000000000000000000aafeea020447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000afeea033447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b44808080a05a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b763548980a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b893f891a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b8d3f8d1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b80a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b83baced0005757200025b42acf317f8060854e0020000787000000020060e5837268d4318c794db647536a7be37cce1a97ae83b8b570020530dfc1734f92710b9270d60506040523615610172576000356c01000000000000000000000000900463ffffffff16806305d2035b1461017857806306fdde03146101a6578063097c23f81461023657806311d0cbd71461026057806318160ddd1461029c578063313ce567146102c65780633323984d146102f6578063556f0dc7146103435780636de9f32b1461036d5780636f77f29e1461039757806370a082311461046b5780637b781452146104ab5780637ba944d1146105095780637d64bcb4146105b35780638355fa24146105e15780638da5cb5b1461067a578063958ec7d1146106ab578063959b8c3f146106f857806395d89b4114610724578063b239dff0146107b4578063b2d82245146108bc578063be29184f14610909578063d0dc282014610956578063d95b637114610a19578063dd62ed3e14610a6e578063f0a147ad14610abf578063f68deec214610b3b578063f99ef5a514610bf6578063fad8b32a14610c61578063fbb001d614610c8d57610172565b60006000fd5b34156101845760006000fd5b61018c610cda565b604051808215151515815260100191505060405180910390f35b34156101b25760006000fd5b6101ba610ced565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156101fb5780820151818401525b6010810190506101df565b50505050905090810190600f1680156102285780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156102425760006000fd5b61024a610d9f565b6040518082815260100191505060405180910390f35b341561026c5760006000fd5b6102826004808035906010019091905050610dd1565b604051808215151515815260100191505060405180910390f35b34156102a85760006000fd5b6102b0610e2f565b6040518082815260100191505060405180910390f35b34156102d25760006000fd5b6102da610e41565b604051808260ff1660ff16815260100191505060405180910390f35b34156103025760006000fd5b61032960048080806010013590359091602001909192908035906010019091905050610e4f565b604051808215151515815260100191505060405180910390f35b341561034f5760006000fd5b610357610f68565b6040518082815260100191505060405180910390f35b34156103795760006000fd5b610381610f7a565b6040518082815260100191505060405180910390f35b34156103a35760006000fd5b610469600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050610f83565b005b34156104775760006000fd5b61049560048080806010013590359091602001909192905050610fc2565b6040518082815260100191505060405180910390f35b34156104b75760006000fd5b6104ef600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091905050610ff3565b604051808215151515815260100191505060405180910390f35b34156105155760006000fd5b6105b16004808080601001359035909160200190919290808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061115d565b005b34156105bf5760006000fd5b6105c7611168565b604051808215151515815260100191505060405180910390f35b34156105ed5760006000fd5b610678600480808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111de565b005b34156106865760006000fd5b61068e6111e7565b604051808383825281601001526020019250505060405180910390f35b34156106b75760006000fd5b6106de600480808060100135903590916020019091929080359060100190919050506111f6565b604051808215151515815260100191505060405180910390f35b34156107045760006000fd5b61072260048080806010013590359091602001909192905050611285565b005b34156107305760006000fd5b610738611322565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156107795780820151818401525b60108101905061075d565b50505050905090810190600f1680156107a65780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156107c05760006000fd5b6108ba600480808060100135903590916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190808060100135903590600019169090916020019091929080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506113d4565b005b34156108c85760006000fd5b6108ef600480808060100135903590916020019091929080359060100190919050506113e2565b604051808215151515815260100191505060405180910390f35b34156109155760006000fd5b61093c60048080806010013590359091602001909192908035906010019091905050611553565b604051808215151515815260100191505060405180910390f35b34156109625760006000fd5b610a1760048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506116d3565b005b3415610a255760006000fd5b610a5460048080806010013590359091602001909192908080601001359035909160200190919290505061170c565b604051808215151515815260100191505060405180910390f35b3415610a7a5760006000fd5b610aa9600480808060100135903590916020019091929080806010013590359091602001909192905050611777565b6040518082815260100191505060405180910390f35b3415610acb5760006000fd5b610b3960048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506117c6565b005b3415610b475760006000fd5b610bdc6004808035906010019082018035906010019191908080602002601001604051908101604052809392919081815260100183836020028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919050506117f7565b604051808215151515815260100191505060405180910390f35b3415610c025760006000fd5b610c5f6004808035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611983565b005b3415610c6d5760006000fd5b610c8b600480808060100135903590916020019091929050506119ae565b005b3415610c995760006000fd5b610cc060048080806010013590359091602001909192908035906010019091905050611a4b565b604051808215151515815260100191505060405180910390f35b600c60009054906101000a900460ff1681565b610cf561255c565b60046000508054600181600116156101000203166002900480600f016010809104026010016040519081016040528092919081815260100182805460018160011615610100020316600290048015610d905780600f10610d6357610100808354040283529160100191610d90565b8201919060005260106000209050905b815481529060010190601001808311610d7357829003600f168201915b50505050509050610d9c565b90565b6000610dc7610db330610fc263ffffffff16565b600760005054611ad490919063ffffffff16565b9050610dce565b90565b600060026000508060010154905433909114919014161515610df35760006000fd5b610e15670de0b6b3a76400008302600760005054611af690919063ffffffff16565b600760005081909090555060019050610e29565b5b919050565b60006007600050549050610e3e565b90565b600060129050610e4c565b90565b6000610ea082600a6000506000338252816010015260200190815260100160002090506000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008b8b825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a360019050610f61565b9392505050565b60006006600050549050610f77565b90565b600b6000505481565b610f9433898961170c63ffffffff16565b1515610fa05760006000fd5b610fb833898989898989896001611b1d63ffffffff16565b5b50505050505050565b6000600860005060008484825281601001526020019081526010016000209050600050549050610fed565b92915050565b6000600a600050600087878252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505482111515156110415760006000fd5b61109082600a6000506000898982528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600a60005060008888825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050819090905550611110338888888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b838387877f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611154565b95945050505050565b5b5050505050505050565b60006002600050806001015490543390911491901416151561118a5760006000fd5b6001600c60006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1600190506111da565b5b90565b5b505050505050565b60026000508060010154905482565b600081600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded876040518082815260100191505060405180910390a36001905061127e565b9392505050565b3383839091149190141615151561129c5760006000fd5b600160096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a35b5050565b61132a61255c565b60056000508054600181600116156101000203166002900480600f0160108091040260100160405190810160405280929190818152601001828054600181600116156101000203166002900480156113c55780600f10611398576101008083540402835291601001916113c5565b8201919060005260106000209050905b8154815290600101906010018083116113a857829003600f168201915b505050505090506113d1565b90565b5b5050505050505050505050565b60006000600a6000506000338252816010015260200190815260100160002090506000506000868682528160100152602001908152601001600020905060005054905080831115611476576000600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055506114cc565b6114898382611ad490919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055505b8484337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008c8c825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a36001915061154b565b509392505050565b6000600260005080600101549054339091149190141615156115755760006000fd5b600c60009054906101000a900460ff161515156115925760006000fd5b670de0b6b3a76400008202915081506007600050546115bf83600b60005054611af690919063ffffffff16565b111515156115cd5760006000fd5b6115e582600b60005054611af690919063ffffffff16565b600b6000508190909055506116248260086000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b60086000506000868682528160100152602001908152601001600020905060005081909090555083837f56e184a04f4acbb46419fef039f6ceb5f04cb0ae59e0a0f971f128a2274ded9c856040518082815260100191505060405180910390a28383600060007f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a3600190506116ca565b5b5b9392505050565b6116e433878761170c63ffffffff16565b15156116f05760006000fd5b611704338787878787611d9963ffffffff16565b5b5050505050565b600082828686909114919014168061176857506009600050600086868252816010015260200190815260100160002090506000506000848482528160100152602001908152601001600020905060009054906101000a900460ff165b905061176f565b949350505050565b6000600a60005060008686825281601001526020019081526010016000209050600050600084848252816010015260200190815260100160002090506000505490506117be565b949350505050565b6117f033338888888860106040519081016040528060008152601001506001611b1d63ffffffff16565b5b50505050565b600060006002600050806001015490543390911491901416151561181b5760006000fd5b6000845111151561182c5760006000fd5b8251845114151561183d5760006000fd5b600090505b83518110156119725760006000858381518110151561185d57fe5b90601001906020020180601001519051909114919014161515156118815760006000fd5b6000838281518110151561189157fe5b906010019060100201511115156118a85760006000fd5b6118f684828151811015156118b957fe5b90601001906020020180601001519051670de0b6b3a764000086858151811015156118e057fe5b9060100190601002015102611a4b63ffffffff16565b50838181518110151561190557fe5b90601001906020020180601001519051337f57fae1ac296aac0148b76b88b13e6c7b0f828ea10dee26f520382015ef4a5192888781518110151561194557fe5b906010019060100201516040518082815260100191505060405180910390a35b8080600101915050611842565b6001915061197b565b5b5092915050565b6119a9333386866010604051908101604052806000815260100150611d9963ffffffff16565b5b5050565b338383909114919014161515156119c55760006000fd5b600060096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a35b5050565b6000611a8a3333888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b8383337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611acd565b9392505050565b6000828211151515611ae65760006000fd5b8183039050611af0565b92915050565b600081830190508050828110151515611b0f5760006000fd5b809050611b17565b92915050565b611b2c84611f7f63ffffffff16565b611b438a8a8a8a8a8a8a8a8a611fc063ffffffff16565b60006000878790911491901416151515611b5d5760006000fd5b30878790911491901416151515611b745760006000fd5b83600860005060008a8a8252816010015260200190815260100160002090506000505410151515611ba55760006000fd5b611bd984600860005060008b8b82528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008a8a825281601001526020019081526010016000209050600050819090905550611c348460086000506000898982528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600860005060008888825281601001526020019081526010016000209050600050819090905550611c738a8a8a8a8a8a8a8a8a8a6121a763ffffffff16565b858589898d8d7f6565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b08b8b8b604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ce85780820151818401525b601081019050611ccc565b50505050905090810190600f168015611d155780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611d4f5780820151818401525b601081019050611d33565b50505050905090810190600f168015611d7c5780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a45b50505050505050505050565b611da883611f7f63ffffffff16565b82611db98686610fc263ffffffff16565b10151515611dc75760006000fd5b611dfb8360086000506000888882528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008787825281601001526020019081526010016000209050600050819090905550611e3a83600760005054611ad490919063ffffffff16565b6007600050819090905550611e5e8787878760006000898989611fc063ffffffff16565b848488887f01055277133200c3a8bacd68b8d67d1c54154ac94c975287d02eeb1d5f696b12888888604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ed15780820151818401525b601081019050611eb5565b50505050905090810190600f168015611efe5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611f385780820151818401525b601081019050611f1c565b50505050905090810190600f168015611f655780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a35b50505050505050565b80611faf600660005054611fa1600660005054856123b490919063ffffffff16565b6123df90919063ffffffff16565b141515611fbc5760006000fd5b5b50565b600060006120148989603060405190810160405280601181526010016f414950303034546f6b656e53656e646581526010016f7200000000000000000000000000000081526010015061242263ffffffff16565b91509150600060008383909114919014161561202f5761219a565b8181634e1524c18d8d8d8d8d8d8d8d8d6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156120c95780820151818401525b6010810190506120ad565b50505050905090810190600f1680156120f65780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156121305780820151818401525b601081019050612114565b50505050905090810190600f16801561215d5780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b15156121875760006000fd5b5af115156121955760006000fd5b505050505b5050505050505050505050565b600060006121fb8888603060405190810160405280601481526010016f414950303034546f6b656e526563697081526010016f69656e7400000000000000000000000081526010015061242263ffffffff16565b9150915060006000838390911491901416151561238157818163417bf7af8e8e8e8e8e8e8e8e8e6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156122ac5780820151818401525b601081019050612290565b50505050905090810190600f1680156122d95780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156123135780820151818401525b6010810190506122f7565b50505050905090810190600f1680156123405780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b151561236a5760006000fd5b5af115156123785760006000fd5b505050506123a5565b82156123a457612397888861254b63ffffffff16565b15156123a35760006000fd5b5b5b5b505050505050505050505050565b60006000821115156123c65760006000fd5b81838115156123d157fe5b0490506123d9565b92915050565b600060008314156123f3576000905061241c565b8183029050805081838281151561240657fe5b041415156124145760006000fd5b80905061241c565b92915050565b6000600060006000846040518082805190601001908083835b60108310151561246157805182525b60108201915060108101905060108303925061243b565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463ff42bfd6898986866000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156125155760006000fd5b5af115156125235760006000fd5b50505050604051808060100151905190916020015093509350612541565b5050935093915050565b600060019050612556565b92915050565b601060405190810160405280600081526010015090565b8260086000506000848482528160100152602001908152601001600020905060005081909090555081818460007f7f0c55adb7f69e3decf3ca20f9a2367b205d728e6905eea6c4fb6f3934f842cc60405160405180910390a35b505050565b60006000846040518082805190601001908083835b60108310151561260d57805182525b6010820191506010810190506010830392506125e7565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463a1e6b0663086868a8a6040518763ffffffff166c010000000000000000000000000281526004018087878252816010015260200185859060001916909060001916908252816010015260200183838252816010015260200196505050505050506000604051808303816000888881813b15156126c75760006000fd5b5af115156126d55760006000fd5b505050505b50505050505600a165627a7a7230582010e55ed479c7271d66651ea5c5f57d7437032caf45bedc8a05c6911cca9158090029")).withContractIndex(contract_685a1, ByteArrayWrapper.wrap(Hex.decode("4d93ab5e6fefb5b0fe77159447121edd788acb58b7ef48c3f4ab8fae417159f9")), // block 3_277_220
    ByteArrayWrapper.wrap(Hex.decode("7795219b807f58136f09981ad40e637d4e49e4d405204ed0188ec5643df7aea2")), InternalVmType.FVM).withDetails(contract_e26fd, Hex.decode("f93641a0a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fd8080b913c2f913bfb9042008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4232b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac05025443c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba01c30046276bb7f1208d498ce729a1be65c625e6a58fc84b4433ca43c7410b8cfe4bd0c76bdb256450378016458f9d25da2fbb141bbf3e4dde3a88ea29326b6554941125a7035c8ff6ea49ba19f338747bc845cfbb0a06e8cd0f3c071aa47940dae22a132797e6645dbaa6ad9820289cbc09f976aee19859147cf3982fd7caf68c1ae0722b36755e4a342643b287c0133a47367bb0eeea8be329bd30828c4203002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d87c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a1a0e7a4b7004bbfe92e444aa88474d37d5f4cae6fae58f3ce7faca643fc99c273994667d33a2d2cfd58f184df1669df247f6f2468aa476c139bbacf47c9b1a885b8602961d90f1df1031e7a8aef415b61b550d8f45b05256688fa66c0b3beed5bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f5b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9df997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b5d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d6e16d9291c166ebe11818d209da552709fe3963fab0c0973d9ada8c09389fed0d7921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b44e417c800d9db5ce7682f04e2667718d7ce13b1a348951d4133320df070ebc9ee05bd33ffadb7dea3aeee2076c485e7f8ab017515ef226a7c2d486544c13f1dae3640160eb0add665b67d993b0d372140abd4832cc7093f31da906a474647a88edbf8254664854ac47e3e799f54a9757e74a3c7a990f5ce630cd19d5bade9a8d67dbf3a52a5bc922fec0c8476f0f62e633038d1cc462095a3279b1c490409ed355ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c1755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c14f002a0a162b31c33f9d52285ad5a594cca7f98c4966128a66b21f2aa1cecfd102a26bf5465482abaafe59de62ef1d3b9bfff829b0052489800b6c357cd10e8ddbacbecd1f9a4b946921a205a5f3067962072ae11a9b5d96d86c6dadf3eab8b1f9839b9167dd78e1679b14b4805371e325d7d20e3468b33c5723282b80c209eff60558f07a3287c03609554966939a12d0e287b905c9597ad474ba2e1ee53391818cce5875c3ae68ae716d5f5fd218ea9f103e082775af3f8cd681710f9cccc5e182d61584c60037b511832bc02dd5ab0ca21a32f856b52b813ec7002ec01bb3f90f5cb4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe29190f2c96b8e06caaf785f69ddf11637ab18b4f3a031254a74ec360b89b0720387c28f5e4808a10682322049574b6649da7318d1879190a07d9895f295b815eb88268c820cfcfda3e2a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b001b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4238080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4238080a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180b893f89180808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b873f87180808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080808080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880a3e2a02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c01a3e2a03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c01b4f3a03462725d95f5486b842eecbad59e8900bcedd98920b24929fc5f305b510eecd39190f2c96b8e06caaf785f69ddf11637ab18aceba0309489a9529008ce5afed97a80893cb79e2eb35654d88bcf4c1643d568a503f68988016345785d8a0000b853f85180808080a0f9839b9167dd78e1679b14b4805371e325d7d20e3468b33c5723282b80c209ef80808080808080a0dbf8254664854ac47e3e799f54a9757e74a3c7a990f5ce630cd19d5bade9a8d680808080b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a07d9895f295b815eb88268c820cfcfdb4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c91909342c1bcdfe9297ef594fa352c7cab26b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b5f4a12041254a74ec360b89b0720387c28f5e4808a10682322049574b6649da7318d1879190a07d9895f295b815eb88268c820cfcfdb853f85180808080a05d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d680808080a03c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba080808080808080b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4238080a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b8d3f8d1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b90134f90131a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0e182d61584c60037b511832bc02dd5ab0ca21a32f856b52b813ec7002ec01bb380a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180abea9f38d897ae1e0273111b21587591f5872ac1f4889e743285b960a1798789b58c89880de0b6b3a7640000b90154f90151a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a002a26bf5465482abaafe59de62ef1d3b9bfff829b0052489800b6c357cd10e8d80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4aa01a0e7a4b7004bbfe92e444aa88474d37d5f4cae6fae58f3ce7faca643fc99c2780a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180b853f851808080a0818cce5875c3ae68ae716d5f5fd218ea9f103e082775af3f8cd681710f9cccc58080a0c1ae0722b36755e4a342643b287c0133a47367bb0eeea8be329bd30828c4203080808080808080808080b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c919041696f6e546b6e00000000000000000eb90154f90151a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0e182d61584c60037b511832bc02dd5ab0ca21a32f856b52b813ec7002ec01bb380a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4aa01a0e7a4b7004bbfe92e444aa88474d37d5f4cae6fae58f3ce7faca643fc99c2780a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180a3e213a03994667d33a2d2cfd58f184df1669df247f6f2468aa476c139bbacf47c9b1a88b853f85180808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080808080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880abea9f347ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68988016345785d8a0000b8b3f8b1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190777841696f6e0000000000000000000caceba033447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68988016345785d8a0000b83baced0005757200025b42acf317f8060854e00200007870000000207dbf3a52a5bc922fec0c8476f0f62e633038d1cc462095a3279b1c490409ed35f92256b922536050604052361561015c576000356c01000000000000000000000000900463ffffffff16806302387a7b1461018b57806306fdde03146101af57806307802a891461023f578063097c23f81461027457806318160ddd1461029e578063238dafe0146102c8578063313ce567146102f6578063556f0dc714610326578063607b9f97146103505780636f77f29e1461038157806370a08231146104555780637b781452146104955780637ba944d1146104f35780638355fa241461059d5780638da5cb5b14610636578063958ec7d114610667578063959b8c3f146106b457806395d89b41146106e0578063b239dff014610770578063bcb60fa914610878578063d0dc28201461089e578063d95b637114610961578063dd62ed3e146109b6578063f0a147ad14610a07578063f340fa0114610a83578063f99ef5a514610aa3578063fad8b32a14610b0e578063fbb001d614610b3a5761015c565b5b600b60009054906101000a900460ff1615156101795760006000fd5b61018833610b8763ffffffff16565b5b005b34156101975760006000fd5b6101ad6004808035906010019091905050610cc2565b005b34156101bb5760006000fd5b6101c3610cf2565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156102045780820151818401525b6010810190506101e8565b50505050905090810190600f1680156102315780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b341561024b5760006000fd5b61027260048080806010013590359091602001909192908035906010019091905050610da4565b005b34156102805760006000fd5b610288610f55565b6040518082815260100191505060405180910390f35b34156102aa5760006000fd5b6102b2610f87565b6040518082815260100191505060405180910390f35b34156102d45760006000fd5b6102dc610f99565b604051808215151515815260100191505060405180910390f35b34156103025760006000fd5b61030a610fac565b604051808260ff1660ff16815260100191505060405180910390f35b34156103325760006000fd5b61033a610fba565b6040518082815260100191505060405180910390f35b341561035c5760006000fd5b610364610fcc565b604051808383825281601001526020019250505060405180910390f35b341561038d5760006000fd5b610453600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050610fdb565b005b34156104615760006000fd5b61047f6004808080601001359035909160200190919290505061101a565b6040518082815260100191505060405180910390f35b34156104a15760006000fd5b6104d960048080806010013590359091602001909192908080601001359035909160200190919290803590601001909190505061104b565b604051808215151515815260100191505060405180910390f35b34156104ff5760006000fd5b61059b6004808080601001359035909160200190919290808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111b5565b005b34156105a95760006000fd5b610634600480808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111c0565b005b34156106425760006000fd5b61064a6111c9565b604051808383825281601001526020019250505060405180910390f35b34156106735760006000fd5b61069a600480808060100135903590916020019091929080359060100190919050506111d8565b604051808215151515815260100191505060405180910390f35b34156106c05760006000fd5b6106de60048080806010013590359091602001909192905050611267565b005b34156106ec5760006000fd5b6106f4611304565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156107355780820151818401525b601081019050610719565b50505050905090810190600f1680156107625780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b341561077c5760006000fd5b610876600480808060100135903590916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190808060100135903590600019169090916020019091929080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506113b6565b005b34156108845760006000fd5b61089c600480803515159060100190919050506113c4565b005b34156108aa5760006000fd5b61095f60048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611404565b005b341561096d5760006000fd5b61099c60048080806010013590359091602001909192908080601001359035909160200190919290505061143d565b604051808215151515815260100191505060405180910390f35b34156109c25760006000fd5b6109f16004808080601001359035909160200190919290808060100135903590916020019091929050506114a8565b6040518082815260100191505060405180910390f35b3415610a135760006000fd5b610a8160048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506114f7565b005b610aa160048080806010013590359091602001909192905050610b87565b005b3415610aaf5760006000fd5b610b0c6004808035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611528565b005b3415610b1a5760006000fd5b610b3860048080806010013590359091602001909192905050611553565b005b3415610b465760006000fd5b610b6d600480808060100135903590916020019091929080359060100190919050506115f0565b604051808215151515815260100191505060405180910390f35b600b60009054906101000a900460ff161515610ba35760006000fd5b60006000838390911491901416151515610bbd5760006000fd5b60003414151515610bce5760006000fd5b610c02346008600050600085858252816010015260200190815260100160002090506000505461167990919063ffffffff16565b600860005060008484825281601001526020019081526010016000209050600050819090905550610c413460076000505461167990919063ffffffff16565b60076000508190909055507fcfc9ea1a968c72c91178476fa3b83a07e27018034488f6c866e54b86b1077f6f346040518082815260100191505060405180910390a18181307f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959346040518082815260100191505060405180910390a35b5050565b600b60009054906101000a900460ff161515610cde5760006000fd5b610cee3383610da463ffffffff16565b5b50565b610cfa612101565b60046000508054600181600116156101000203166002900480600f016010809104026010016040519081016040528092919081815260100182805460018160011615610100020316600290048015610d955780600f10610d6857610100808354040283529160100191610d95565b8201919060005260106000209050905b815481529060010190601001808311610d7857829003600f168201915b50505050509050610da1565b90565b600b60009054906101000a900460ff161515610dc05760006000fd5b60006000848490911491901416151515610dda5760006000fd5b60008114151515610deb5760006000fd5b600860005060008484825281601001526020019081526010016000209050600050548111151515610e1c5760006000fd5b82823090911491901416151515610e335760006000fd5b610e6781600860005060008686825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b600860005060008585825281601001526020019081526010016000209050600050819090905550610ea6816007600050546116a090919063ffffffff16565b600760005081909090555030337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959866040518082815260100191505060405180910390a37ff60ed2c5ae890dbad0839fd18e28b8599923aab42590a3e690920aa7830e7bd0826040518082815260100191505060405180910390a182826108fc83908115029060405160006040518083038185898989f19450505050501515610f4f5760006000fd5b5b505050565b6000610f7d610f693061101a63ffffffff16565b6007600050546116a090919063ffffffff16565b9050610f84565b90565b60006007600050549050610f96565b90565b600b60009054906101000a900460ff1681565b600060129050610fb7565b90565b60006006600050549050610fc9565b90565b600c6000508060010154905482565b610fec33898961143d63ffffffff16565b1515610ff85760006000fd5b611010338989898989898960016116c263ffffffff16565b5b50505050505050565b6000600860005060008484825281601001526020019081526010016000209050600050549050611045565b92915050565b6000600a600050600087878252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505482111515156110995760006000fd5b6110e882600a60005060008989825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b600a600050600088888252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000508190909055506111683388888888886010604051908101604052806000815260100150601060405190810160405280600081526010015060006116c263ffffffff16565b838387877f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a3600190506111ac565b95945050505050565b5b5050505050505050565b5b505050505050565b60026000508060010154905482565b600081600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded876040518082815260100191505060405180910390a360019050611260565b9392505050565b3383839091149190141615151561127e5760006000fd5b600160096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a35b5050565b61130c612101565b60056000508054600181600116156101000203166002900480600f0160108091040260100160405190810160405280929190818152601001828054600181600116156101000203166002900480156113a75780600f1061137a576101008083540402835291601001916113a7565b8201919060005260106000209050905b81548152906001019060100180831161138a57829003600f168201915b505050505090506113b3565b90565b5b5050505050505050505050565b600260005080600101549054339091149190141615156113e45760006000fd5b8015600b60006101000a81548160ff0219169083151502179055505b5b50565b61141533878761143d63ffffffff16565b15156114215760006000fd5b61143533878787878761193e63ffffffff16565b5b5050505050565b600082828686909114919014168061149957506009600050600086868252816010015260200190815260100160002090506000506000848482528160100152602001908152601001600020905060009054906101000a900460ff165b90506114a0565b949350505050565b6000600a60005060008686825281601001526020019081526010016000209050600050600084848252816010015260200190815260100160002090506000505490506114ef565b949350505050565b611521333388888888601060405190810160405280600081526010015060016116c263ffffffff16565b5b50505050565b61154e33338686601060405190810160405280600081526010015061193e63ffffffff16565b5b5050565b3383839091149190141615151561156a5760006000fd5b600060096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a35b5050565b600061162f33338888886010604051908101604052806000815260100150601060405190810160405280600081526010015060006116c263ffffffff16565b8383337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611672565b9392505050565b6000818301905080508281101515156116925760006000fd5b80905061169a565b92915050565b60008282111515156116b25760006000fd5b81830390506116bc565b92915050565b6116d184611b2463ffffffff16565b6116e88a8a8a8a8a8a8a8a8a611b6563ffffffff16565b600060008787909114919014161515156117025760006000fd5b308787909114919014161515156117195760006000fd5b83600860005060008a8a825281601001526020019081526010016000209050600050541015151561174a5760006000fd5b61177e84600860005060008b8b825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b600860005060008a8a8252816010015260200190815260100160002090506000508190909055506117d9846008600050600089898252816010015260200190815260100160002090506000505461167990919063ffffffff16565b6008600050600088888252816010015260200190815260100160002090506000508190909055506118188a8a8a8a8a8a8a8a8a8a611d4c63ffffffff16565b858589898d8d7f6565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b08b8b8b604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b8381101561188d5780820151818401525b601081019050611871565b50505050905090810190600f1680156118ba5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156118f45780820151818401525b6010810190506118d8565b50505050905090810190600f1680156119215780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a45b50505050505050505050565b61194d83611b2463ffffffff16565b8261195e868661101a63ffffffff16565b1015151561196c5760006000fd5b6119a083600860005060008888825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b6008600050600087878252816010015260200190815260100160002090506000508190909055506119df836007600050546116a090919063ffffffff16565b6007600050819090905550611a038787878760006000898989611b6563ffffffff16565b848488887f01055277133200c3a8bacd68b8d67d1c54154ac94c975287d02eeb1d5f696b12888888604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611a765780820151818401525b601081019050611a5a565b50505050905090810190600f168015611aa35780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611add5780820151818401525b601081019050611ac1565b50505050905090810190600f168015611b0a5780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a35b50505050505050565b80611b54600660005054611b4660066000505485611f5990919063ffffffff16565b611f8490919063ffffffff16565b141515611b615760006000fd5b5b50565b60006000611bb98989603060405190810160405280601181526010016f414950303034546f6b656e53656e646581526010016f72000000000000000000000000000000815260100150611fc763ffffffff16565b915091506000600083839091149190141615611bd457611d3f565b8181634e1524c18d8d8d8d8d8d8d8d8d6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611c6e5780820151818401525b601081019050611c52565b50505050905090810190600f168015611c9b5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611cd55780820151818401525b601081019050611cb9565b50505050905090810190600f168015611d025780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b1515611d2c5760006000fd5b5af11515611d3a5760006000fd5b505050505b5050505050505050505050565b60006000611da08888603060405190810160405280601481526010016f414950303034546f6b656e526563697081526010016f69656e74000000000000000000000000815260100150611fc763ffffffff16565b91509150600060008383909114919014161515611f2657818163417bf7af8e8e8e8e8e8e8e8e8e6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611e515780820151818401525b601081019050611e35565b50505050905090810190600f168015611e7e5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611eb85780820151818401525b601081019050611e9c565b50505050905090810190600f168015611ee55780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b1515611f0f5760006000fd5b5af11515611f1d5760006000fd5b50505050611f4a565b8215611f4957611f3c88886120f063ffffffff16565b1515611f485760006000fd5b5b5b5b505050505050505050505050565b6000600082111515611f6b5760006000fd5b8183811515611f7657fe5b049050611f7e565b92915050565b60006000831415611f985760009050611fc1565b81830290508050818382811515611fab57fe5b04141515611fb95760006000fd5b809050611fc1565b92915050565b6000600060006000846040518082805190601001908083835b60108310151561200657805182525b601082019150601081019050601083039250611fe0565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463ff42bfd6898986866000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156120ba5760006000fd5b5af115156120c85760006000fd5b505050506040518080601001519051909160200150935093506120e6565b5050935093915050565b6000600190506120fb565b92915050565b601060405190810160405280600081526010015090565b60006000846040518082805190601001908083835b60108310151561215357805182525b60108201915060108101905060108303925061212d565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463a1e6b0663086868a8a6040518763ffffffff166c010000000000000000000000000281526004018087878252816010015260200185859060001916909060001916908252816010015260200183838252816010015260200196505050505050506000604051808303816000888881813b151561220d5760006000fd5b5af1151561221b5760006000fd5b505050505b50505050505600a165627a7a723058202c5097dec8aa5c968da2516576b53203aa99fa6cfd6210bec1186d5e103bcc0d0029")).withContractIndex(contract_e26fd, ByteArrayWrapper.wrap(Hex.decode("b3a5cd92ce03e981e8bcf866edb008818abb0962e7e18763ea76fe602e4399c3")), // block 3_292_810
    ByteArrayWrapper.wrap(Hex.decode("c6f118aed5d084d07c500602ba70136ead08459d552b97f4824e5106c784bb7a")), InternalVmType.FVM).withAvmEnabled().build().bc;
    // ensure the contract does not exist before the import
    AionAddress contract_12ee0 = AddressUtils.wrapAddress("a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee0");
    assertThat(blockchain.getRepository().getAccountState(contract_12ee0)).isNull();
    // import block
    Pair<ImportResult, AionBlockSummary> results = blockchain.tryToConnectAndFetchSummary(blockToImport);
    assertThat(results.getLeft()).isEqualTo(ImportResult.IMPORTED_BEST);
    // check that the new account state exists
    AccountState account_12ee0 = blockchain.getRepository().getAccountState(contract_12ee0);
    assertThat(account_12ee0).isNotNull();
    byte[] storedCodeHash = account_12ee0.getCodeHash();
    assertThat(storedCodeHash).isEqualTo(Hex.decode("391b46a6c577a9d1fb40ec7fd1b3f757c123fa68e16f3e481d86e6dec9ca4d10"));
    // check that the contract index was correctly updated
    ContractInformation ci = blockchain.getRepository().getIndexedContractInformation(contract_12ee0);
    assertThat(ci.getVmUsed(storedCodeHash)).isEqualTo(InternalVmType.FVM);
    assertThat(ci.getInceptionBlocks(storedCodeHash)).contains(blockToImport.getHashWrapper());
    // collect the consensus information from the block & receipt.
    AionBlockSummary blockSummary = results.getRight();
    long[] energyPerTx = new long[] { 21_000L, 682_044L, 21_000L, 21_000L };
    byte[][] postTxStates = new byte[][] { Hex.decode("4d0c77f874eae3b60fa464967ee4c5d273f28251c5653134339d9325ef4df437"), Hex.decode("3f9941fb0994827660ae7d93ff256ef05a75072bebbaa3a811e99be25324ae82"), Hex.decode("907cf5a610e2fc43805b592d8abd554da7e57f1c083dde75616a0c433f7caf48"), Hex.decode("a7ce7d4adb083485bad984bb69ed6e5f822672fdaeed5eac04707fbaca5e9cf6") };
    byte[][] txReceiptTrie = new byte[][] { Hex.decode("f90125a04d0c77f874eae3b60fa464967ee4c5d273f28251c5653134339d9325ef4df437b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"), Hex.decode("f90429a03f9941fb0994827660ae7d93ff256ef05a75072bebbaa3a811e99be25324ae82b9010000088080000000000000100000000000000000000000000000000000000000000000000000001080000000000000000000000000080000000000000000000080000000020000000000000000000000000000000002000000000000101000000000000000040002000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000001000000000000000040000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000040100000000000000000000004000000000000000000000000000410040800000000f90302f885a0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e3633e1a0d1055ec94b4a7a0d56691f9dbf655f3a683a28857c2c565ed0c3e910645b34c7b8400000000000000000000000000000001000000000000000000000000000000001a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1f8e5a0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e3633e1a053e51eafcc6cc48771db669cdabad660678aa9510059c72a6bb42930a9a6fe12b8a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee000000000000000000008e1bc9bf0400068a745df0db885e014513a5d98102e725fd5bb97a4fd39f9f574e15a5ec58015000000000000000000000000000000800000000000000000000000000000000745584730303031000000000000000000f8f9a0a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fdf884a06565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b0a0a0b75b3dffe8d4f0e3c5d07f31437e939040593230d6658cae57b2a0fd2aa803a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0a0b177c837e80040e16d9769fdd2b3c2869a2a7e626cce0e65036cc22041be5ab85000000000000000000008e1bc9bf0400000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f897a0a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fdf863a027772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0a0b177c837e80040e16d9769fdd2b3c2869a2a7e626cce0e65036cc22041be5a9000000000000000000008e1bc9bf04000"), Hex.decode("f90125a0907cf5a610e2fc43805b592d8abd554da7e57f1c083dde75616a0c433f7caf48b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"), Hex.decode("f90125a0a7ce7d4adb083485bad984bb69ed6e5f822672fdaeed5eac04707fbaca5e9cf6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0") };
    int[] expectedIntTxSizes = new int[] { 0, 9, 0, 0 };
    // check the receipts
    for (int i = 0; i < postTxStates.length; i++) {
        AionTxReceipt receipt = blockSummary.getSummaries().get(i).getReceipt();
        byte[] txHash = receipt.getTransaction().getTransactionHash();
        assertThat(receipt.isSuccessful()).isTrue();
        assertThat(receipt.getEnergyUsed()).isEqualTo(energyPerTx[i]);
        assertThat(receipt.getPostTxState()).isEqualTo(postTxStates[i]);
        assertThat(receipt.getReceiptTrieEncoded()).isEqualTo(txReceiptTrie[i]);
        List<InternalTransaction> internal = blockSummary.getSummaries().get(i).getInternalTransactions();
        assertThat(internal.size()).isEqualTo(expectedIntTxSizes[i]);
        assertThat(blockchain.getTransactionInfo(txHash).getInternalTransactions()).isEqualTo(internal.size() == 0 ? null : internal);
    }
    byte[] stateRoot = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot = blockSummary.getBlock().getReceiptsRoot();
    // verify the consensus information.
    String expectedRoot = "f30f1664810717a262352f1a04bf4baa93e350a070ae31713dd4de41eac99dea";
    String expectedReceiptsRoot = "e24c156b92a7f6d806de5dd349c768d839267e124d7b34cb44a463c343b466f4";
    assertThat(stateRoot).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockReceiptsRoot).isEqualTo(Hex.decode(expectedReceiptsRoot));
    // checking repository state and total difficulty
    assertThat(blockchain.getRepository().getRoot()).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockchain.getTotalDifficulty()).isEqualTo(expectedTotalDifficultyAfterImport);
}
Also used : AionAddress(org.aion.types.AionAddress) ImportResult(org.aion.zero.impl.core.ImportResult) Builder(org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder) StandaloneBlockchain(org.aion.zero.impl.blockchain.StandaloneBlockchain) AccountState(org.aion.base.AccountState) InternalTransaction(org.aion.types.InternalTransaction) ContractInformation(org.aion.zero.impl.db.ContractInformation) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) Block(org.aion.zero.impl.types.Block) BigInteger(java.math.BigInteger) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Example 8 with StandaloneBlockchain

use of org.aion.zero.impl.blockchain.StandaloneBlockchain in project aion by aionnetwork.

the class MasteryConsensusTest method testImportBlock257159.

/**
 * Tests importing block <a href="https://mastery.aion.network/#/block/257159">257159</a>.
 */
@Test
public void testImportBlock257159() {
    TransactionTypeRule.disallowAVMContractTransaction();
    // data extracted from the mastery network
    Block block257157 = BlockUtil.newBlockFromRlp(Hex.decode("f90fabf90790018303ec85a0d8e71cb982b7140ea0d97ee8f3fb73da643c8af5867d0acff7b2247fbffb8dbea0a0661d1ec255e885c6a2de292df7d6da98a96ce1071851238c79ba04d20204bfa0a1772d6a736a5b4f75cd057ccfc3b9149592ae59823b6c29eb7153312517b790a069859145b84cc44f1f46d2ac42e5ca176f59705f7db1f062dc30c5474f911804a0600f576a7a0d18ce95bf03f5376c9b50295dbf8bb14ebfdc0b0e823f4733016ab90100000000020848002000000000000020100100000200000804080000000200000000018000010010004000000080080004008004000100200800001000080000008000000000808004000000000000000000004000000000000100000008002205400200000000000040002040000000000000002002090080010800020022002000000000008000000004000100020040000000001000000000000000000000800101402000000010010090000000000030000004020000400008008080080000100000020000100040040008000040000100800000000002000120800000080000010000800004100000000000400000000100000000000010001000004020009000000000000000000000000000000013a041494f4e0000000000000000000000000000000000000000000000000000000083022c7483e4d3e4845b7db025a074bf845f70352d6140cbc2196b4ec62077394a6c01d7bcf5ad621c1b61c2f266b90580004e0ce3c30ac299f5ae5e4adb15bc0fdc22a97ec2e80dff2ecf5bbbb56bf2043e0e6ed6df7c60f11c556b3304d76885eff4c88518268d3a6cc1785e4b8fa532bb52091385650f4a165b38741c7d136b46d07dac2f77aa44238af2e1454bbcb4b9d823240ae3a68eda93293a9e0d25b52caaea0a83996b970d4d02e246312d62bcbdc02040871711e3844a177934cba4baf2eca2cb07d5fcf0f8560902732eda3535356aa15a7a33a3ebdccc9bb4ba460a6654f57b92ef05af60c088a6ceacd51a1a937fa9010bf7f160c666e4319ca77c135b859594f139bbef638018dcdd6faef39f6177a1dba14be34a3b9cf0bb3bf01d69ecb5b5ab39127cba83b9b0ca96d843fdb202bfd21e0e16a232ae21696cb2b87e3eb2f35d9e4a3a97fcff4223e0a4cf68e2607da2fa733854335baae7f90daf66e0211caa82beeb5d3c3f50b0683cf60c8d28db172f4ebf2d20f69c9a36d02a5d63b89ab3da9f74fba349fb9b430119d4de09e287e9fc2f0507b802f234338c081bf24d18f5ab035b719b812e92b238a03f4d5d157cdda30249076ee173f4b58f16df31f20b1de595d4ba6fd06b99412f06f30af7769541e5f47e301777f5f8dc9c873434ab065afaaf3e00e4d7936e648158eee1e4ee7a6bbae9f218da2d8422d26e0cfe0b726ab34685d89ca24cf53392234d6fdc4dc29cbfd3f39426c56d557d18c220fd2d4c3d53c11e6856c8a5694772b9dd9b6abffc62a8327dbe02b1cb8d193549142edc4d547a22305715c88926fcde13bf4d46d294cff2b21d2822ba09a1232635d4b5a09124dd8158c1f3957a775e4243df51921c574ca1e4e06839554b4034f44b523b11308cd4af1619aabaef7aafc906ce5badf122baf4d5df0f4e9a69b931becd6f7d0aac1361eb09663653db1d974d29d494e468ba95fc373810086774c7cc18c2f0bce6121bed1b43f68cba54be0c4e13246db9d211ed60fbc70e5799eea1b327ac46b2c23d0072396b6d43d47919e0060a47b0e8a029244d69656f1170c269a1fbf96dff66ad6062b3d89ab8c62c2b47c10319125cf3a711c2e9e2ff525303ff024ab5273a72711238d57e60bcff49b66f2821a1d92bac7515c36468761b0a2a9e756237fb7607d8413a57edf7d96cbb26ea862b8ae678c287de13f431653b84c3e3c786359fb32e65254ade3c0d52b89c93703037c0d26f1f36489b5d0639262b1e6dee464fa176872c4d222f1cebe5bdc66afef30287b4d3b8e05e7f9fdf7d7b298b816dfae818b7ae7c179edd3a0f35eb7e73dd2b4f3c271c1095af59f1a22b0a5342409d73dce07cf19813be339f1511e1e64fea6e2c18a6fb15754b66dc877d39e387889a65de64abc35a0499e8576f91781fe95968189f37f62e9442bf1e1cfe2d1a0cc478b42edd3a6aac3677e64bf12896cdef842b0abda19cfa10dc59352c7f31e7aee92bf7eb396089c1221ccd95f2f7947b7172276a32a34a63d702007385020305c5b4f97267f25aac8b3836b6e6a2377c6cf9b5d23490eb15652b4afe71749a373363fd3b2636d62eeeb612e1b793793252e05841e0141d016a3e961fc49fb38b435d56cfbb5dff98f9412dbae1b3a0623c29017112240b5203f43890ddbee4bd976f818bec41d9f35535f5c71b644bbee421b9263412652230ce138e83927815c0cc1d9367c1f2f25f007c218c2b10df2f5825d7525a21fa6fb83e9d91896764aeca7b953b3b00938bf2aab365590761ee76b8d67abc7428c28d5606d6678d79ae36895262523a19ae9a127ef41a31851c47fb6549a6b26e487f0c0d1861fa0120b28d14ae5f5902a87fd91405ffd91e343819c0cb6754426685ac4b531fbe5117145c2b35630bd9408a8ee1ceec8d5c58a745b78f9ecaec6c7ab5cc128d69386bd56498a15d0b2d9900d4e3a598617fcfb8105672dfc073e8c11d702f582f09725a38a5b8b8376010dff33cb1957c069c686727602b7e4ac5ae51f8796ff90815f9081213a0000000000000000000000000000000000000000000000000000000000000020000b9077446d1cc2994d52f65c6db64fbe488c79e79ce5214a07d40c8b47fc6e0cf1cf9093108bbf30000000000000000000000000000008000000000000000000000000000000270000000000000000000000000000004600000000000000000000000000000056000000000000000000000000000000610000000000000000000000000000006c00000000000000000000000000000000f4fd6f00a5711539964a3f3a108309d9bda30a84670a2301d815a446e4d233c86e6517bc18dd0f2bd0316f97696d56db596d7ad97abb368f8b510298f4e0dd1d3bc0003682c58940386300b06477123b8eacae22608ab72a01c3625f4bd78f024037881e1883e566b524fdda1781bdce90bd00f268a39e3cd028a356fd1d801c6f487160d06d2a70481106b16e7c01b9e43f4ee29aa0f12ebdf82931e9b6afb24bd722bdf61f16ae163aa1a4536af27d91490ee10b1fa896dc416ca22dc05714cf3f2e80e47ca8ac858573786f3b60fec650147ba3ac2262885cd5465d837c5ce5111fc2b2239844eeb23233ad7109d5134e19b5f3d11369a48f1a6381f02b2b20f92abb9ff51ae24289fdb237a81511bdd7cb4da7b083afbd038abf13680eb965c7c08c9e3c2727d3557b4584340c97a934f8c4a8dd9e94047e9a50a113afa7045bf42cfb241542c53198442e68f1ba4116e88afaf92073db0ce0cf118baa59c80dfd0267044300203c926c45e6659ec66c5d1f3f81ad280b7f6a3ea7d3289e50117899215bc7a33d91bc8d44ffd15ebea19843d8fa138e7f3a98e8fd329f97e2c9f997c7011b4940e2b40eea6e27d7ab96bfbcc4ee1c203e945d4e267bcf72ab9478e23181829a17e727b87217a5a1f40e8edd37f63ee7b64cfca50a1f140150000000000000000000000000000000fa0c5c9321527c9be3e4ef0a6a2b629201ca752213086ebe679bb02f3723efbe2a03c1aa9acc8f017d7be091ba34f8de39bdb66d502e30d2748d94b1247d4b5f1a02074cd8cf53af1ff1bd304308e85fbc8c4a2c85a6da69a20c2d4891950a252a048540018b5bafc557057626451c07e25b91201214861a605871a24ca4b34dca02a2635816c5d1f8ec623340a1c673b062f9b702ec9bdb2463609427b510865a03cc12c1dd4c72b72ecbc8dc5aec5b7f7c269d0494d64fef577f0f309f6b5f6a0fcaa85248641efe289b47ac2e92427ae90d8e24f4cda220b12b9175e5016c6a0cab59ef8986ae48c65f1cb4a511daade677fc6994bd9d8ee61e7ec45e64867a0b9d26ac575010c148ae259496d68ef412611f684c4cbc29460f90a08bc13bda0d8f55858ca1f97a344b1980630ea7b6afa31962f25fcce84a18a772b1093a9a08fa0341ce80b06ac1d045b6b8e1978a4a4527166dc17fb9ef135cb645cd76ba0b57139359872ae529f3eec2730bdeafc9099d41c1d713687e0a1d719da9fdaa0d9d541beba95a6163bbbf8383761c706f4f164f513feed98bbfa5d5f6e07d9a0e5dd74ba6699a648a71d802427026b001175e0119db02c15f4d4c4c8b0548ca0eeecbd3d70413c7b9a564ff416b84ece7378a19120309080fd8ca3a2ce83930000000000000000000000000000000f000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be40000000000000000000000000000000005c1c1f53160283d16cae44cc092b4ad9c7ca2b8501af421e584e665852137ce9e5ef28c555c278b49afee3171e5b684365240aeff1a026e3295ea29b505e9a0ff3a77870771305f0e63b94ae7a355f5bde859a2eb49133062ec465552036599451062eb71a6fa290ae09813ba4c1639d2967ac706bba3abd229b910b314be0f97ffd54a38223fb0505d3a03b8c5bdc91300302578edf77d2d922cf447d7021d9600000000000000000000000000000005999a9e40d38346aed989ebb16775acd419a353a41ecb7f03dbb789693c5b4877967a05d569854a5abfb2d18961454dd40c0716519df8cadab0bb80d54ee4c197a13ac1fd491a5231572056dceee8f9f5727acdfc36c681e86213c814494587324ede25dc609cdb8e72ab9c977c77cd72376f3d557d4b58d65736db06b6a5c78e95f7cade76621489bb415ea459dbd8f2ddf54540525c7561d9b712109dde7bf6000000000000000000000000000000055d391325d60c1ae26f671fe8b99110204a9e78bc6a080254989cfc3a1ba3e20431622e63cd2b48d1a785a29adda21986c3018655bf851141ae007fe1fc258109c34295cedba6361fa5d912fa7dafbc683fceb2c52a9d35d42713b59750eb400cfbff79b57c8a8feda2d3ffb38f47a4e0a6db0c443c0d629a95ecc4fd87b446059d95a5c070403946b14038d56e77cb7055bbad6058432cb47bc1fc8f64b19f008705740a98449640831e84808800000002540be40001b86019ab2f3355c2f74376718c3f6c96a779de2144c4592a5cab23c82b739dc44fe0c57e5486716a4a0c48e76c5d6b77c47a0e88a90ff50fd6da9d11d19160f86d15fac0914b4ed083412365c1d55a00007094df16758ff19034947df1e0135e3d01"));
    BigInteger tdAt257157 = BigInteger.valueOf(4_224_677);
    Block block257158 = BlockUtil.newBlockFromRlp(Hex.decode("f90791f9078d018303ec86a0a7428f367677c2a099f3dcbdb267a54643c8549fa5015517b8d9316e5a5056b0a0a08fc457b39b03c30dc71bdb89a4d0409dd4fa42f6539a5c3ee4054af9b71f23a05c8970251b97eafa5e37c1e4e7ba2238e4da8cec24d9c8425229f48f043d7f3ea045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0a045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000012a041494f4e000000000000000000000000000000000000000000000000000000008083e50d18845b7db037a05acdb24af0c162e1f3f99f13feeb8a6b7949b51fea91d8dd233f06075a90f015b9058000d465674af5674195f8073b53a2e0e877b94eed530402e83b4e10482ea7f86ef903de3c401eb51971d91abe032579a8de74db2fa9f1f31285e7f7bfb4a501dcdde31a5db10660475946f0869e23b457ae58ab8ee670e20f1378a08066813ddfe1b1ac60c387f56f2618a95b51de1d1734e9d9458222695db23076096bac1927f26e67ab184f536c3654a5257e8eb95ac463005768717122e6ef754befdbce49673facd3eac81f5f3f8eed1b66ba01ef03a797e8c3f9bd06fb2d4b2dc68f487635b56ddf257912894653b6434f02634d7e29c737fa98c915d26f18cc21ab0631a103f18dd9f2402f0325664c46e4fcffd7e449f1165045651d95f4b9546d6d4e3bd1e7efb563d8f3051c578e1bd0c619f0aed50f74b1824d5aafde7700191dee161dd4fcbe20f97db148f0c146821afdd07c67333df8c36f8e13e4e3f2f09b5367ce3af8b5d367de257e61927b26ca27cde73cbe86966c6ff2c3adb289fa081201083bd4d822a370a654951492aee4a1aa9552bcad802456057bbc1269f773d6b25486fb0d1d87b4c9a3a90b2241750a00b2f9602ee30838c7d2d8eea61396f883fd787fbea70eeb604f3959dc86da1feaa909461b76a5330ca053354b11b46e3f9fed2c2d936514f305630d8fd6490aa319102ba66730b93e5148b569c7a808f9f380510e585fd17b41686c6a5bb4449c497ec7779c6cad3cdd16b7a63ab5db3eac330fa931f7f9f770237e26d6ed1f013c20a2b255d80d28bab8955666ecc4eaf4447f25773af8e7ac33480d9cf9ea5e7574f29340ca4e773af4f504a4df64bc456c3a19007b97608f3fa6cda224fbd0a543b02b6db0e9c5a57ecb5c4489bb082c2510f2238459025ddc4048a167c825775716995873aa371b906d1630057cf209c5c157cd3fced932e094e655b35eb21bb58804765e50a5709e2e3a63fd0d056f56130c3de33906c61170b90c2361701eed0ef8240e0af30e499fbdf3853d01586ee452c687b031ecd136d765f517a36dd5712a9b12d7bc76fed162c1e7af91254f1baa4c15dde7defc7f043f2fcb6e37960b2261c249d8fe4ffd0e08fc3c41da1d08f73aa5e9c3f874ecfc2fd1070bfbd5c87138102a18ab318e8cbb632ff0fee453627b251c880a743629b94f8ea5817eed1286f9fe2785312f388dbaa800ed0f4a1b18a52cd775b565acd8e14f7e5725a519dded71b0c73a677767a5765a8baaf25e40ad3b7fb75e1a2cf9165e023be417eeb09633c7bdca04b8b577fcf04bedf7dc090786e45000c3ed777abcaa197bbed42d86382cb2af04216706bf33e436c09d3a9625090cd097a553ff68be8c2e9d576008e60737f8da356245efbdb0e63ffd5f51db0e61d50bf9d7989c2eb73264e59b5b182bdbc07729d420d4c393b2a88299eecaddd22e5b85961e63e67aefd135c987346617d0e5684f7758381999a9e61763a44df14e6fdf3616b7ac2da570f1888526240f489d3dae03d4031ae8410576e480b692330e7626bee7390ba9f3edb81548852e77198c5374b5982c30f569c1e365da2d0efb06299e8496d3b83d3e40ec1d0c7d785455526c72dab54d3a495ea2ea0849aa0be9631dd5dc34c87079faeac717a12e5e9e9599f7a8aabd4b82e9cec185cb41f82998249021187cba5f97abd41168a88bf027b8aa65b667cd2f28b3c6c00814e37ed42476c3c9e94bdb2cac33eedd4c29ebc17cba8f0cfe4d9b6799f728bb4b035f3e422c0a27959d13f871fd303d6beaa1dfd40ccf0bfc7dc79326f97a1a094531be24aebf549c2f89f8aeadfc3b575515be0b28c552e5ea4fc89c1d12e2ab99f57fe65974ec1d06c1ed2756a4adf4065d4df0f1b0b7fba47276f1360d9f5f05a5542af9d8a32b3b827bc07d5c1f22f2acbd44b6a585fc06e1bf2ae0654ac2f5bada9a482738577a0dffd606faa808efa45e9e55e852793bc7a09523e0e510ee7db0c809d342f2b5911843ef52ed7782f777fb4cc0"));
    BigInteger tdAt257158 = BigInteger.valueOf(4_224_695);
    byte[] trieDataAt257158 = Hex.decode(hexEncodedStateData("masteryStateAt257158.txt"));
    // block to import
    Block block257159 = BlockUtil.newBlockFromRlp(Hex.decode("f91720f90790018303ec87a0fbd5975f9f7e7926033fcb005cfd72b34a45b568dab40b203e43b98a6dbd3dc4a0a0661d1ec255e885c6a2de292df7d6da98a96ce1071851238c79ba04d20204bfa0f9f4ab463418ce3d518740aecd4548b81a007e4870108bd3563c0906ad5b3f1da00e067f6d1651dfaef4020c9209889d43979d8b303aa1c2ce5797e887b3bd6e4fa09a9a13a3d306fc29a799cecda3f11e0119d558aee55dca6c4677a79e95b61339b901002026a0004032010450000005000000000080000000080000008004010000080001080000000542009011400008400004200a06202c04001088001000000000000100000000000004c2808008400088000010002000002000000008100200200000068002000020040000200400d0000444201089408800001108000801a0000080200c000000000200200000088204800800804008000000040000000000040400004020060000200000004000009000000000980000028020000080016841040000048a4010008040400000000000040100182000080880000082000002000003010109000010000302000050041000202300200000008000000041008410009000000000000000000000000000000011a041494f4e000000000000000000000000000000000000000000000000000000008304377883e4d3d5845b7db051a0efaa79917647ac5fd9816e93f10b1d4dc0957bfa3a113f3f3834c4dddd658013b90580004a204bc3315d574d080e373f23def00b6f793ddc9d1427518cd089fbff2882972bc172b88d479db5f1bf801bf213ae91c78c7b24d2711eb58ba3cc36b410f755441ea478a55ae65d7f5df1b663e95ba0d77699f73735b506892021ce00a7ba06ebff5af5030c29f86ca1ef09bf4beeb1ac7af694a2bda9764cf79b439c5e2e85be35470cf12cc64f784344a5f41859e46ba0fe9bdcc737e971147dad46cd03766dd4f6062e9266fa66667798757b6c01c8d6b68f3890e72dcdc3241cb09ba395e1fcbeb6250c6653e8fa228c11e82045311282559138779c2bb88d07d941814cf99de477638621059a94bea38d922431a70f6371c63756b31bf92aac20930bcb76e51889ecfb5d0386ed5c23fe4b9c3fecf5250cd77d0e7a8c5aeae1a7093abfb71e1a820ab94d050b7c4b6d5c1501993987fa377dcafc48d4b4d399deff49ef1a020284bf932f2f3d631cce8c7ea7aae8709f126e1173887b68bf94e368a80151ed7a519e0125fdc12d24eaf20f9ea4217d7ff9f8176acb7a7423b7789b763226abe56b9f94cec1e32c060d8fb9c27291e62231253f229415b5cb18e10e7b426810c828b8180210f9b0bef495afebe012dab331f985670869fb6f9633ad6e672aa115109734e9783092727b0d438f47315b56992fb131644cc36dc3a85b19fcac835e096afce94c051b1b15f36614c9f08b2b0a68c9eb7a1b21f941a9d4f2cb212e85c5aa8123e020be7ef37f7eee01658837fd1805fd7d8d9417b29f25e4887f83ee2d8b0c8585bcc6c9a0c5edc9301bd33e165e5b3e3a3be41204ab3309f002f39c53f14470093ffd757ba69a2eb55506b1714d64fd47ff3e49fc8e7ad2a5ed4e3bf23b0f3b030f175aa10b786af95aa4181784fffe69749ced9d71153230ea0be911793492eb17fbef863172e721dbc89f0df29e0ecc6533c16aaef71603e48566625e6e8c8ac064aa79c6b296f29730a4acb31677fab4dbff4fb47643037758d69d31e4476a63ce1679dcfed80ef6b43e96a707e316681eb8d24eb465a11e8bd15d7424afaf2d37e706e4920b027d570d7bf6b5476741e4aca83a4774b7b509e364dca0c1236c1a40b44f8a61899a383e5172a3f2050b69e5bef16a4bd3257d3b724dd60ce4052f26cb5518ffe89526123eb43c659a1a6c53223d6792a0a6f75712382df06422d3ea0bdd9b5491d9861a770735a3720b1af130c8fdb2b7a6963541606fb1fbbf4688d8e62100051296c270fd47493dad77070e82d4da45ba13f04fbc16fd163bd1a5ad7b68762e1935c3fad9a3df5e76ad221861f77beee2ca012dcb6f302a6afd640a5660fb2e603993ee31dec54be1a08fed400c2f28997580fce665390a31cd351702ca79cc72db3bcb6a2cbc486d16ac6d591229c3204f18776c25e804258493b294b4c5a71889770de57c9dd5c3dd0ede6759e746dbd5034f46d0fe16a249b6a3871b16fee53a4d166232fae5c6c784d7e273310a5fd7645cf9413cef4618421629a26a5ce0673cf3f22033e7f3ba784245f832c04ebad304023631fab0d94a376145af8cf765b7e38f9538409bbd4c28dd68376e745746be84281c09cff0a63991ff7e94d42bf7b738f1620dd4655c50984f6bfb20e7373fb6fd7da94fa57d7bd31098b0c339f47d0659390126a17cd077374cdfae913019c64e6e981813553863ba58cf4e3e715cb269bc9c39455e1ec4f1f8c5a6b6400a9c90eff8a8aa68d83a15c71400d1f2e0b795e56a267b3b9ee3d31b94b0367ffcc955be4b5c5b76179aa082176730163610d8a74f2b3b491d23c2e83661d967e586af5c6e1aafe6a75f99f5b94c1d712bc8852940a1b5c0cc1f67ad2e6923428dd17669150763522bf1af866103bd2076b7e20872233b79053d155e053e3d419f131b8c561bff50f11cd9a72aabd4521eb23224daa7ddecf6dd414a4557420f46496021775e25bc2ecbffe39508f36e1a4078c736431745b1f63079f90f8af909a214a0000000000000000000000000000000000000000000000000000000000000020000b9090446d1cc2912401904bda41efdaaec263b80b83ce3a5461ee5b62a180a8d8e5d32c10493330000000000000000000000000000008000000000000000000000000000000310000000000000000000000000000005a0000000000000000000000000000006f0000000000000000000000000000007a00000000000000000000000000000085000000000000000000000000000000014882263e1288188e5e9262fe375ffdfec86987f0bb138b2f112e1bc2595d032ce896622c2f5733fa9b93acd581df03a0148334ea7fba4bf27f8b65828cc66122dcbca59c73b1c7a750318833f1681f26e045afe13009fb9df386328260b2c22d5c6653f9a4f3abfc88a7feed122873dc9c33d180bfa6c6a8cdb8010a3d397845efeb885321ee91441be1ba5e40033fa938c21fc2658b5a41cf5baadb0435198c64527bb039814e1b1ad87430abc3967da883cf16c4797c444f902c72cee4fad53a995dae484d42f9ce7083dce22353ab05f6ad403438cc787a1bc95c865972da77971b1d68e5cd8ddf5f5c065674618c395fe430fd1b8295c8153a2f185770557fce7b918429660e1a07bd39a1467664d6af13cda8fe37fd97269dbf10f014779fc362db228b7b9cb74fbbdcb9107331622b96ca89d4ec55beed455fa3fb6ac781e602257113ab87ad3de9d470d292803accc725869992bcb8dc0c74e9031dbb1aa82de3f9ad0792ae241907dec12d7f4c575cd8ecd18caaa07725d7ba556af0f1a536f80adede41ba54e5d0ef6e3b0dc12b53865104afe7f19135db68520e2186e224a3d6340dbb1958a4c5801c97c2dbe31f7b0279f6e7eb38be4ceccb75b46756174faada9b57702253ff448bb2169db1bcff8c47d8b13e590b9385edac27761c9e96fe272f7dd25fe781b70d159b32748f2c65d221b7ceb89ef65bc69ae04898c944f855741ff1e57f2a415342dce05539ad305150453571fc8e7c1b240dc15c8d6780f92aa9f1045d51ef6921bdb7ddd442c556f2b1cf93713ca552ff9c0734898885ae02be9e03d86bcd9e7aa7d49819b5c94ff8b0ffa7ac52461ab8bd2d55083cd82fa2568171f4f63440dd6e37a302c7b6616f238ad0d6e16636deae400000000000000000000000000000014a0bbed969e1f87b965c69efb7755ea251c80004d3f2bc92a1f8d98c704715d7ba04ef69dadb367bcf283e4b7fd5baf0233c4bb2048da3e0549c56e5cc6a2c79ba0bb319709639b58bab6d18c8092a99ed14028abd3ff1b533e7179e5066e3697a0cac6f38f43e10a17c373c9609ed00f7c77a75e673fcbfd3cd752c146fc9ba0a036c5469d7706eb8f64bdd6f61ad7838641a010ed66142e745d6176307921d3a0c608c4ea7a4f050badde164483fcbc72809c5509978cb39422373fede08bcda0a61a699be9b5324b8822557a8fc8ec40cb7ef35acf4481fd4b2b3b93f381afa0e917cddf3deb69bdd77ff51c1207afebbedb1a0522bca3996771d83fbdc5f4a073125b038e0dd7f72af46aebc086abbb98a51924a2bf914be9f5241bbac269a09847f9f3d6a740a3b11e64d7d9bda8bcaa7aecd24d58e2e6c3dd2e7ab66adda07956c42e805d05429f2f29ab1222ac602666e51b2ad6e8924feccdd614d5ada03664a8e0a4dce6c7cb0b6e96f29dd1166eae8cbb97d6b0446f784951680444a016d1788068361948f2a3947d4ab6c79a29c9bbc9ea9bfd26a692a317c79b65a0f676876c370ca0d817f64cb7692dd7acf7655b0b158f64d076a47b4ed9734aa0fe9dfadb42a75fa193af8d1b2f5392f731f78cdb60b22c7513555c5a375670a0dc319a75bab54c91e63fb0d0b00fd81d5fa119afd9e349eabcdc6c3f8ecc59a0e6abc057c2cc496aea18c2dbd7d1f242c25a7223b54838efbc7e3f9a214c29a0814641a6cf9d4e9f2243b96fd433451f1569bae42f8e3f0b1eb2ed69717bb9a028e74c687e3bc8b166b8dd461c19f219e0441df5affde6ee3c4992367a6e6ca0c347907f9fbe31e9cb284ca76c3301fa211b21de47340c05d325a4e4f9639f00000000000000000000000000000014000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000000000000053a77870771305f0e63b94ae7a355f5bde859a2eb49133062ec46555203659945ffd54a38223fb0505d3a03b8c5bdc91300302578edf77d2d922cf447d7021d961062eb71a6fa290ae09813ba4c1639d2967ac706bba3abd229b910b314be0f97c1c1f53160283d16cae44cc092b4ad9c7ca2b8501af421e584e665852137ce9e5ef28c555c278b49afee3171e5b684365240aeff1a026e3295ea29b505e9a0ff000000000000000000000000000000052da177736d88f959734da17f754d90d53b5c3a8fce63ea0677a4f31ef66e55011311bb177c429aaef01953e3245cf9daab9213fdc72dcb9c23da5659d4715f1dfd9ba48574624b25e08e812213f85c33a41349bd130be6773a991866dda3fd725287cf29edd3aaf5a9674b408b68301ac88b04948415c6ba3472ede8c72e9bf0ff51b89aafbe6ecedcb9fd20f842618f302b8c676380d52fb7d41809fb10956e00000000000000000000000000000005589016e7308562190cf0cb2f05cb7fb0c3ac30e3edfab13a87ae5381ba7e0a093a2368ca7ed040b64b93ccf053c34bc0493df54d161ccbc879a2548147c3f30d1bc30469755056df97131fea9d250876936826779de98bbd48c3cd51fdb04b0443bf1b0f763010702132e15316a65339945cd642403f7f3b62376cb7e7bd600a5adaccf8b8b3f2c027cc7b82d289893c524338c0eedf50f446a282353aaed1098705740a9a0e9070831e84808800000002540be40001b86019ab2f3355c2f74376718c3f6c96a779de2144c4592a5cab23c82b739dc44fe071bf5e4fa5c5fe6dbcfd26294abc8eb154258a1f0e5426b25dc955747119317ca0ba5a523f8ba4a44445976d70275c0c662d016065a205cd2777cf2725ba130ff905e215a0000000000000000000000000000000000000000000000000000000000000020000b9054446d1cc2912401904bda41efdaaec263b80b83ce3a5461ee5b62a180a8d8e5d32c10493330000000000000000000000000000008000000000000000000000000000000190000000000000000000000000000002a000000000000000000000000000000330000000000000000000000000000003e00000000000000000000000000000049000000000000000000000000000000008eaa6de2dec3aefb87aaf6e110898ea468e6d54355e2a4d35af63b751821d079f6ef2e2e15acc8680cba677546b08e98696d03037da9de7420915ef598d98a04f6565c536a7c097b1d2fbd2779a3ae99d6f80a74b4aa96b7077fec3eb78e7d972de5a76ec3aaaa642fd438fd581112bfcd4b67c5ce2df540052bd0f8882d52cc8b97f6cc9ccb639963e010cdd44609b60afa1255b3f9790808305c5b5ffd1860426642f8976ae895aa43f00c0d9345a655344fc885142d4d3723e9e408c7feef46f9e2b0def019ac647a1c153d8c9c331f802cf9a1981f9c00f9a1fb441d2fc9430097b906b606c1043c35e67539bc887e1bcdd61a97c33726c7a5a4bb89a038f00000000000000000000000000000008a0c2e5c76e310b1f359d56157256562cc2d32b3c32299f17426bcf9b71398cf0a0392c77a3bc0743fc7e18a068e9ee05d05aa760b7f4bfa70c22d1ecf06bb09ca0bc992da6210e894936b9281aa0298e2daa5a40d26ce1078a9de2da2d6be4e2a0ee28a0868e367449d378f425e10cf44810ac69988d679b967584f8e791cc01a092b2dfe8f3d0d61aca190a128595167dad376cc3ea9394334c17759714aa54a0e342ff2dd67c6028b361860d5d9ffc68243e8491193a2d03a31c1adc849811a02f157db39d7fe663cab51260a0ac1c25a1c3281491a067bd3ea9f59ed18ec8a0f10d0fbf705e22bf7ff3060181993f147622d7a2a2fb1d047b212e17cddb6a00000000000000000000000000000008000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be40000000000000000000000000000000005ffd54a38223fb0505d3a03b8c5bdc91300302578edf77d2d922cf447d7021d963a77870771305f0e63b94ae7a355f5bde859a2eb49133062ec46555203659945c1c1f53160283d16cae44cc092b4ad9c7ca2b8501af421e584e665852137ce9e5ef28c555c278b49afee3171e5b684365240aeff1a026e3295ea29b505e9a0ff1062eb71a6fa290ae09813ba4c1639d2967ac706bba3abd229b910b314be0f97000000000000000000000000000000052cf1a946b9ce403ea427cc7e968ec1db343552e6aaadbe4780ef579dcb0d477b1cc6f5f05185ddb235ef9018d39e21e97ef08f5022f8a7cad23d50d089da165add0d79be1bd28257e41532a26027f6a7a1ff4a6d5eb97794cad778c5bf850436f1fc52f811de68ec2101d99d72547d63d965b54099e218e9f9be4dd94d6c3b3ed125b68418a578c23a6b5e0913e5165da5f7318267149a682071e3fd5f73533400000000000000000000000000000005479bab52d2df79b33028c7ebc9a24a68e6a48bcc780ef5152c4e83d91d7d5e01e326470fb322d3a496d5fd7ded750ba27fbec274f3c41e7c4a37bd9f353450043cf15ecb3dd6959b33ada7d2ada0a584ca60bcccf0264ff0d427e10e8d2bf40b00e833d29fcb9c4da940abf512f91c4888692ef45d3fce84ab70f4527014970493b2f82d5dd5f323a0ceadd893082c7e9afffec9c165d43cf0c3ad41750ac5098705740a9a5b0a90831e84808800000002540be40001b86019ab2f3355c2f74376718c3f6c96a779de2144c4592a5cab23c82b739dc44fe010240ae2c68d6937cad1ec1ba151f6bd634e006b3e5385564f4cffb7258cb5c449e344cb6ffdb232ce330c0003652c4380ff5c9823ea82d2cbb82709d3bf8008"));
    BigInteger expectedTdAt257159 = BigInteger.valueOf(4_224_712);
    // setup blockchain with state before imported block
    StandaloneBlockchain blockchain = new Builder().withState(block257157, tdAt257157, block257158, tdAt257158, trieDataAt257158).withDetails(AddressUtils.wrapAddress("0000000000000000000000000000000000000000000000000000000000000200"), Hex.decode("f845a0000000000000000000000000000000000000000000000000000000000000020001a0469eaa2bb803981b4bbe23dc9028b29fa10cb53106e99b23c76d5d8b3329c12280c0")).withStorage(AddressUtils.wrapAddress("0000000000000000000000000000000000000000000000000000000000000200"), Hex.decode("f91419f868a08b98785007125c930d2e50819219724d8e55883730df917ccf6e561dec843cffb845f843a0203ce5c0fc4465cc2d5048db240ec7e5dda747e2bb75cd97da57815a9ff3acefa1a02905e5e9e6a7736ba4ce26abd3b803c52c0cef35a568a48888ca1fd8303ea990f896a06edbabd1545ecac4632ff81979e6716958bbd0818728686e85fbeffe1b2c1606b873f8718080a065a26221baf9b1a86a972beac01e79ec760c727238d59426683d844730564c1e8080808080a075436b25697916be2b5d602a34a4cb69c03aba532e85b96014f7df4c24c66116808080808080a07035e0aef09f50102bdcb615c9f60d41407c5fd677bb422a417e4e53dc3c853080f8b6a09aca55ce94fdc39c5b9ee8ffd40c5c5d865a61ae2bc76312d5747762b56ae49eb893f891a0346f8c5ee85dd7e0d59b2a57be93049098aa1ce5f9f7700537e800d2d5a86df4808080a0a88c28f1a670859b6ec4c841415ff7205ea759f41fc28d8c960173eacfbff788808080a0b9b4a5b5a0760b91442bb6e55805efc307cc28d9b6933d36298ae880416b736880a091233354246b19eae15423058df04dfdf291d4ab333b04709ce12a34c2b24951808080808080f868a0e25adcfc31732a63acebfd9b637b1eb171434c6adb9ce9057acb5a4de1a18e52b845f843a0204327878ee2a4e761674402ee2d4cdc63973930a10916c653d3d6fdc5a226a2a1a0f9f6b0269deeae0a2d8205c1c265ebe978706fdb69c5776830e8e867c939313ef868a0122ba9aac76b73ee66fd51228670bafd5ddcb7323550106dd2eea1476b66e1cfb845f843a02094c5ddd9f885044530cb41d4eb4f7e54f0fc475adeaded27a4ab33e1b434d7a1a051dc61225d277ddfcc9245ae9ce81acca047b2429b84773e6c05adc2da88fe0ef876a063a131e61bf685bc50b8ab596eec5b5e03b163091f01190772b28d935186ef3ab853f85180808080808080a0342e3ec7b0770d0df6c0fb42d1773255aab68cbf2a75174496cf885358f41c3580808080808080a004fbbd9fc785e4c13deacb36689579bac9cdd2e38c977f4b41a6d7178fa0f41a80f845a04bb1ed2d49f572157527376d58368bfb61a4286cd2913e39d76c0fb112a9fa5fa3e2a0207b85ad7ad16208e0ccc3124009222415c12e43e70161c8780a9ee82c79ed5901f867a0621f44b58329dfc0d8bf489bc66118d2d0e33c8295fc08124353a45530dcfe1fb844f8429f3014f36a62506639e076629ceba62ce5ab8892bbda1a92e85f35d66285c771a1a04efcda2e8aa38a5164496e35e92027aaa02d9e314085b111301a67ad257c98c6f901f8a03940cb5819ab3deeeb023ee6768d3df4580281b82d8fd51f27e952e8f4285689b901d4f901d1a01105caa2f5f66f31c393e5239f43fe02a1b5e408ac4e2652657fe09ddc2d81ada0b8de8301f887c17a7bd495728c1afebf91316638d86632d75586ad97c37b7a68a01c7f5095ba5e2049f004b6638849d435fabf57803467573b923682f096877891a01284ac569e663106a0da0ddff9becc8850705c8d6d52d9a9306ae3c82fc13f64a03dc8cdd34116e2524caf772ab7de41a35218b966b8e3fbabfd691a204d99d24aa0c60ab900376ab561616c5c0e5e805f1a4074dc886eb07cfd73cdb037d4015599a05d3f73cdb3e70667c363f2c0722d6442e8f65263719fb5dcd8103ec443e5582aa0be5223e46750920923af6ab8b1fe6050eebb77e93f15119d6ba25ef78283d32e80a0e51434bd35556669fb22f5c532a9d3367f54552700a12d2e35f07801726b7335a077040d1ac70eaa2302227715401208cf5a1f80af3951d3fc0e9b2e3f349e7657a0997be4d8f633410accf98e29439f391cc0282e03c99846054205104be6c1494480a0ff794285d7f046e85fa78c8b3019be122a6df3203930e52ccc112e30720ce261a0faf443cd30e9f8eb4ac6ddf038aad2b8ab39c544cca31aa20edc45a498152bd2a06c9be80faf9d8a1d743e58b05854dafd41d4c920180d089ce68b7fc0c2f4e8fc80f845a01a7c03521b51145dca2b36d026bbf6878f0246fb13b3da1a88b98b24f757dbb5a3e2a0209591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a205f868a00a9d0a56c8d1b34b8be17d10d201440239348eda05e3f75cf473d02fe3c7f6bdb845f843a020bf989635d4dd8d4696a932de46796ed017ba6579a5b62700443541b3f109cca1a0e9dc43352664953f8cd6dc08b86e340b2b3c47b72b1e34f5d569252a8745ee74f868a0bd1f432ff55205337f9a002c656e9d4e4776a956a4f4a209e613ea1d1757b32db845f843a020819e2c3416db494fcf3884a1681c75731affbca1e73f2a4ac4c1e66231b58fa1a028d5ee61aafb61fcce65be48c001b614bafa5ac88d1dd3aca3feffd1fbfa20d1f867a063261447fb7be341ec8947b15be72363fbb722403e00fc50fac48e0c3f1fcd96b844f8429f3ab799139a368e8f23471e616f67a507a7d333a58ec9f4ae1e8a0c561bc450a1a0fd5b410d5b9e5ad35e145f0dc68446ad533550b4683f42abe95a9ddb8e2429c8f876a0e6a585ab579be4ff6c459313a53ab67739261a8ae2fe0839a2811f2821c0deefb853f8518080808080a084509e3722fa1726c4b625f65ed72abfa8424ac246d9573e9eef93f7944323e38080808080808080a06df5c8d966c3d61bc6414c1860d53596a4d283bb1e365e51326aae24ac6776648080f876a080a723f67658e31dff1b91b1d6bc3179d363c7a91256ab102c952153b50d75cab853f8518080a0ed8d7691faf8ddf56395acd2e2048981080af267fc2ba91a773725d5941caa4480808080a0597187e4b077b7df0037648633c7243b30b05b60e6b24a56c20f9b2ee1bedad9808080808080808080f868a07d80027995e98b0cd22594557b71295c5be322f3ca13d14815010cf6255478ffb845f843a020e782b3518a6e2429425c8667e3ab17b13ba1e764752c1d3f9025694e536c60a1a0d33862d7596c867bfe67d12731497c03db00de9c3e8e9d331ba0f2a40fcfa07bf868a0c66ac4c601deae64e497abdfbea060a8fec21c509df5730ac90ee7e3866ae4c3b845f843a0203a6c8a7b6a3dad3d3f6389a0f554a14e775bac69ed20d935b6f88d9b6c1339a1a00cf20bc309ceecdffd9b00d8420a9e15573fc6b966e9657e9874be4aec376ea4f868a0925317e25b507800c329b1e804a106eaf104c6eed74de72697b32ab6531d3defb845f843a0201c8c2cb212831fe213b1680efde4196dd6cc5fe8432e83312835f5a8a067dba1a0283e5f2b75ff754fbf0299883bb1949db443dfab892f6d70acaf7e0cb75f4a2ff876a0c700e272592f648fdb6888486abf71d4683f52b1f3007cebb502a2f4047aedc3b853f8518080808080a092ac5982e0898844e8318c1a831db389bff853e2e09c743153311ceede1430488080808080a0025e630a34412ef97299896f9dd4a637a2ed167ae1759f74f5850395e255ef548080808080f845a026afe69711df122aa08b79bcd562ab50c9be6fe9cdd4046a228b944d26bf4d72a3e2a020a76e518f7cc0eb2ac5e686a5df299c28bdfc795cf38192336107a5dde2064f01f868a072c240a0191e079f272e82ed769044d17ef252f0e33198d039c0389edb49aca9b845f843a020d01ee94dcfcb872919c55828891443ca2f9cb54317d8e41bf48b3f200fed16a1a0c97606870c6f6e15e1333849abd30545921eaa1f22c40664f8f9672a69be7d8af845a008da6c6966a60fd6a29e6a2fa6b787a4a311b42612379dc0ee1f215cf39fe1fca3e2a03121d3a5403a4ac19161cb22cc0e16b1e4effa8c6f6fd3b56016388edad9392f01f8b6a022e112be124fa39263dfeffa9488eb2911f866ea5af9fbe0389431a784e4cf81b893f89180a04ba97781e8c7b7a8589e251899ad4385911c15598918e25d09878e00b23016d080a0c2c1225c54faa0c6df261d1683cb1225be789ddf8f92ec350697e57ed056248680a0aeae99795afad0f1b84ff890c29c825f6e4a6a853302f6c33f8c1350adc8c856808080808080808080a09d84bd8f90db8f960c57e0a185de91da884d78e3f0faa7399a4f552e26a019f980f876a04216aca0e0be47a7ec136a10517bcec8ab168def9385b5971ded15438a9845e1b853f851a002a294c0ced03e21332e9846cf1342157b41cb84976b8ede599148844c4e2eb3808080a00d1c21d3b8b6a26a87929fd79035cbba87fc6679c857d6ecd94437fd1c483b02808080808080808080808080f845a0eefd522785c3bc1f41e83e3f6b55c2960b9fe022185d4a4c7c65255705b3defaa3e2a020bcbc2f082f4a7561a5c1a2cfd3353274a2cd5162cde722a9a8b3b8df0c7bfb01f868a0852a22be91415d1eea7ac0cade0f5dd35237f1cde7c5549eee584ac75f14bc79b845f843a037305caa580d3824aa84678e25e2acfc82e50549b0dce9de3648a0ce53cd3b96a1a08d6ae8b42cd355e48549ac819fc568ae472137d8e4150f3029f4a3b3e7028607f845a01345897c0e352fe8d482458abef15596b8dafda9336b46a0060f70a305f57f57a3e213a0b306a07e840b0e82ac78e4a0c85b59b745c3937f109eb9acfe50cabeb6d6a850f867a020b1d3d58bfe5f9d7e9d11dca4233167b410d21de0ecbcf3cbd69872b4407b6fb844f8429f3d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c60a1a0a0eb56d95816b918e727ce7c2a1b4457743c2bc1e9a6816211a49c269c6175c2f868a00feb81dd5137f5e58b60ab2f2f53822ab9726b5f5cdd0c16a1fa41301b3d129bb845f843a020dd998829f1ec9824dd5f3a370deee6258ec586017321b199d4d85bd5cada49a1a01a38026ccc119f01cee3bed6113b6b321845286ce4fe301c793f391ee4429d0df868a04bf05fb411dfa8f8567ce67837d2bd3e53b8b83601135978764b87309ff58b9eb845f843a020f0b2e2537af066d9b847530b431f27172c6ad5732150524f7b02c61da5468aa1a0e604ad8b1edb00222ed202730836c8c9d08c5303a199dfbc6963ff723d26d9fcf868a07b25dcec662d41349d56d60c8e30f6d130c3e66aa7f13177a122d87448a163b1b845f843a020ca6c4e55c9baec295bb6fc27d80b092b46e2dc9274b8fd116e6bd2c53a9783a1a0c13b9eadb4ddba1f93e8e0c64a77acfe71101acc46e972deaf07ed9c9cc77f2cf868a0d170f80afb52750418f3e5aa24390d3497445e0c1864b8ffdf081c336ac95ffdb845f843a02024516fe566043351713ac9d842972585d06aab3474819278e1c27aebf25796a1a0dd1dba38710f29c40a31c582ed679a0fdf0ffea162705f1d417fde989ad3df0df868a04e1877ec012c6632c880d425b900a6e9bae251d60b07e9a88a9a0aa991603d63b845f843a02095577f6b4b53e13ce90d6c71bd7e27c0ff3998967dc44b74baf017bbbab598a1a08ffe3c5238f04cbf6a7de86ba1401c8ead31c65b542b5d87ae6b6925cb570624f845a0ed7238f141212db1488d912065b83ce246f6676bcbfa3a0db3b5138d1915a7e3a3e2a020d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c01f868a07d1f1ed6f46040f77d0c652df5ceef58fbdfec69eae87a399f027f4cd4787a15b845f843a020902f468a9906719decf37a08ce2b496f788725b37c2d402ed49ca5abd0e73fa1a04bc926740b78de48b64b52b7e0282937e684ee5a9e3d3c93a2e4390601f896d9f867a07cf0b61a928384b3b3483c26bdc4a344fc90d892240e90f7c68649cc46131d2fb844f8429f3a215b5f312ce3d6709a50713cdbae46e9919c93807205f9287595411969dba1a0f29be6adee20dd8f6d2f6b29b54a3957081975bcd1dd2a48a837492e49c728e0f876a0b9d4d87396c21094c1d04134b825d071b97ae80145d632c19349bf541300c232b853f8518080a0f4461923a6baf966ad924dbb74bcfd26775bbcbe1bb9df402fea597e2b85ab54808080a002c17fa555c8e502ddb07817136b603302d1d8e0c18e34057f86702f1379edbe80808080808080808080f876a0c18c4297c6f837fc83137782575bef3b17b5436014735fa18b26519445824485b853f851808080808080a0054f8cf5d4e157364da09d1b47f248c5d640be6e3e3b448c87e20df3801c71048080a031c6169fa084c3c7683cc91f5fa5298243ec655f2061a7946a1e05ca5661aac880808080808080f845a0347716f2496f125df82238227f08ccee681221d0a27eac61e90381637531817ba3e2a020509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe203f868a0d752498207d8206ece78d57ba7fa784ba7a96d7d34a4c3b076857c8908be6023b845f843a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afea1a0a048613dd3cb89685cb3f9cfa410ecf606c7ec7320e721edacd194050828c6b0f845a06d5acd253fce94f3006610e51f1b43e3a97e680446349795d0eeecabe8c0a8cfa3e2a035088b262103cced42838da186c7d9d7cca487e7e4653002a7c454ec94f1be5801f845a07d7cf5b36f789bd49392857c29b6cd7e824fff0dbc0dc0e2b91547e78b4fb918a3e2a02042c1037379b6c4ed74837ff7e9793b79a698dd7ec09791989583b26e4c7b5c01f868a0fb8eff448352b2d3640a38ccb872a5d4514c7e4b6dbf19027e6b9c945342b448b845f843a02019f20537a09ee1ff8e424e357130433191e016b1b1c5153f5bb675d4d4bc60a1a042af680207b9ee6ecd6d123b164f5e0c62448e2eb6075d70df962f14235c9e77f876a07a91ed867549f2c3ed1c8021a157c7ae2f4e8ae7155d0ab067660290471de6afb853f85180a0032ed769332b214613f4211c5b612c2f059eec1b0f68decb260246af81128a84808080808080808080808080a01cf875345ad346b44c355a8bbd42ac0802b916c91566b26c1a40816ff81e5a3d8080f876a0ccd8c10d25a3ab770cc4f99a2efed6dcbccda7f63bf8f7901ed4c5dd71d73ffbb853f851808080808080a05f6fb2a62a56fa68de210ce64286be0c4d1ee694cb8af2cf2b5297117341ecc480808080a01dc125c622817a35780355a120c497b929ed080bbe9a462ea3d7ab36f7dd69b48080808080")).withAvmEnabled().build().bc;
    // import block
    Pair<ImportResult, AionBlockSummary> results = blockchain.tryToConnectAndFetchSummary(block257159);
    assertThat(results.getLeft()).isEqualTo(ImportResult.IMPORTED_BEST);
    // collect the consensus information from the block & receipt.
    AionBlockSummary blockSummary = results.getRight();
    // check the 1st receipt
    AionTxReceipt receipt = blockSummary.getSummaries().get(0).getReceipt();
    assertThat(receipt.isSuccessful()).isTrue();
    assertThat(receipt.getEnergyUsed()).isEqualTo(164_572);
    assertThat(receipt.getPostTxState()).isEqualTo(Hex.decode("e322a11083d2ae248942a72f3dbd00dfaed41801ddb07676a8e214df9ae44964"));
    // check the 2nd receipt
    receipt = blockSummary.getSummaries().get(1).getReceipt();
    assertThat(receipt.isSuccessful()).isTrue();
    assertThat(receipt.getEnergyUsed()).isEqualTo(111_772);
    assertThat(receipt.getPostTxState()).isEqualTo(Hex.decode("23bce9539d4485b003a8d8c6a83a1fbf7bc97a6d072b90259e49babd2aa168fa"));
    byte[] stateRoot = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot = blockSummary.getBlock().getReceiptsRoot();
    byte[] receiptTrieEncoded = receipt.getReceiptTrieEncoded();
    // verify the consensus information.
    String expectedRoot = "f9f4ab463418ce3d518740aecd4548b81a007e4870108bd3563c0906ad5b3f1d";
    String expectedReceiptsRoot = "9a9a13a3d306fc29a799cecda3f11e0119d558aee55dca6c4677a79e95b61339";
    String expectedReceiptsTrie = "F90700A023BCE9539D4485B003A8D8C6A83A1FBF7BC97A6D072B90259E49BABD2AA168FAB901000002000000020004000000000000000000800000000800000000000000000800000000000000000090010000000000040002060024040000080010000000000001000000000000040280000800000000000000000000000000000010020000000006000000000000000000000010000440000081008800000108000801200000002008000000000000000000008200000000800008000000000000000000040400000000040000200000000000000000000000000000000000000080000800000000040A400000004040000000000000010000000008088000000000000000000001000000000000000000004000000000010000000000800000004000000000F905D9F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA0EAA6DE2DEC3AEFB87AAF6E110898EA468E6D54355E2A4D35AF63B751821D079FA0A0C2E5C76E310B1F359D56157256562CC2D32B3C32299F17426BCF9B71398CF0A000000000000000000000000000000000000000000000000000000002540BE40080F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA06EF2E2E15ACC8680CBA677546B08E98696D03037DA9DE7420915EF598D98A04FA0A0392C77A3BC0743FC7E18A068E9EE05D05AA760B7F4BFA70C22D1ECF06BB09CA000000000000000000000000000000000000000000000000000000002540BE40080F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA06565C536A7C097B1D2FBD2779A3AE99D6F80A74B4AA96B7077FEC3EB78E7D972A0A0BC992DA6210E894936B9281AA0298E2DAA5A40D26CE1078A9DE2DA2D6BE4E2A000000000000000000000000000000000000000000000000000000002540BE40080F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA0DE5A76EC3AAAA642FD438FD581112BFCD4B67C5CE2DF540052BD0F8882D52CC8A0A0EE28A0868E367449D378F425E10CF44810AC69988D679B967584F8E791CC01A000000000000000000000000000000000000000000000000000000002540BE40080F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA0B97F6CC9CCB639963E010CDD44609B60AFA1255B3F9790808305C5B5FFD18604A0A092B2DFE8F3D0D61ACA190A128595167DAD376CC3EA9394334C17759714AA54A000000000000000000000000000000000000000000000000000000002540BE40080F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA026642F8976AE895AA43F00C0D9345A655344FC885142D4D3723E9E408C7FEEF4A0A0E342FF2DD67C6028B361860D5D9FFC68243E8491193A2D03A31C1ADC849811A000000000000000000000000000000000000000000000000000000002540BE40080F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA06F9E2B0DEF019AC647A1C153D8C9C331F802CF9A1981F9C00F9A1FB441D2FC94A0A02F157DB39D7FE663CAB51260A0AC1C25A1C3281491A067BD3EA9F59ED18EC8A000000000000000000000000000000000000000000000000000000002540BE40080F8A8A00000000000000000000000000000000000000000000000000000000000000200F884A0474886369A779DCE80C9A0FF6858EFE3459A0CE6E55CC4488DA3369AEF6DD95CA030097B906B606C1043C35E67539BC887E1BCDD61A97C33726C7A5A4BB89A038FA0A0F10D0FBF705E22BF7FF3060181993F147622D7A2A2FB1D047B212E17CDDB6AA000000000000000000000000000000000000000000000000000000002540BE40080F887A00000000000000000000000000000000000000000000000000000000000000200F863A01FA305C7F8521AF161DE570532762ED7A60199CDE79E18E1D259AF3459562521A012401904BDA41EFDAAEC263B80B83CE3A5461EE5B62A180A8D8E5D32C1049333A05010D17BAF1D7C8109E8B22E87FD7305A40627F5F84E6C0DD7EAE98156518B7480";
    assertThat(stateRoot).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockReceiptsRoot).isEqualTo(Hex.decode(expectedReceiptsRoot));
    assertThat(receiptTrieEncoded).isEqualTo(Hex.decode(expectedReceiptsTrie));
    // checking repository state and total difficulty
    assertThat(blockchain.getRepository().getRoot()).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockchain.getTotalDifficulty()).isEqualTo(expectedTdAt257159);
}
Also used : ImportResult(org.aion.zero.impl.core.ImportResult) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) Builder(org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder) Block(org.aion.zero.impl.types.Block) BigInteger(java.math.BigInteger) StandaloneBlockchain(org.aion.zero.impl.blockchain.StandaloneBlockchain) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Example 9 with StandaloneBlockchain

use of org.aion.zero.impl.blockchain.StandaloneBlockchain in project aion by aionnetwork.

the class ConsensusTest method testConsensus.

@Test
public void testConsensus() {
    Bundle bundle = new Builder().withDefaultAccounts(Collections.singletonList(ECKeyFac.inst().fromPrivate(PRIVATE_KEY))).withValidatorConfiguration("simple").build();
    StandaloneBlockchain blockchain = bundle.bc;
    AionTransaction deployTransaction = getDeployTransaction();
    assertEquals(CONTRACT, TxUtil.calculateContractAddress(deployTransaction));
    // Place the transaction in a block alone.
    Block parentBlock = blockchain.getRepository().getBestBlock();
    List<AionTransaction> transactions = Collections.singletonList(deployTransaction);
    // Run the transaction.
    MiningBlock block = blockchain.createNewMiningBlock(parentBlock, transactions, false);
    Pair<ImportResult, AionBlockSummary> results = blockchain.tryToConnectAndFetchSummary(block);
    assertEquals(ImportResult.IMPORTED_BEST, results.getLeft());
    assertEquals(1, results.getRight().getSummaries().size());
    // Extract the results.
    AionBlockSummary blockSummary = results.getRight();
    AionTxReceipt receipt = blockSummary.getSummaries().get(0).getReceipt();
    byte[] stateRoot = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot = blockSummary.getBlock().getReceiptsRoot();
    byte[] receiptPostTransactionState = receipt.getPostTxState();
    byte[] receiptTrieEncoded = receipt.getReceiptTrieEncoded();
    parentBlock = blockchain.getRepository().getBestBlock();
    // Place the transactions all in a block.
    transactions = new ArrayList<>();
    // success
    transactions.add(getTransactionThatCallsAddOwner());
    // success
    transactions.add(getTransactionThatCallsIsOwner(OWNER, 2));
    // success
    transactions.add(getTransactionThatCallsIsOwner(OTHER, 3));
    // rejected: invalid nonce
    transactions.add(getTransactionThatCallsIsOwner(OWNER, 3));
    transactions.add(// failed: out of energy
    getTransactionThatCallsIsOwnerAndRunOutOfEnergy());
    transactions.add(getTransactionThatCallsNumOwners());
    // success
    transactions.add(getTransactionThatCallsIsOwner(OWNER, 6));
    transactions.add(// success
    getTransactionThatOnlyTransfersValue(BigInteger.valueOf(1_000_000_000)));
    // Runs the block of transactions.
    block = blockchain.createNewMiningBlock(parentBlock, transactions, false);
    results = blockchain.tryToConnectAndFetchSummary(block);
    assertEquals(ImportResult.IMPORTED_BEST, results.getLeft());
    assertEquals(7, results.getRight().getSummaries().size());
    // Extract results.
    blockSummary = results.getRight();
    AionTxReceipt receipt1 = blockSummary.getSummaries().get(0).getReceipt();
    AionTxReceipt receipt2 = blockSummary.getSummaries().get(1).getReceipt();
    AionTxReceipt receipt3 = blockSummary.getSummaries().get(2).getReceipt();
    AionTxReceipt receipt4 = blockSummary.getSummaries().get(3).getReceipt();
    AionTxReceipt receipt5 = blockSummary.getSummaries().get(4).getReceipt();
    AionTxReceipt receipt6 = blockSummary.getSummaries().get(5).getReceipt();
    AionTxReceipt receipt7 = blockSummary.getSummaries().get(6).getReceipt();
    byte[] stateRoot2 = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot2 = blockSummary.getBlock().getReceiptsRoot();
    byte[] receiptPostTransactionState1 = receipt1.getPostTxState();
    byte[] receiptPostTransactionState2 = receipt2.getPostTxState();
    byte[] receiptPostTransactionState3 = receipt3.getPostTxState();
    byte[] receiptPostTransactionState4 = receipt4.getPostTxState();
    byte[] receiptPostTransactionState5 = receipt5.getPostTxState();
    byte[] receiptPostTransactionState6 = receipt6.getPostTxState();
    byte[] receiptPostTransactionState7 = receipt7.getPostTxState();
    byte[] receiptTrieEncoded1 = receipt1.getReceiptTrieEncoded();
    byte[] receiptTrieEncoded2 = receipt2.getReceiptTrieEncoded();
    byte[] receiptTrieEncoded3 = receipt3.getReceiptTrieEncoded();
    byte[] receiptTrieEncoded4 = receipt4.getReceiptTrieEncoded();
    byte[] receiptTrieEncoded5 = receipt5.getReceiptTrieEncoded();
    byte[] receiptTrieEncoded6 = receipt6.getReceiptTrieEncoded();
    byte[] receiptTrieEncoded7 = receipt7.getReceiptTrieEncoded();
    System.out.println("Transaction: " + receipt.getTransaction());
    System.out.println();
    System.out.println("BLOCK RECEIPT ROOT: " + Hex.toHexString(blockReceiptsRoot));
    System.out.println("RECEIPT TRIE ENCODING: " + Hex.toHexString(receiptTrieEncoded));
    System.out.println("RECEIPT POST-TRANSACTION STATE: " + Hex.toHexString(receiptPostTransactionState));
    System.out.println("Receipt: " + receipt);
    System.out.println();
    System.out.println("STATE ROOT: " + Hex.toHexString(stateRoot));
    System.out.println("----------------------------------------------------------------------");
    System.out.println("Transaction (CALL #1): " + receipt1.getTransaction());
    System.out.println("Transaction (CALL #2): " + receipt2.getTransaction());
    System.out.println();
    System.out.println("BLOCK RECEIPT ROOT: " + Hex.toHexString(blockReceiptsRoot2));
    System.out.println("RECEIPT TRIE ENCODING (CALL #1): " + Hex.toHexString(receiptTrieEncoded1));
    System.out.println("RECEIPT POST-TRANSACTION STATE (CALL #1): " + Hex.toHexString(receiptPostTransactionState1));
    System.out.println("Receipt (CALL #1): " + receipt1);
    System.out.println();
    System.out.println("RECEIPT TRIE ENCODING (CALL #2): " + Hex.toHexString(receiptTrieEncoded2));
    System.out.println("RECEIPT POST-TRANSACTION STATE (CALL #2): " + Hex.toHexString(receiptPostTransactionState2));
    System.out.println("Receipt (CALL #2): " + receipt2);
    System.out.println();
    System.out.println("RECEIPT TRIE ENCODING (CALL #3): " + Hex.toHexString(receiptTrieEncoded3));
    System.out.println("RECEIPT POST-TRANSACTION STATE (CALL #3): " + Hex.toHexString(receiptPostTransactionState3));
    System.out.println("Receipt (CALL #3): " + receipt3);
    System.out.println();
    System.out.println("RECEIPT TRIE ENCODING (CALL #4): " + Hex.toHexString(receiptTrieEncoded4));
    System.out.println("RECEIPT POST-TRANSACTION STATE (CALL #4): " + Hex.toHexString(receiptPostTransactionState4));
    System.out.println("Receipt (CALL #4): " + receipt4);
    System.out.println();
    System.out.println("RECEIPT TRIE ENCODING (CALL #5): " + Hex.toHexString(receiptTrieEncoded5));
    System.out.println("RECEIPT POST-TRANSACTION STATE (CALL #5): " + Hex.toHexString(receiptPostTransactionState5));
    System.out.println("Receipt (CALL #5): " + receipt5);
    System.out.println();
    System.out.println("RECEIPT TRIE ENCODING (CALL #6): " + Hex.toHexString(receiptTrieEncoded6));
    System.out.println("RECEIPT POST-TRANSACTION STATE (CALL #6): " + Hex.toHexString(receiptPostTransactionState6));
    System.out.println("Receipt (CALL #6): " + receipt6);
    System.out.println();
    System.out.println("RECEIPT TRIE ENCODING (CALL #7): " + Hex.toHexString(receiptTrieEncoded7));
    System.out.println("RECEIPT POST-TRANSACTION STATE (CALL #7): " + Hex.toHexString(receiptPostTransactionState7));
    System.out.println("Receipt (CALL #7): " + receipt7);
    System.out.println();
    System.out.println("STATE ROOT: " + Hex.toHexString(stateRoot2));
    // Check first block.
    assertEquals(RECEIPT, receipt.toString());
    assertArrayEquals(RECEIPT_TRIE_ENCODING, receiptTrieEncoded);
    assertArrayEquals(RECEIPT_POST_TX_STATE, receiptPostTransactionState);
    assertArrayEquals(BLOCK_RECEIPT_ROOT1, blockReceiptsRoot);
    assertArrayEquals(STATE_ROOT1, stateRoot);
    // Check second block.
    assertEquals(RECEIPT1, receipt1.toString());
    assertEquals(RECEIPT2, receipt2.toString());
    assertEquals(RECEIPT3, receipt3.toString());
    assertEquals(RECEIPT4, receipt4.toString());
    assertEquals(RECEIPT5, receipt5.toString());
    assertEquals(RECEIPT6, receipt6.toString());
    assertEquals(RECEIPT7, receipt7.toString());
    assertArrayEquals(RECEIPT_TRIE_ENCODING1, receiptTrieEncoded1);
    assertArrayEquals(RECEIPT_POST_TX_STATE1, receiptPostTransactionState1);
    assertArrayEquals(RECEIPT_TRIE_ENCODING2, receiptTrieEncoded2);
    assertArrayEquals(RECEIPT_POST_TX_STATE2, receiptPostTransactionState2);
    assertArrayEquals(RECEIPT_TRIE_ENCODING3, receiptTrieEncoded3);
    assertArrayEquals(RECEIPT_POST_TX_STATE3, receiptPostTransactionState3);
    assertArrayEquals(RECEIPT_TRIE_ENCODING4, receiptTrieEncoded4);
    assertArrayEquals(RECEIPT_POST_TX_STATE4, receiptPostTransactionState4);
    assertArrayEquals(RECEIPT_TRIE_ENCODING5, receiptTrieEncoded5);
    assertArrayEquals(RECEIPT_POST_TX_STATE5, receiptPostTransactionState5);
    assertArrayEquals(RECEIPT_TRIE_ENCODING6, receiptTrieEncoded6);
    assertArrayEquals(RECEIPT_POST_TX_STATE6, receiptPostTransactionState6);
    assertArrayEquals(RECEIPT_TRIE_ENCODING7, receiptTrieEncoded7);
    assertArrayEquals(RECEIPT_POST_TX_STATE7, receiptPostTransactionState7);
    assertArrayEquals(BLOCK_RECEIPT_ROOT2, blockReceiptsRoot2);
    assertArrayEquals(STATE_ROOT2, stateRoot2);
}
Also used : ImportResult(org.aion.zero.impl.core.ImportResult) Bundle(org.aion.zero.impl.blockchain.StandaloneBlockchain.Bundle) Builder(org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder) StandaloneBlockchain(org.aion.zero.impl.blockchain.StandaloneBlockchain) AionTransaction(org.aion.base.AionTransaction) MiningBlock(org.aion.zero.impl.types.MiningBlock) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) MiningBlock(org.aion.zero.impl.types.MiningBlock) Block(org.aion.zero.impl.types.Block) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Example 10 with StandaloneBlockchain

use of org.aion.zero.impl.blockchain.StandaloneBlockchain in project aion by aionnetwork.

the class MainnetConsensusTest method testImportBlock3293752.

/**
 * Test for importing block <a href="https://mainnet.aion.network/#/block/3293752">3293752</a>.
 */
@Test
public void testImportBlock3293752() {
    // data extracted from the main network
    Block grandparentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90791f9078d0183324236a01f4f8a1f282813ad6b1393e7e54f7e4fa5b1cb519140c1b5759232448a9b5780a0a0305694d2c938b4b383f06946c1bd1363df40c86f721377e321da7abbf831b3a0ba923ebca443a585bbd93e951e88acce92162864750ad9a5cae27624bd493532a045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0a045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000007b7e3ea06e3231306b396571753168617368536f6c7665640000000000000000000000008083e50705845cefbdb2a0875200000000000000000000000000000000000004000000ea69540100000000b905800046ada17de76537ef9cdf5888ba6ab59df2b73ac49434887f4f9b27e8b1a3e23798336be9b98b98f3be191b0349816976030bc3a4b22c779e920e949d2d7f7e530e12e71930dd71c8b9b0659516988b6c674d1db0b8079d142c2ecddd3873206a44f02e07774afba5bb6f716f721bbebee0ccf6425cbcf427233447e9f7757957e372351d7a5246f3d6dd62a4aec530d0890f27e6284aef2fa72060eff15b2c5df83f895960cea64366f7f4196c0b4801d3fc5e0d777634a3b2b12e224f92212436bfabbd4c25b45e0143fe2d43ffc73b504e53a16e86833a22e28f0a004acaffebfc18f86b852b93c11fbec4087b2e1ea81990e7856923b8ca77e7fb6fa2262050d788cba3bc7f0995b4944781b87c5fc53e43abb551b7444103b3828e0baf7fd618547a717919ee3534ca1b31ad1acebc0fbd0ead560aa8a8217375ccd31f4dad35f30663e131aee517ca9547c5a1c4704d344941ce32e37b2864aaa32543014e7b29a0c0f5aa9ba63f4739de8b2d591c2ea4a4d806a64340437107f23286865aad6625be2a618772881d1a9905c36b91c598e617db746a7f539cb8a39f76d4b343a039d84b2bc66f7d17a05f1d3a150838c85da496980bb29392c7590414692bca1e0aaef7ddd600cd19deee0d0bfcda27c1fbd7d552552c8396c8347970e7ffdabc4029abde20b46199ecdeae4db0aa95b1fa809e2af9365fbdf9a0524adecf3fd3d689dfcba9484d16c0368a3e06a687b3b692b1fda8e28f38e0a92b59199da1fa7c390fc82f5de656ff9af1dce43ca1bfaa8298a016643e731556fb7ecea6d6e61d99624df589bca36d7d647c3458231ca3ad2c228ac4fff46e50404a48b2fa6d36f40d1d0dfe3b4d5466ce5e20ed163ef3e3cae82791eb5e902b2517e8e8d4729f436e002179e0f38624ee2f3c7ed02c1672787c952224176f6717a9fbaeceef4c170e78129b261ec94b0cb4b8441377a65f291aa548161490303c2602940811de24ace961d8fa1399b8d16f09154236cd3d05a684480b62a9053c658d6e75a6d72a6a1218790ad603886d5d26fa3e2fe9a426125a147b11fadf74f5c32415f2ff8608546070eb742821d68f0a2b894749a9b9b40ae5a2a79e34924c197a266a80dabb7db6c78376e22f363983c5430542b05ac0b259251361b4b8d7c632aec217a1bae590063a8761df7c485e627bd0f7828ab0b2d91f83b1345faadceeaec33f5629e2971a95fbf0f5a41b035c962973e04901ce10420399c4dbc6c169862ac66212e25f6e4621cff3cb2ca92d96a3ffac988fc57056cb08e64f2d6f7cb2c5730e6ba5a33fe6c06a9b482f628143db7d18329d09d07d5b14485b73c07c8a16382974bd08aee591fad2f4383b0f1389be627d6d39ec65ab9d4410762ca715613bb29478e6356902925da8b0cbb30ba90b26f19e7586307f20f7500b60fd1d2811afe952fd9e2dad2f44ec652fc17bc7563a7a623d8ca558427cd20b0364145c00f143481a2cc71a077a1381f27c6c962eb01a6ff7a41211dc8e6786b874e26e5c2c4a5f84fb57611593e0a29076a2a9bfbfe81d29b2d74c92e3a8bcc7d325049f91814769aa7659a0364e2e5a014f511cbeb7d810226389d49279625ca7f5233cda392829e9b86eb474204365fbe39eec3b7ec7a33e2eaa0aecf89c33ac790d1f84e7ffbd022686bd5714301ac3794e378daaba16f2875993b4313a22edeb058f93ef57d4543bd8f8f1d37a04e521f043335b6e5f6782802a0b7d3a786598ed4d2307ce94291d80fc10f6902f118eea1a9bf3fcaf6c55d016f298c6fe664a5535e7521fa84ee21087ed42f45d5822db4d2de01672156357cb5c7d7b1ee2aaa2127103150e6726374e81d9c96e01c816389bbe6873bac567c0c80e87125510f3c44361c53a21c378dbe936e752f0a85214d18ab19b0554809dbec6531d23536be78bc43846841ff12e878508b9e2eefde05c0ca324b35e2403fb0210c0"));
    BigInteger totalDifficultyForGrandparent = new BigInteger("38071180790205");
    Block parentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90834f9078f0183324237a051efe6284c2b7696a7c16dd63010431a2a77c060275c8fc8f29ca7d6792d75d0a0a0305694d2c938b4b383f06946c1bd1363df40c86f721377e321da7abbf831b3a0bf11b9ceecfc0ccdf346dec3e392960b28860dc28102f125bdba2e6d601ea7fba048fab7b8cc1fe1795eef2d4856a79f0b5f2e6bb48360a4f3d5d152e46f332bd4a04e2fd7e15640a70d4cf65cec562002d31eba2f3d270d4ca542995384540a9f4cb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000007b8dada06e3231306b396571753168617368536f6c76656400000000000000000000000082520883e4cdc4845cefbdb8a0d34b000000000000000000000000000000000000000000000000000033f07001b9058000589dd7cb1028656662fc51b082f292e9064d7db41e12a994a6d8f4ee377610dc163d936d0a249b7af823c10e42c0a9bdd6a2556ecc55243e59569d45756bda1c32105962ed7dc47fa31ad0d4112fc52093c2c47a1c3b9203c5c608fe51f581ee929a383291b5d25a83aeeb7ca88203b2604a39039cfe7c2884c48aec020a614d3234eb11472cca44444cf13a4252361717eaf38c7b037ecad81a02fe947d1275847c8415318cf5bfb9bb404bf2621300636de69951b2c0c86ea234d22987407c4866b6335a0bf2dfa15f36f0b79cbae47eb09a778a48254db6ee05029aa95653351637e871650c4380dfd3a93a446f90643726ae2870e788292e7e9638340b0b23047b886997ef00858992d1256ee0dd8aa103b07677b010c187fc51810795c970f6e623dcbda333308f15cbfb85705af7f7b406e4390ec2c88eb4a583ab32eaf6e5173890efb4830e1b7aee150a1329b7bd6159211a4955e0b5a287e4658802e12e94d4930cab7d49f20c94f1170d33b69d6d31fb08f7db72e6b3d97deccf4c656b9627a1fb49fbb15037101e5596430597287d6ec4488bed53a456b94d35c1a3104cccd90e394fb2bc028d14cb0712f238a147b36fb20d7b22ce27966abc2488133181190ffad7b3befad9ef13ecbd8585048b805b58081db21c9c4be4b983bed47718bd4507d1ed299634bdb51adf22345d8597952a41784c42421d80f546a2e04ccb7b3572bdbbacc93f39d489039fdaaf3114766923a4b280b65719db8b1a97b504b8082bf29fd61511ecbdd3d04ee4aa2057d6ced6244a780bfa6beebc97808ebf8deb67b367007d682dbda4de5d1eb8b289e4d8dc57fb66e94cd34e88a8fa38d2abaab3052c5ee77cf2d6710bcf8e0bdafc59078daec6bc1d4a1b1127911d8d736536fb01916b63d9c18ae225bf114114d954c4f01b3fb1f7c4f45a8923a7eae7202ba6a9273b585fda941a873875f09e4a1857658be589d9a734c700f1f4727517c3426f76e80561a289ba79bfe87afbe61256fa15e83aec0fffccff8ab25343781c8bf03fc6320a54fe0fa4b2671bf42c3f602c0f3ab66867bca328641282f1d0ec83c93ecf3efd53dac16b31463019e45c472654cfe7b27c43b078a7d62e852afe2078166ea6a5696e575fb98fd84b78e630c69e262b43186a009c6beb9c2fe393c6f617c3f5e3ad7a68dc2ae161bbf1fef1ebd536861ce837ae4ad13f0efb5c156184cea8c17bab8a3e0a611fd8acc5b05b1abdad20d012fca7f4d4b01907451acc2ede6d0782afab50ff6ffab71d31a7719c36ae5f0df6caf098ddf5e5b9c436441d6e33a15692c9f9af9b254dbd4082261ed97154b44b0a8b8df9a53b54d8b2001b0beb65604269fad9ddf8344de1bd45092ef92743e75dab6aae5ecdb1befbdc66745a37bc8eabc095f2bac73fd33247e178f5f528442d54956270a7c75e1b7f70af5cebef4b962c192cfdcbc47d17d75915195dfdf611f0014721613ef14e7fcdeef93801017986765040ee025415b9160d87b257d6913c991e7cbb43e7378e0e3f122817de9cfe5b643fae39f1475f781ad3fcba34413a5452205c17d2ab13d70928edfe4b6679a961076fab6b572d0aad794098d12d9061443927177629fff43cb4e2ea2a0d3a0f8e70b781ebf7a95c7d91efac569849893b9e890eaeadbf60a20d746645122d0c21a300f2f8f5e1d86610af84588291570347fa0b50d7ebcd71c9e48931638f024a18b67092910497b78822416dc310878aeb2598d06a3e1bc32bb9963878236a6f9f02979f9a27cffd515c0ba94cf449b5acb117f1e539049b2a83b7dad5f94e5d3bbdbf645c4708c866d9dc936c27dcc7ac5d00f1929107592a3c5eaa4c207e82ec587986afe7b9a621b147ef09b861be4899dc2e732dfb6b9a6b0014c8965f31f55b0835a52cb22706f87af0da53fa321c66f678d2ac762541f76fe3f9e86c73b0047f6c5b4bc1a33b6948f360acf8a0f89e50a0a02077a38e7789aa0466b70bc9ab37f5f0d806cd82e74c21622aa814d98810208217f88087058a1928497ed0830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46ac886ad26ec14bbdd4e5c5107c6a71a495bf61bd563458e3db2440deed6469ecf8a0881c322dacf2cb3be2f0bffc62e194bf0206764c92c72ca0dda745ee3f20d"));
    BigInteger totalDifficultyForParent = new BigInteger("38071188887402");
    byte[] worldStateAfterParentImport = Hex.decode(hexEncodedStateData("mainnetStateAt3293751.txt"));
    // block to import
    Block blockToImport = BlockUtil.newBlockFromRlp(Hex.decode("f90a4af907900183324238a0d12f857989ccc62ce8724b1c173300d5c93d252583436a9e50f0d2ce000d39a5a0a00983f07c11ee9160a64dd3ba3dc3d1f88332a2869f25725f56cbd0be32ef7aa068d25637356a7914f84f0c69209b9cf8ec97a630008e489f16b266f14bb66ae6a0727b11ddabb7af7c23c8e1fa5d151f7a3f61b859896f8bfd4fa83e3566a0a542a0511c4a2dba98fc572dd51a67ad7cbfca088c2d295507840bb310d2b6b6bd70e0b901000008c00000004000000000000000000200000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000000000020000000000000000000000000000000000000000000000000000010080000000000000000000400000000008000000000000000040000000000200090000000000000000000000000007b8dada041494f4e000000000000000000000000000000000000000000000000000000008302d18983e506f7845cefbdd5a0fd9200000000000000000000000000000000000000000000b5da000000000000b9058001bbe96caf51d3379523b82522798f5d3324b112b3030a148fa7de686b32b3f0c4a0de775572af0b75be2c1518a4454872b460cc3c1b972cdab6062103889c37bc3e5ac333c0358a05e3f1ed526d237a67e108944d26e9b8042daca85a41717538d802439bf32ac59b0e16f0370b21c3ae52e4349bdf568afa6b44bdbbf17b8f9b6e98220f8dbb40af543f1b200d8e61e4531041a64a946ed9841bae35c8ff1a952a3d73a8206a4beb0e87b62d2f4386074d8e574a52c97578b0150c577af12dea1397efc26c1e531e9fa4c4582a7fd25f5f9cb65281ddfd8c78df93089b09843f49342b76f64932b65bc7eb08ec1aae03b6359780efa8844a7f57068c62ec35c0a1d854aeb5fff50c7afe9d61f616c02412350da2365f00c7a7f8aed9d03574c59dcc79f9b03341f778f5fb77e59ae510f5791e32855df8d457830fe6eb4433f1a166e02c34debc53e1371cf35f540e133a7c5989695dd3f1ded6f38db8d6d3026d526132a0ef8bbe38cc0bfeb306f9a46067d81f3e11f7263b11c12eeecf50a119a0c17b3955f289f8e483036130770fa0e83999593b5a3d35ac63980d2fb16a4a1e441eab3e4a6b847286a43b3db91cacc5840e5e42f507f62c778c22ac0b9c23c548e606979e98df98fb19d42871326f002289a076c4d42ee3530ba3dabfeaefffac20a2f8a31ef7c330608e4e3120df10a048c469fc9dfe3205fadb7b9ab0847d8cc75d956b155b4736ce70c980049da0b86ff3218b75dcf75c80fe3c0f79239baf13b03e47527031e91fdc7c5f5248bbefbb0d48618a2ffbdd3da3c7c4f3c7e5492d4fa147f27b8025161f871d51ec42b75b1b881805567bd7e55da27b2d8908f749e9cd1707a8551e55831572bc16e6bd1f3b51633c8798766b6710ee28e8a3a71c48bd16311325fcd886815c4a2a1d5d26f85ff62394fedcda7b7b2dd713d80d048b72662b942eb892f92d2396a0ec7e5b643d6e36baa85eff69f123026921200800de534fa76ac223038d05dc39227765c81c6fb3c28024c44cd66db22713d3834663029020dbcf0d5c53b172d478ecbec9212a9b34f21622b1f9a869e53bc1e138e57c9588342928bd9ba77bac1c324a3d707505ef0830c9f676083ca6eb296abfbdcdf9aa6f2f65870f86f0f36935595c77a4576cc5eba2201a8acf6f23c910e21dcb1eb16a1a6fb4aa3e9555470207cedb6486df2c1697634c375cf7a09eec9d7f6755bb0cbfb8787a34061acfd9e056899b6718018e7a4e85d4cb7c7fb986840cf06270c6825d48dd5f480d9e4be846a86aad6a1a740b1b1d546bf0d2c8a50e631aeb9aee2bbc0b227b25243b5953f3dbda18c33e91f05271d2ac5b3f14abfecfee070dd8ea8955d8fbf8f77e1e8018a33c22bdf0a755050b8d16109e2a2c852ef4eb28ec9a9b10e9e72072875a15fc39f5c1f2461fdea6192cb7aeb8c31bb554b2f3832446f2fa2159f2017b54ae499f0e627519718fa982ea0325dc95d72a11d17a47f335efabca9914a5f2f0177414fdf4fd2f696413f540ce2dbef67e48a70d9ce9a3742149523748bdff64bb54828f9357edf3ca359a3ab5e35c62538e75961a5e77d5c39cfacf55c91d6f82b673581ca84c8d88b51d93aa5ecc2bf00211cf339c6dfca8f0245ca6522d062fee7098173da4e6020f1770bceda61a34bd7271c5182de036ee76418beeb5bac8fb0bfc8ca44a13d396a70a4af7ab61478d1ff6945ec9ac267a0f9c0693965b99b1b468623316443e8b0855449593e2d85c2080a7f0fc146c3bfe14bd597cee4d27d5b54be2c4bd0a896ff223e36b9c357bdf482ffa0db40788c17065be1e89e0f6f1690064f1f18a3d6149ca8e55d69d58590f1371da29ebd4390fab4b9d170f82336406a341dc2b7d3f8d6f704a5465bdb481ecdb094f7e0b4e77667c431823246107c09371b5a3cb427c107a36561c24537973192baf297ce239ed3b7e93402bf9df921942c29727977ef902b4f8d00ea0a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee080b4686d2211a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a100000000000000001bc16d674ec8000087058a192943f400831e5d708800000002540be40001b860f0998449029d2234483bcd1010ff92f78bcec989d421ac920a2bf6bce027c19eda88fc3b5aaf2f4302a91990f41d9ce1d5359ac32ff11e29b12336de214c20c74d7c2b35cc1050d21ac0b9eebd79713d8dbdcaa414572f20d3d21803fc46dd0af89f51a0a03ae5f354ed01f0df23ccec984ec743a4bf795a60d04bfa298446e733f4b2f2830116f98087058a1928cd50e8830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a9859eb799fd6e3f319b6e9d1045f1d47d2a49c588f39e87011ac345be9ac16afd21cbe1f12cbb5a56c53300beb18d6c0911f8c58409d6822567d5aa6a49bda06f89f52a0a0dafd3c8598371d404ba65d4a0341bc2564c08fd84f5ec6af29a61a2f4c646b8301096b8087058a19295132a0830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46aefadecd275a04fe539560ea121a0ac7d3054748b151080d183dc5cbe55c0c5597cf18c88950cdaaf3ddb805d21ce3228785ab66c914c315a408b98919fee9d05f89e53a0a01b1c362c4649596ffe221469292e4b86a78874bee8797ff84dd20ffd8e70fe8207d48087058a1929d51070830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a668f8187480ad334aade7962c34e2ef01ff4d511e5bbd20303e7a25dc5d19f2ddc6e5de45122f1e576a9c2d1c1fa091d91d5e9df88fa449d948bf5fcdaa87d0d"));
    BigInteger expectedTotalDifficultyAfterImport = new BigInteger("38071196984599");
    AionAddress contract_685a1 = AddressUtils.wrapAddress("a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1");
    AionAddress contract_12ee0 = AddressUtils.wrapAddress("a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee0");
    AionAddress contract_cab26 = AddressUtils.wrapAddress("a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab26");
    // setup blockchain with state before imported block
    StandaloneBlockchain blockchain = new Builder().withState(grandparentBlock, totalDifficultyForGrandparent, parentBlock, totalDifficultyForParent, worldStateAfterParentImport).withDetails(contract_685a1, Hex.decode("f93dbba0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a18080b91682f9167fb9050008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c42347ccaaa3ec0fa58113f76a23f8b46df802fa379087a122779f9059ae376d6c971087cdd29d4282795c402cf244aa632a19e4049ee5a400cb3db841d4e3886faada75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dcf34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb4d95ca4c64d9e37c9d1843ae4dd9fe219ea12e429f58cadfb3df102d001197e13c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d15a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b76354891bbbbd69c2285db6baae295903a07599e632a8be53098c5b3b1534b67142e2871fcb8d8b91392dbfb5c6fc5c06ca608af38383118d108807e39607d9763ea77a44615df6156e6baf7ebe5b1925bfd4b8e9c2b5941cce036bf3737b0703905f8e0091699c7569518f3f8a9e488f756879e202db546b527bf230dfab71438f0e09d42a6b0f81a12abae587f8aa587a84872d3a8b7a13ec91c304db6272037e1a5412be2078d7064a0d70e3fb9326809be00abe8688b757ebfa875f021c2079fe8032b278284fa49f6d05ee9d6f027dc4098f427a9f904d024e94f555d1fa6a9ab1a5437b1f69bc9fd55b1e41f4efd1e4333bd231463817a7d2ac2d38efd8174c1bbccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f6e51ea4a1df9ab733c542838bf212acafaa7ec17755d6061726f95e69ad9711a5b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9df7eb9b918b18676abb30d131df5a9ca4920c1faff46456c89a6bc5fb01ed045ef997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b5d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d6cc2d81d0a24de03ecdf128569a2d85ffd680fb952d0ffa738c6f1f87c289b3fe482b4514106064e3bee2f1d5d7a0d054239cddd5599624727f6c00f08a9c4e4d7921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b4493bcf7114217f569830622c492c4bcccc90c2a114fb30785eceb007788b01f5eb9de6e90a8fccdf2c05f725ed581605d060d29a3a5dfe41d62bf34f9515a0a89c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0aafb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c44042d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad12bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a1f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d7311f5499bb615163a118950a83bb0bb9e99e41496e54d3090ada980f38909e4f8a92ca6976279d98c93920d8102e2136a9999c378f757e60d21e7cd03e9c5f7060e5837268d4318c794db647536a7be37cce1a97ae83b8b570020530dfc1734ba0111f92400cea9b8e6b2aa68ce846a1fea4f6b284344cfcb99fc8d46d975db9ccf71d7b58ce8d0384752416d82363da0804b7171efd8e719c0d689cad5dfb9b3a592b5e719dda4ac89fd63830cec85a14cbb28ac4b4086a6a6033b59386925eef34569a090804f73abb60d75c7a65c6fe5399d8824fbeba6d23a9d9951892df9113cb4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe29190f2c96b8e06caaf785f69ddf11637ab18afeea020f213947568a2c4417f770b51f8667e76b20495aec1e7150dab3d5c339f6b538c8b10dfde374787bc6e000000afeea02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c8c8b10dfde374787bc6e000000b4f3a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c60919057414e44000000000000000000000008b853f851808080a02bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a18080808080808080a093bcf7114217f569830622c492c4bcccc90c2a114fb30785eceb007788b01f5e80808080b8b3f8b1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d80808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b80a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480a3e2a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b001b853f851808080a0da75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dc8080a01087cdd29d4282795c402cf244aa632a19e4049ee5a400cb3db841d4e3886faa80808080808080808080adeca0309489a9529008ce5afed97a80893cb79e2eb35654d88bcf4c1643d568a503f68a893635c9adc5dea00000b853f85180a09ccf71d7b58ce8d0384752416d82363da0804b7171efd8e719c0d689cad5dfb980808080a0f8a92ca6976279d98c93920d8102e2136a9999c378f757e60d21e7cd03e9c5f780808080808080808080b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b44808080a05a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b763548980a012be2078d7064a0d70e3fb9326809be00abe8688b757ebfa875f021c2079fe8080b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480abea9f3aa2ba289cfae6cdecf879b2fc1c39ab19126ebbebadff5b472027920bde7d89881bc16d674ec80000b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b853f851808080a0da75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dc8080a07311f5499bb615163a118950a83bb0bb9e99e41496e54d3090ada980f38909e480808080808080808080b873f87180808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b853f85180808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80808080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a07d9895f295b815eb88268c820cfcfdb8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c91909342c1bcdfe9297ef594fa352c7cab26b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b44808080a05a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b763548980a0ba0111f92400cea9b8e6b2aa68ce846a1fea4f6b284344cfcb99fc8d46d975db80b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b853f85180808080a05d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d680808080a03c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba080808080808080afeea020f213947568a2c4417f770b51f8667e76b20495aec1e7150dab3d5c339f6b538c8b10dfa8017dd9f68f600000b0efa12073447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000b853f851808080a02bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a18080808080808080a047ccaaa3ec0fa58113f76a23f8b46df802fa379087a122779f9059ae376d6c9780808080afeea03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c8c8b10dfde374787bc6e000000b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c919077616e6478000000000000000000000aafeea020447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000afeea033447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000b853f85180a09ccf71d7b58ce8d0384752416d82363da0804b7171efd8e719c0d689cad5dfb980808080a00091699c7569518f3f8a9e488f756879e202db546b527bf230dfab71438f0e0980808080808080808080abea9f3aa2ba289cfae6cdecf879b2fc1c39ab19126ebbebadff5b472027920bde7d89880de0b6b3a7640000b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b44808080a05a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b763548980a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b853f851808080a0da75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dc8080a01bbbbd69c2285db6baae295903a07599e632a8be53098c5b3b1534b67142e28780808080808080808080aeed9f36b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c8c8b10dfde374787bc6e000000b893f891a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b8d3f8d1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b80a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b83baced0005757200025b42acf317f8060854e00200007870000000201fcb8d8b91392dbfb5c6fc5c06ca608af38383118d108807e39607d9763ea77af92710b9270d60506040523615610172576000356c01000000000000000000000000900463ffffffff16806305d2035b1461017857806306fdde03146101a6578063097c23f81461023657806311d0cbd71461026057806318160ddd1461029c578063313ce567146102c65780633323984d146102f6578063556f0dc7146103435780636de9f32b1461036d5780636f77f29e1461039757806370a082311461046b5780637b781452146104ab5780637ba944d1146105095780637d64bcb4146105b35780638355fa24146105e15780638da5cb5b1461067a578063958ec7d1146106ab578063959b8c3f146106f857806395d89b4114610724578063b239dff0146107b4578063b2d82245146108bc578063be29184f14610909578063d0dc282014610956578063d95b637114610a19578063dd62ed3e14610a6e578063f0a147ad14610abf578063f68deec214610b3b578063f99ef5a514610bf6578063fad8b32a14610c61578063fbb001d614610c8d57610172565b60006000fd5b34156101845760006000fd5b61018c610cda565b604051808215151515815260100191505060405180910390f35b34156101b25760006000fd5b6101ba610ced565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156101fb5780820151818401525b6010810190506101df565b50505050905090810190600f1680156102285780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156102425760006000fd5b61024a610d9f565b6040518082815260100191505060405180910390f35b341561026c5760006000fd5b6102826004808035906010019091905050610dd1565b604051808215151515815260100191505060405180910390f35b34156102a85760006000fd5b6102b0610e2f565b6040518082815260100191505060405180910390f35b34156102d25760006000fd5b6102da610e41565b604051808260ff1660ff16815260100191505060405180910390f35b34156103025760006000fd5b61032960048080806010013590359091602001909192908035906010019091905050610e4f565b604051808215151515815260100191505060405180910390f35b341561034f5760006000fd5b610357610f68565b6040518082815260100191505060405180910390f35b34156103795760006000fd5b610381610f7a565b6040518082815260100191505060405180910390f35b34156103a35760006000fd5b610469600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050610f83565b005b34156104775760006000fd5b61049560048080806010013590359091602001909192905050610fc2565b6040518082815260100191505060405180910390f35b34156104b75760006000fd5b6104ef600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091905050610ff3565b604051808215151515815260100191505060405180910390f35b34156105155760006000fd5b6105b16004808080601001359035909160200190919290808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061115d565b005b34156105bf5760006000fd5b6105c7611168565b604051808215151515815260100191505060405180910390f35b34156105ed5760006000fd5b610678600480808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111de565b005b34156106865760006000fd5b61068e6111e7565b604051808383825281601001526020019250505060405180910390f35b34156106b75760006000fd5b6106de600480808060100135903590916020019091929080359060100190919050506111f6565b604051808215151515815260100191505060405180910390f35b34156107045760006000fd5b61072260048080806010013590359091602001909192905050611285565b005b34156107305760006000fd5b610738611322565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156107795780820151818401525b60108101905061075d565b50505050905090810190600f1680156107a65780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156107c05760006000fd5b6108ba600480808060100135903590916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190808060100135903590600019169090916020019091929080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506113d4565b005b34156108c85760006000fd5b6108ef600480808060100135903590916020019091929080359060100190919050506113e2565b604051808215151515815260100191505060405180910390f35b34156109155760006000fd5b61093c60048080806010013590359091602001909192908035906010019091905050611553565b604051808215151515815260100191505060405180910390f35b34156109625760006000fd5b610a1760048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506116d3565b005b3415610a255760006000fd5b610a5460048080806010013590359091602001909192908080601001359035909160200190919290505061170c565b604051808215151515815260100191505060405180910390f35b3415610a7a5760006000fd5b610aa9600480808060100135903590916020019091929080806010013590359091602001909192905050611777565b6040518082815260100191505060405180910390f35b3415610acb5760006000fd5b610b3960048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506117c6565b005b3415610b475760006000fd5b610bdc6004808035906010019082018035906010019191908080602002601001604051908101604052809392919081815260100183836020028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919050506117f7565b604051808215151515815260100191505060405180910390f35b3415610c025760006000fd5b610c5f6004808035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611983565b005b3415610c6d5760006000fd5b610c8b600480808060100135903590916020019091929050506119ae565b005b3415610c995760006000fd5b610cc060048080806010013590359091602001909192908035906010019091905050611a4b565b604051808215151515815260100191505060405180910390f35b600c60009054906101000a900460ff1681565b610cf561255c565b60046000508054600181600116156101000203166002900480600f016010809104026010016040519081016040528092919081815260100182805460018160011615610100020316600290048015610d905780600f10610d6357610100808354040283529160100191610d90565b8201919060005260106000209050905b815481529060010190601001808311610d7357829003600f168201915b50505050509050610d9c565b90565b6000610dc7610db330610fc263ffffffff16565b600760005054611ad490919063ffffffff16565b9050610dce565b90565b600060026000508060010154905433909114919014161515610df35760006000fd5b610e15670de0b6b3a76400008302600760005054611af690919063ffffffff16565b600760005081909090555060019050610e29565b5b919050565b60006007600050549050610e3e565b90565b600060129050610e4c565b90565b6000610ea082600a6000506000338252816010015260200190815260100160002090506000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008b8b825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a360019050610f61565b9392505050565b60006006600050549050610f77565b90565b600b6000505481565b610f9433898961170c63ffffffff16565b1515610fa05760006000fd5b610fb833898989898989896001611b1d63ffffffff16565b5b50505050505050565b6000600860005060008484825281601001526020019081526010016000209050600050549050610fed565b92915050565b6000600a600050600087878252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505482111515156110415760006000fd5b61109082600a6000506000898982528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600a60005060008888825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050819090905550611110338888888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b838387877f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611154565b95945050505050565b5b5050505050505050565b60006002600050806001015490543390911491901416151561118a5760006000fd5b6001600c60006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1600190506111da565b5b90565b5b505050505050565b60026000508060010154905482565b600081600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded876040518082815260100191505060405180910390a36001905061127e565b9392505050565b3383839091149190141615151561129c5760006000fd5b600160096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a35b5050565b61132a61255c565b60056000508054600181600116156101000203166002900480600f0160108091040260100160405190810160405280929190818152601001828054600181600116156101000203166002900480156113c55780600f10611398576101008083540402835291601001916113c5565b8201919060005260106000209050905b8154815290600101906010018083116113a857829003600f168201915b505050505090506113d1565b90565b5b5050505050505050505050565b60006000600a6000506000338252816010015260200190815260100160002090506000506000868682528160100152602001908152601001600020905060005054905080831115611476576000600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055506114cc565b6114898382611ad490919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055505b8484337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008c8c825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a36001915061154b565b509392505050565b6000600260005080600101549054339091149190141615156115755760006000fd5b600c60009054906101000a900460ff161515156115925760006000fd5b670de0b6b3a76400008202915081506007600050546115bf83600b60005054611af690919063ffffffff16565b111515156115cd5760006000fd5b6115e582600b60005054611af690919063ffffffff16565b600b6000508190909055506116248260086000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b60086000506000868682528160100152602001908152601001600020905060005081909090555083837f56e184a04f4acbb46419fef039f6ceb5f04cb0ae59e0a0f971f128a2274ded9c856040518082815260100191505060405180910390a28383600060007f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a3600190506116ca565b5b5b9392505050565b6116e433878761170c63ffffffff16565b15156116f05760006000fd5b611704338787878787611d9963ffffffff16565b5b5050505050565b600082828686909114919014168061176857506009600050600086868252816010015260200190815260100160002090506000506000848482528160100152602001908152601001600020905060009054906101000a900460ff165b905061176f565b949350505050565b6000600a60005060008686825281601001526020019081526010016000209050600050600084848252816010015260200190815260100160002090506000505490506117be565b949350505050565b6117f033338888888860106040519081016040528060008152601001506001611b1d63ffffffff16565b5b50505050565b600060006002600050806001015490543390911491901416151561181b5760006000fd5b6000845111151561182c5760006000fd5b8251845114151561183d5760006000fd5b600090505b83518110156119725760006000858381518110151561185d57fe5b90601001906020020180601001519051909114919014161515156118815760006000fd5b6000838281518110151561189157fe5b906010019060100201511115156118a85760006000fd5b6118f684828151811015156118b957fe5b90601001906020020180601001519051670de0b6b3a764000086858151811015156118e057fe5b9060100190601002015102611a4b63ffffffff16565b50838181518110151561190557fe5b90601001906020020180601001519051337f57fae1ac296aac0148b76b88b13e6c7b0f828ea10dee26f520382015ef4a5192888781518110151561194557fe5b906010019060100201516040518082815260100191505060405180910390a35b8080600101915050611842565b6001915061197b565b5b5092915050565b6119a9333386866010604051908101604052806000815260100150611d9963ffffffff16565b5b5050565b338383909114919014161515156119c55760006000fd5b600060096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a35b5050565b6000611a8a3333888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b8383337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611acd565b9392505050565b6000828211151515611ae65760006000fd5b8183039050611af0565b92915050565b600081830190508050828110151515611b0f5760006000fd5b809050611b17565b92915050565b611b2c84611f7f63ffffffff16565b611b438a8a8a8a8a8a8a8a8a611fc063ffffffff16565b60006000878790911491901416151515611b5d5760006000fd5b30878790911491901416151515611b745760006000fd5b83600860005060008a8a8252816010015260200190815260100160002090506000505410151515611ba55760006000fd5b611bd984600860005060008b8b82528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008a8a825281601001526020019081526010016000209050600050819090905550611c348460086000506000898982528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600860005060008888825281601001526020019081526010016000209050600050819090905550611c738a8a8a8a8a8a8a8a8a8a6121a763ffffffff16565b858589898d8d7f6565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b08b8b8b604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ce85780820151818401525b601081019050611ccc565b50505050905090810190600f168015611d155780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611d4f5780820151818401525b601081019050611d33565b50505050905090810190600f168015611d7c5780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a45b50505050505050505050565b611da883611f7f63ffffffff16565b82611db98686610fc263ffffffff16565b10151515611dc75760006000fd5b611dfb8360086000506000888882528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008787825281601001526020019081526010016000209050600050819090905550611e3a83600760005054611ad490919063ffffffff16565b6007600050819090905550611e5e8787878760006000898989611fc063ffffffff16565b848488887f01055277133200c3a8bacd68b8d67d1c54154ac94c975287d02eeb1d5f696b12888888604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ed15780820151818401525b601081019050611eb5565b50505050905090810190600f168015611efe5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611f385780820151818401525b601081019050611f1c565b50505050905090810190600f168015611f655780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a35b50505050505050565b80611faf600660005054611fa1600660005054856123b490919063ffffffff16565b6123df90919063ffffffff16565b141515611fbc5760006000fd5b5b50565b600060006120148989603060405190810160405280601181526010016f414950303034546f6b656e53656e646581526010016f7200000000000000000000000000000081526010015061242263ffffffff16565b91509150600060008383909114919014161561202f5761219a565b8181634e1524c18d8d8d8d8d8d8d8d8d6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156120c95780820151818401525b6010810190506120ad565b50505050905090810190600f1680156120f65780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156121305780820151818401525b601081019050612114565b50505050905090810190600f16801561215d5780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b15156121875760006000fd5b5af115156121955760006000fd5b505050505b5050505050505050505050565b600060006121fb8888603060405190810160405280601481526010016f414950303034546f6b656e526563697081526010016f69656e7400000000000000000000000081526010015061242263ffffffff16565b9150915060006000838390911491901416151561238157818163417bf7af8e8e8e8e8e8e8e8e8e6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156122ac5780820151818401525b601081019050612290565b50505050905090810190600f1680156122d95780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156123135780820151818401525b6010810190506122f7565b50505050905090810190600f1680156123405780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b151561236a5760006000fd5b5af115156123785760006000fd5b505050506123a5565b82156123a457612397888861254b63ffffffff16565b15156123a35760006000fd5b5b5b5b505050505050505050505050565b60006000821115156123c65760006000fd5b81838115156123d157fe5b0490506123d9565b92915050565b600060008314156123f3576000905061241c565b8183029050805081838281151561240657fe5b041415156124145760006000fd5b80905061241c565b92915050565b6000600060006000846040518082805190601001908083835b60108310151561246157805182525b60108201915060108101905060108303925061243b565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463ff42bfd6898986866000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156125155760006000fd5b5af115156125235760006000fd5b50505050604051808060100151905190916020015093509350612541565b5050935093915050565b600060019050612556565b92915050565b601060405190810160405280600081526010015090565b8260086000506000848482528160100152602001908152601001600020905060005081909090555081818460007f7f0c55adb7f69e3decf3ca20f9a2367b205d728e6905eea6c4fb6f3934f842cc60405160405180910390a35b505050565b60006000846040518082805190601001908083835b60108310151561260d57805182525b6010820191506010810190506010830392506125e7565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463a1e6b0663086868a8a6040518763ffffffff166c010000000000000000000000000281526004018087878252816010015260200185859060001916909060001916908252816010015260200183838252816010015260200196505050505050506000604051808303816000888881813b15156126c75760006000fd5b5af115156126d55760006000fd5b505050505b50505050505600a165627a7a7230582010e55ed479c7271d66651ea5c5f57d7437032caf45bedc8a05c6911cca9158090029")).withContractIndex(contract_685a1, ByteArrayWrapper.wrap(Hex.decode("4d93ab5e6fefb5b0fe77159447121edd788acb58b7ef48c3f4ab8fae417159f9")), ByteArrayWrapper.wrap(Hex.decode("7795219b807f58136f09981ad40e637d4e49e4d405204ed0188ec5643df7aea2")), InternalVmType.FVM).withDetails(contract_12ee0, Hex.decode("f92be3a0a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee08080b9114af91147b9040071de96cf4e7bed7d5dd070641f4cf509e7a60ef7a9c19646a38e9e27d072cc1b02c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d8246704e4c3f47c1160dbf79b313811a9d927616a053bfbf056cd726e9c9c7347cc0953bd34dd25152787fc9c636e8ac6a51bceb48dd2d6ebc4e0682a9e850edffbb8d7aab6fc1ce03e686e8e591905b328a87354953c8a6edd414058047f54cccdc8506c69fb2d4d8665e6d9a8fafb7d45231b65acf90b0793f05e1362180982a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868c9cd66ca4835636b1f23f200d304fb7aefbdffed02df8d25256ef438b358f4190739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb404414b8f8a9d3a9f5f9590b55212189ced61174e3fdd298c460a8fb3e40f6cb7bbad322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3203089d7522c63a84184cb5c479ed2844df29251f42113b59cb5e71f2af279d4e7f72f693c7364ce72d8d33e4836ca6055b132a11ee9d5a72eeedc0c272912fa856514d291ab2b0b1d38341666ad85197bbb79bf80895f8f461d4a30a95206f28169fbd1e1fb75f4e2c6e09b5a8c589b5596e7a9b33bed9923a56d81e70f08b05f46038a428551a072b09d4641e082054b5629fa26e1696add35749b4327d41958c1ae0722b36755e4a342643b287c0133a47367bb0eeea8be329bd30828c42030cd4348da9b5f8bf3cdcbe033dd8f6dad62e3fe41b5cf6880811662ef4a24c7ddca4b9092c799e1bd5466bbe936cb3f6687b7294a89a8b0c9aca65168b419106db584238991416eb0e43c16513737a7b86552d8aab9035b13ffaac0ed009f328cafa03b4c4902d9998d8e72add0d8b05ac21ab2ad09ba3c943ca615c9ecbccb308509e0a7cc1099d77b81da3784dd5cb54c661ab265f2f7c839644b43c943008cc1d003fbe6d66bc8c18733990c379adbe62059f11a1d3233ef8c2f0ecf593c1e3b3854a2406bf7de2efd621e27f284e8b896d271ba9441dcb1f2ed5237dc93e0a7fc949f2968e731e1749adc1b06bcae0d203611c25220c425ded755960658f7d5d8b2e589c2f054184bbf3e8a789d7ebe5ca235c0d036691ee5507ddb786efb3468d632ca559cd8f9e01477658d9040dcbe01b5a7eff8a0760b4f8f58e06b39d2ae5c6bcea74a383fac57ae99031dcd9f39540cdadd78b00a78e4f596ea9f3be1a187e5c964f11826acb44d1d4a41625e37973a6b20e0839f57e70c534e28c56b82a427e0561db11037232a07c02066ada8f56dc3ec292455c9dc4ab7c24c009419a649cf9e268347db9253bfa45cf94750caa6b9bd3ecf3149d302bb5aebecc25f59364048a7563da34dab1d4143b6177d3426341410b3f81d0b4a647b7183f90d04a4e3a120f616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c01a3e2a03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c01b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a044857e4dec3533b0f5c0a390c77541b853f851808080808080808080a0246704e4c3f47c1160dbf79b313811a9d927616a053bfbf056cd726e9c9c73478080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a044857e4dec3533b0f5c0a390c77541b873f871a0fbb8d7aab6fc1ce03e686e8e591905b328a87354953c8a6edd414058047f54cc8080808080808080a0246704e4c3f47c1160dbf79b313811a9d927616a053bfbf056cd726e9c9c73478080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c919056bc628565804685fe907d335705503db893f891a0fbb8d7aab6fc1ce03e686e8e591905b328a87354953c8a6edd414058047f54cc80808080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868c808080a0246704e4c3f47c1160dbf79b313811a9d927616a053bfbf056cd726e9c9c73478080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880aceba035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c8988016345785d8a0000b8b3f8b1a0fbb8d7aab6fc1ce03e686e8e591905b328a87354953c8a6edd414058047f54cca0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044808080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868c808080a0246704e4c3f47c1160dbf79b313811a9d927616a053bfbf056cd726e9c9c73478080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe2919056bc628565804685fe907d335705503db8d3f8d1a0fbb8d7aab6fc1ce03e686e8e591905b328a87354953c8a6edd414058047f54cca0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044808080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868ca0d322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3208080a0246704e4c3f47c1160dbf79b313811a9d927616a053bfbf056cd726e9c9c73478080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a044857e4dec3533b0f5c0a390c77541b4f3a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b091906261736b657400000000000000000000b853f85180808080a0f72f693c7364ce72d8d33e4836ca6055b132a11ee9d5a72eeedc0c272912fa8580808080a06514d291ab2b0b1d38341666ad85197bbb79bf80895f8f461d4a30a95206f28180808080808080b8d3f8d1a0fbb8d7aab6fc1ce03e686e8e591905b328a87354953c8a6edd414058047f54cca0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044808080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868ca0d322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3208080a069fbd1e1fb75f4e2c6e09b5a8c589b5596e7a9b33bed9923a56d81e70f08b05f8080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880a3e2a02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c01a7e6a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c60848332692ab853f851808080a0cd4348da9b5f8bf3cdcbe033dd8f6dad62e3fe41b5cf6880811662ef4a24c7dd8080a0c1ae0722b36755e4a342643b287c0133a47367bb0eeea8be329bd30828c4203080808080808080808080b8d3f8d1a0fbb8d7aab6fc1ce03e686e8e591905b328a87354953c8a6edd414058047f54cca0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044808080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868ca0d322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3208080a069fbd1e1fb75f4e2c6e09b5a8c589b5596e7a9b33bed9923a56d81e70f08b05f8080808080a0ca4b9092c799e1bd5466bbe936cb3f6687b7294a89a8b0c9aca65168b419106d80b4f3a0209591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a044857e4dec3533b0f5c0a390c77541b4f3a020542c8638c48d158d326e68047865f01a4938fec55ad2d5c18082ae625a26ad919008da46b57cd44e47e6cb273e9a4685a1b853f8518080a0afa03b4c4902d9998d8e72add0d8b05ac21ab2ad09ba3c943ca615c9ecbccb3080808080808080808080a08509e0a7cc1099d77b81da3784dd5cb54c661ab265f2f7c839644b43c943008c808080b8d3f8d1a0c1d003fbe6d66bc8c18733990c379adbe62059f11a1d3233ef8c2f0ecf593c1ea0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044808080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868ca0d322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3208080a069fbd1e1fb75f4e2c6e09b5a8c589b5596e7a9b33bed9923a56d81e70f08b05f8080808080a0ca4b9092c799e1bd5466bbe936cb3f6687b7294a89a8b0c9aca65168b419106d80a3e2a03962f002cec1968817427fea17b0afce694a74d4ea80c7f8c7710f5ae28ef3a801b8f3f8f1a0c1d003fbe6d66bc8c18733990c379adbe62059f11a1d3233ef8c2f0ecf593c1ea0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044a0a7fc949f2968e731e1749adc1b06bcae0d203611c25220c425ded755960658f78080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868ca0d322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3208080a069fbd1e1fb75f4e2c6e09b5a8c589b5596e7a9b33bed9923a56d81e70f08b05f8080808080a0ca4b9092c799e1bd5466bbe936cb3f6687b7294a89a8b0c9aca65168b419106d80b4f3a0390056fd3a958344e7660fefc80e46cc70fc243a97c7fa08c2d27e173b1d2c3e9190a081848ba2854cb906d9c14892cb0f8db90114f90111a0c1d003fbe6d66bc8c18733990c379adbe62059f11a1d3233ef8c2f0ecf593c1ea0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044a0a7fc949f2968e731e1749adc1b06bcae0d203611c25220c425ded755960658f78080a0a759d9e2bb2c1a5f1853861d2631eda0d28bada48237a6d81bc4a57a942a868ca0d322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3208080a069fbd1e1fb75f4e2c6e09b5a8c589b5596e7a9b33bed9923a56d81e70f08b05fa03468d632ca559cd8f9e01477658d9040dcbe01b5a7eff8a0760b4f8f58e06b3980808080a0ca4b9092c799e1bd5466bbe936cb3f6687b7294a89a8b0c9aca65168b419106d80b4f3a020c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c919056bc628565804685fe907d335705503daceba02012e000df2a2012459c8a6d96ab9ad98c9fbc1e7eae961fad2eae20b8c4c36e89881bc16d674ec80000b853f8518080808080a0e1a187e5c964f11826acb44d1d4a41625e37973a6b20e0839f57e70c534e28c5a06b82a427e0561db11037232a07c02066ada8f56dc3ec292455c9dc4ab7c24c0080808080808080808080b90114f90111a0c1d003fbe6d66bc8c18733990c379adbe62059f11a1d3233ef8c2f0ecf593c1ea0739e01774b3995231b46c5a8b0a1f1c44ea987fcdd5152227fd8a4f396cb4044a0a7fc949f2968e731e1749adc1b06bcae0d203611c25220c425ded755960658f78080a09419a649cf9e268347db9253bfa45cf94750caa6b9bd3ecf3149d302bb5aebeca0d322add2bf997f89e9ac1a132794e0cad766e8373afda8d2da9990e74585e3208080a069fbd1e1fb75f4e2c6e09b5a8c589b5596e7a9b33bed9923a56d81e70f08b05fa03468d632ca559cd8f9e01477658d9040dcbe01b5a7eff8a0760b4f8f58e06b3980808080a0ca4b9092c799e1bd5466bbe936cb3f6687b7294a89a8b0c9aca65168b419106d80b83baced0005757200025b42acf317f8060854e0020000787000000020c25f59364048a7563da34dab1d4143b6177d3426341410b3f81d0b4a647b7183f91a70b91a6d605060405236156100f9576000356c01000000000000000000000000900463ffffffff1680630434acf8146100fd578063075d4782146101075780631fb976631461011d578063245935851461015d57806328a070251461018757806345d363c61461019d5780634895623f146101d25780634be67162146101f6578063686d22111461023557806376057d1a1461026a5780638f2790b3146102ae5780639f26d0ad146102ed578063a35d33a91461033e578063a6f2ae3a1461037b578063b9e7459914610385578063be9b1a9e14610451578063dab0abea1461047a578063f11b8188146104f6578063f59e38b714610536576100f9565b5b5b005b610105610587565b005b34156101135760006000fd5b61011b6105b1565b005b34156101295760006000fd5b610147600480808060100135903590916020019091929050506106f4565b6040518082815260100191505060405180910390f35b34156101695760006000fd5b610171610716565b6040518082815260100191505060405180910390f35b34156101935760006000fd5b61019b61072b565b005b34156101a95760006000fd5b6101d060048080806010013590359091602001909192908035906010019091905050610a2c565b005b34156101de5760006000fd5b6101f46004808035906010019091905050610c18565b005b34156102025760006000fd5b6102186004808035906010019091905050610ce9565b604051808383825281601001526020019250505060405180910390f35b34156102415760006000fd5b61026860048080806010013590359091602001909192908035906010019091905050610d28565b005b34156102765760006000fd5b61029460048080806010013590359091602001909192905050611013565b604051808215151515815260100191505060405180910390f35b34156102ba5760006000fd5b6102d0600480803590601001909190505061103f565b604051808383825281601001526020019250505060405180910390f35b34156102f95760006000fd5b610328600480808060100135903590916020019091929080806010013590359091602001909192905050611072565b6040518082815260100191505060405180910390f35b341561034a5760006000fd5b6103796004808080601001359035909160200190919290808060100135903590916020019091929050506110ab565b005b6103836112d4565b005b34156103915760006000fd5b61044f6004808035906010019091908035906010019091908035906010019082018035906010019191908080602002601001604051908101604052809392919081815260100183836020028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919080806010013590359060001916909091602001909192905050611462565b005b61047860048080806010013590359091602001909192908035906010019091905050611545565b005b34156104865760006000fd5b61048e6115d2565b604051808a8a825281601001526020018888825281601001526020018681526010018581526010018484906000191690906000191690825281601001526020018260038111156104da57fe5b60ff168152601001995050505050505050505060405180910390f35b34156105025760006000fd5b61052060048080806010013590359091602001909192905050611630565b6040518082815260100191505060405180910390f35b34156105425760006000fd5b610571600480808060100135903590916020019091929080806010013590359091602001909192905050611652565b6040518082815260100191505060405180910390f35b34600c6000506000338252816010015260200190815260100160002090506000508190909055505b565b336000600050600201600050806001015490549091149190141615156105d75760006000fd5b600360038111156105e457fe5b600060005060080160009054906101000a900460ff16600381111561060557fe5b148061063c57506000600381111561061957fe5b600060005060080160009054906101000a900460ff16600381111561063a57fe5b145b15156106485760006000fd5b6001600060005060080160006101000a81548160ff0219169083600381111561066d57fe5b02179055507fa84608b60f29a142fdf93af4c92c6e0600d4aa669e4373cd1c26fff30d54324660006000506002016000508060010154905460006000506004016000505460405180848482528160100152602001828152601001806f50545030303500000000000000000000815260100150601001935050505060405180910390a15b5b5b565b600c600050602052818160005260105260306000209050600091509150505481565b6000600b600050805490509050610728565b90565b6000600060006000336000600050600201600050806001015490549091149190141615156107595760006000fd5b6002600060005060080160006101000a81548160ff0219169083600381111561077e57fe5b02179055504360006000506005016000508190909055507f3d3dc5f62311c8d504eb0b5bf60174bb19486593410dbf78e60a3c8f8372087a60006000506002016000508060010154905460405180838382528160100152602001806f505450303037000000000000000000008152601001506010019250505060405180910390a1600091505b600b60005080549050821015610a2457600b6000508281548110151561082657fe5b9060005260106000209050906002020160005b50806001015490549350935083835050600a6000506000858582528160100152602001908152601001600020905060009054906101000a900460ff1680156108ce57506000600d60005060008686825281601001526020019081526010016000209050600050600060006000506002016000508060010154905482528160100152602001908152601001600020905060005054115b15610a1657600d6000506000858582528160100152602001908152601001600020905060005060006000600050600201600050806001015490548252816010015260200190815260100160002090506000505490506000600d600050600086868252816010015260200190815260100160002090506000506000600060005060020160005080600101549054825281601001526020019081526010016000209050600050819090905550838363fbb001d6600060005060020160005080600101549054856000604051601001526040518463ffffffff166c010000000000000000000000000281526004018084848252816010015260200182815260100193505050506010604051808303816000888881813b15156109ed5760006000fd5b5af115156109fb5760006000fd5b50505050604051805190601001501515610a155760006000fd5b5b5b8180600101925050610804565b5b5b50505050565b600081118015610a78575080600d600050600085858252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505410155b1515610a845760006000fd5b7f797847cd24af3f2afd42c81caf3d2c377d9021b5edcab11d49dba60248551e673386868660405180868682528160100152602001848482528160100152602001828152601001806f505450303034000000000000000000008152601001506010019550505050505060405180910390a1610b4481600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600d60005060008585825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050819090905550828263fbb001d633856000604051601001526040518463ffffffff166c010000000000000000000000000281526004018084848252816010015260200182815260100193505050506010604051808303816000888881813b1515610bea5760006000fd5b5af11515610bf85760006000fd5b50505050604051805190601001501515610c125760006000fd5b5b505050565b33600060005060020160005080600101549054909114919014161515610c3e5760006000fd5b6002600060005060080160006101000a81548160ff02191690836003811115610c6357fe5b02179055508060006000506005016000508190909055507f3d3dc5f62311c8d504eb0b5bf60174bb19486593410dbf78e60a3c8f8372087a60006000506002016000508060010154905460405180838382528160100152602001806f505450303036000000000000000000008152601001506010019250505060405180910390a15b5b50565b60006000600b60005083815481101515610cff57fe5b9060005260106000209050906002020160005b508060010154905491509150610d23565b915091565b33600060005060020160005080600101549054909114919014161515610d4e5760006000fd5b60026003811115610d5b57fe5b600060005060080160009054906101000a900460ff166003811115610d7c57fe5b14151515610d8a5760006000fd5b600060096000506000858582528160100152602001908152601001600020905060005054118015610e2a5750610e0581600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b6009600050600085858252816010015260200190815260100160002090506000505410155b1515610e365760006000fd5b600a6000506000848482528160100152602001908152601001600020905060009054906101000a900460ff161515610e6e5760006000fd5b610ebd81600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b600d600050600085858252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000508190909055507f31fd1dc7157b84cef3d48f5614a7eabe829d8b4367a461d799875dfc347ab8a53386868660405180868682528160100152602001848482528160100152602001828152601001806f505450303031000000000000000000008152601001506010019550505050505060405180910390a18282637b7814523330876000604051601001526040518663ffffffff166c0100000000000000000000000002815260040180868682528160100152602001848482528160100152602001828152601001955050505050506010604051808303816000888881813b1515610fe35760006000fd5b5af11515610ff15760006000fd5b5050505060405180519060100150151561100b5760006000fd5b5b5b5b505050565b600a6000506020528181600052601052603060002090506000915091509054906101000a900460ff1681565b600b6000508181548110151561105157fe5b9060005260106000209050906002020160005b915090508060010154905482565b600d6000506020528383600052601052603060002090506000506020528181600052601052603060002090506000935093505050505481565b600060006000336000600050600201600050806001015490549091149190141615156110d75760006000fd5b600090505b600b600050805490508110156112c957600b600050818154811015156110fe57fe5b9060005260106000209050906002020160005b50806001015490549250925082825050600a6000506000848482528160100152602001908152601001600020905060009054906101000a900460ff16156112bb576111c360096000506000858582528160100152602001908152601001600020905060005054600d6000506000868682528160100152602001908152601001600020905060005060008a8a825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600d600050600085858252816010015260200190815260100160002090506000506000898982528160100152602001908152601001600020905060005081909090555061127760096000506000858582528160100152602001908152601001600020905060005054600d6000506000868682528160100152602001908152601001600020905060005060008888825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b600d60005060008585825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055505b5b80806001019150506110dc565b5b5b50505050505050565b60006000600160038111156112e557fe5b600060005060080160009054906101000a900460ff16600381111561130657fe5b1415156113135760006000fd5b600060005060040160005054600c600050600033825281601001526020019081526010016000209050600050541015151561134e5760006000fd5b600060005060020160005080600101549054915091506113958282600c6000506000338252816010015260200190815260100160002090506000505461154563ffffffff16565b6003600060005060080160006101000a81548160ff021916908360038111156113ba57fe5b02179055503360006000506002016000508282909180600101839055555050506113eb8282336110ab63ffffffff16565b7faa4189542ca8da242be9f3805ec348582b10a1c3c83dbc4a3b3091a743cf8f328383333460405180868682528160100152602001848482528160100152602001828152601001806f505450303039000000000000000000008152601001506010019550505050505060405180910390a15b5b5050565b336000600050600201600050806001015490549091149190141615156114885760006000fd5b6002600381111561149557fe5b600060005060080160009054906101000a900460ff1660038111156114b657fe5b141515156114c45760006000fd5b6000861115156114d45760006000fd5b6000851115156114e45760006000fd5b8560006000506004016000508190909055508181600060005060060160005082829060001916909091806001018390555550505084600060005060050160005081909090555061153a84846116ea63ffffffff16565b5b5b5b505050505050565b61157881600c600050600033825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600c60005060003382528160100152602001908152601001600020905060005081909090555082826108fc83908115029060405160006040518083038185898989f194505050505015156115cc5760006000fd5b5b505050565b60006000508060000160005080600101549054909180600201600050806001015490549091806004016000505490806005016000505490806006016000508060010154905490918060080160009054906101000a900460ff16905089565b6009600050602052818160005260105260306000209050600091509150505481565b6000600d6000506000848482528160100152602001908152601001600020905060005060008686825281601001526020019081526010016000209050600050549050611699565b949350505050565b60008282111515156116b35760006000fd5b81830390506116bd565b92915050565b6000818301905080508281101515156116dc5760006000fd5b8090506116e4565b92915050565b600060006000835185511415156117015760006000fd5b600092505b84518310156117af5761173b858481518110151561172057fe5b9060100190602002018060100151905161195f63ffffffff16565b15156117a157600b600050805480600101828161175891906119da565b91909060005260106000209050906002020160005b878681518110151561177b57fe5b906010019060200201806010015190519091929091925091909091806001018390555550505b5b8280600101935050611706565b600091505b600b60005080549050821015611834576000600a6000506000600b600050858154811015156117df57fe5b9060005260106000209050906002020160005b508060010154905482528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055505b81806001019250506117b4565b600090505b8451811015611957576000848281518110151561185257fe5b9060100190601002015111801561188f575060006000868381518110151561187657fe5b9060100190602002018060100151905190911491901416155b151561189b5760006000fd5b6001600a600050600087848151811015156118b257fe5b9060100190602002018060100151905182528160100152602001908152601001600020905060006101000a81548160ff02191690831515021790555083818151811015156118fc57fe5b9060100190601002015160096000506000878481518110151561191b57fe5b906010019060200201806010015190518252816010015260200190815260100160002090506000508190909055505b8080600101915050611839565b5b5050505050565b60006000600090505b600b600050805490508110156119ca578383600b6000508381548110151561198c57fe5b9060005260106000209050906002020160005b508060010154905490911491901416156119bc57600191506119d3565b5b8080600101915050611968565b600091506119d3565b5092915050565b815481835581811511611a09576002028160020283600052601060002090509182019101611a089190611a0e565b5b505050565b611a3e9190611a18565b80821115611a3a57600081815080600090556001016000905550600201611a18565b5090565b905600a165627a7a72305820c9d45ac561f06d35af2e9c53da13b7dcc7dc5486b211bec4c33236159313df0f0029")).withContractIndex(contract_12ee0, ByteArrayWrapper.wrap(Hex.decode("391b46a6c577a9d1fb40ec7fd1b3f757c123fa68e16f3e481d86e6dec9ca4d10")), ByteArrayWrapper.wrap(Hex.decode("860a30e145341bcb2b9c6935ff088d0fa6ad37d463a1d23051b3eb6bcd425fe0")), InternalVmType.FVM).withDetails(contract_cab26, Hex.decode("f9066ea0a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab2601a017b531d1f727f993328da132bf62a7cbc54f0198dcf3cfc9f00e02f3659ff9a480f90627b9062460506040526000356c01000000000000000000000000900463ffffffff1680633d5840631461005f5780635df8122f146100a657806365ba36c1146100e3578063a1e6b0661461016c578063ff42bfd6146101c057610059565b60006000fd5b341561006b5760006000fd5b6100896004808080601001359035909160200190919290505061021e565b604051808383825281601001526020019250505060405180910390f35b34156100b25760006000fd5b6100e16004808080601001359035909160200190919290808060100135903590916020019091929050506102a2565b005b34156100ef5760006000fd5b6101436004808035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061034d565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b34156101785760006000fd5b6101be60048080806010013590359091602001909192908080601001359035906000191690909160200190919290808060100135903590916020019091929050506103c3565b005b34156101cc5760006000fd5b610201600480808060100135903590916020019091929080806010013590359060001916909091602001909192905050610592565b604051808383825281601001526020019250505060405180910390f35b60006000600060006001600050600087878252816010015260200190815260100160002090506000508060010154905490911491901416156102695783839150915061029b5661029a565b600160005060008585825281601001526020019081526010016000209050600050806001015490549150915061029b565b5b9250929050565b8383336102b5848461021e63ffffffff16565b9091149190141615156102c85760006000fd5b85858585909114919014166102de5783836102e3565b600060005b600160005060008989825281601001526020019081526010016000209050600050828290918060010183905555505050838387877f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a435060405160405180910390a35b5b505050505050565b60006000826040518082805190601001908083835b60108310151561038857805182525b601082019150601081019050601083039250610362565b6001836010036101000a0380198251168184511680821785525050505050509050019150506040518091039020915091506103be565b915091565b8585336103d6848461021e63ffffffff16565b9091149190141615156103e95760006000fd5b6000600085859091149190141615801561040a575033858590911491901416155b156104f45760405180806f4149525f4143434550545f4d4147494381526010015060100190506040518091039020906000191690858563cf0c64b28c8c8c8c6000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156104b75760006000fd5b5af115156104c55760006000fd5b5050505060405180806010015190519091602001509060001916909091149190141615156104f35760006000fd5b5b8383600060005060008b8b82528160100152602001908152601001600020905060005060008989906000191690906000191690825281601001526020019081526010016000209050600050828290918060010183905555505050838387879060001916908b8b7f9096ccaf3bc136981b8a043d4e5ef1396a340697147a05ff0597f635003acc0060405160405180910390a45b5b5050505050505050565b600060006000600050600087878252816010015260200190815260100160002090506000506000858590600019169090600019169082528160100152602001908152601001600020905060005080600101549054915091506105ef565b945094925050505600a165627a7a723058208af95ce52c89ecffb3f67449a149ba9fbea69fe903e07d6c514ced5b647aa6e40029")).withStorage(contract_cab26, Hex.decode("f9410df876a0788971c221e434af0efcaf5e8f13f987f29be32525ce5b0e28e31874ca40c056b853f851808080808080808080808080a09f1d3cc1940c2762f4114785d560a6321f198b84c8711175b0a610bbe99750c1a0930bbaaa41fda1ea815ac0889ec2bbfe6089b45ba8551afd3eb63cd377b6d30c808080f876a00ddbafc0e0dff8f22a92e7903b867321a60f798c4639cbef611cf0552ca5a823b853f8518080a0b4e19cdd265a84c641fcaa76a0df3b55978bb4e0bb67ecc76d6931e6a16a88628080a06455b04f6d09f136dd027a31d55c5b067625fa66d50d9f9dc17f27c63b46ed4a8080808080808080808080f8f6a0fbb9dfbae505d1ebe78d31f65d7acf8def64924b67a41bf349946808cb365cf0b8d3f8d1808080808080a07c619208e4d50311ba0a4f15fd5227292675bffbcb1509f7ccf2c46030c76b55808080a0e4d46454e6c8f24ec883efd33c1a9a8ecccc337986bfe28ec27951ab069226cea0d367385c7652afbebf775dcbf52049070a61492525835d3e767705de6cff49c3a038b4b768b302e9bd71d25d8886a1c7c678dc604c645a056940b70aa086683e6c80a0f80fcdaddc6c65555f2770dd0e59263da1722cbf6fc64fa68fda4a36c09e9023a0dff4072ee1b2a876bd4c505eacb512e06f29893d736261d00aa3ff56abe267f680f855a036ae1b5f6884cddeaa8e3679c15ecd1459771b88555dd4a562f3e4990d7edb6fb3f29f39ce967ab03574af7e94b4cd16b67278d412e2ead48ecacb6535c2c9d7f9529190439c5629a8ff6c34d1a28281ffee26fdf856a056ac4d64284d26e2d19d4fb99066e966d4fc401f33b18c1b0d72e439b25f5074b4f3a020b1ba3c94d5fabffff795bef10799adca52b893507b4b4367d6724e9b9ada3b9190a06ec711ee13d913bab46cfd615914ccf856a01f2b0e22a8bc542a934a4e459b8e91725687ed5da13748ad94aeb17524411602b4f3a020bb51e3896f5f735473094765f1f8b64548c9ab9327804b487d837bfb32c3cf9190723c5c86298a4b99d436b0de6959de93f876a0955f0457ab439b9f4b15dda9497eaf9ecd6963dbf74da2c51ecd821955ae9c36b853f85180a045cee60ae09659bf5f2eaccedf67490ace96654ef0505fdcd27ef867d0b2f68780a087847a340d57eeae7fbfc972b7a1ed7880191cb88b9e76c9c7c0cc472e26732180808080808080808080808080f856a0fac7cbbb14065869b5224580430971a0216e98a78ef2db9f9baa7af62123f5f6b4f3a0200e08b9fab50def1c8ae0ad44dd6bb2e992b3a7dbed7818daf82440eca808a79190a0fd1887216c9620a64a6e41fa4c345ff856a0600dd1fb01dd454ee579f34adf14158573e9830a7a79faf4d7477a5b7e15d1cbb4f3a020dc68d1fa04172661606a74d732819bb4d8af249a7c6c5d91eb5d17cce6da709190a07406a455df4ca89c7157ce24201690f876a02c8933c959c8670ba40616e739a92e6a211be8d8525929fa9b1f40d03323efcbb853f851808080808080808080a0685c7c2d67d4135c7c31b6ef59f25e693db934ea9968b0c7a1e835fc8ae71f988080808080a0d52ddb4ce2b7dd123ea5788a701bc30089cc51942f64ace7b000cd7c89d8a95580f856a0ad120a4993a5e5ddadc96299eb3cecd605dbaebf50946df6219d685952c4f470b4f3a020e248d2ae1eefa6f91e6b60926386cdec846024b9c3decbf704b26de67d8938919066ffd2c92d3b521444069cc15043bdd7f856a094aa3b5c3dcdf6e7baf220b040370ae5522f52f87bc38ced3ed95b7e6ac0c0bcb4f3a02018a65f4ebe3f9022e7ca55d51aca34441586ba206e29f3544b43f70089f0c79190fc496abed83b2db7f9f5a574605880e3f8d6a0d1618349e6813f5cfc0ae3b99ad6873d060a114b17346662f891ac210ac837b9b8b3f8b1808080a007ccad3194eaafeb7460acf796fc03d3f47fe4ed7855353702fcfc01da0bf8798080a0dfc0b6993fb99afc1fea1f2353fa6639f79faa2fd26adcf5758936c1c98a451380a0d9e5ea4d5e838fe45f2f0885a9e68244694bb817ebeb923fed8baf8802c4e6d4a0f86f339d1058feebf6a3402d0ce64e02c325f727dd8c9cbf280ea192970b756f80808080a0542f5709895e3c35d1c02c0a8df15b0d46089fbaee4feeb421dd2ce499e3277a8080f8d6a037eddf9c5a3f10de73d62468b38baee49389b645037e4fca953872de8d2ae583b8b3f8b1a09b2cfbc18dba6aeacd40556e0e53f369b093627df7eae35595ee25c4d49723ca808080a0ea57938d6f6adecb3fe7da79e1d92bc7d0044854cc369cce111a8b3abcac85bd8080a061a32707b1ec79647c453bd8450533a7da1205d9d0767ecdc5e16d91c6b02fc1a0466a117cd13c96b18818d49859d920201e3917676bcfe88b91e5776a01e79fbb8080808080a0a3371060ecbb55130ca271e208df30204b6397d8e2243aa867aeca33c9e0955a8080f876a013885e2135b874cc911fc7d2e634ea5a4609909c77052d7866f632cf30860f90b853f8518080808080a009334c0a25eecf4c9e6407db49c7ad8f72e12552a8e29916850d2c41d62203208080808080808080a0b9cc52b39eaf087d273375174d57ebe5ff72641261492a2c5fe32dad88ab96688080f856a0cc833978e1e833773b84d44e6006e269daf282e398623700b10ff7473be4e8c8b4f3a02097ad7c7175976d0a000bb4a5fcc8188a5f863aeee161317d37d19591f460f59190a0a4ac19dcf51daefa0a947684c72fc5f856a01c7ff598db30daec33600d09269afe7ada647ece3612b702ac5679876061d651b4f3a020c1dced084213c05967ede93e35cf3596b6be5ccb3586fb0552d22a836cd1129190a03410cf24ef75ff527e74e050870b0df855a01348d7ae5fc621432eb0425b0aa7d937061739521d86a841738c8052cb5ecaf4b3f29f3856e897bf71ef4803a78b94b499d27991a5bc479be8a074498ec8c2c835279190a0c4b8687c3305930ebbb6e4739dd4b2f856a07e455536af2128bccc47b352d1a400a7d75e0d1c545cf3258453cb25a4d24794b4f3a020fb25d0e55776100e595a7f879bb8d56aab714d63ee6bd7b93c99e858361b0891908916256fd5b13bc6ee8db13140505e51f855a03601b9d51bf36810e943a1a5cf5fe72e688dae218132306130138b5d42408cfbb3f29f319fe1a7ef2face250842978e4ae1b8789549fa03f518b68d874c399bc3f4591900f094353e6859ed3c3ba95488ddbdb0cf856a0a00d207dccba60799f6fffdbd7ea253543b1afb6f3846e7bfb5af2d01cd56d2bb4f3a0207b9c96cd2abb41891642dd40f3128462990a0cf81a24d90f5a532bda670f5b91909fbddf134523c5efa403914f7c4adcf1f856a0d8310fccc8b094655e94574a74d633e0dac1f65b289b786b145852ecb1fb8729b4f3a02099c1dce788770d78f265b53fe0858691159e741cc1ea35aaa6c60c8c8a1a0291902759c01b70dd3ca22cb610c48acd1a0ef855a09b361790f433c5d6133b1b8997ee3c49ae8cc0e53dd754d3143e40847525414cb3f29f3c079e8d0f6144c4b7d3fe03a79d7b46dff37d735ff6f304107b2acabb8aa29190f0b5c3ad891553ca6d8d4f6fe1946a82f855a099ef5552d2775a94cf5157e138aa7098f80aac91f7c3395a0c8537e197659898b3f29f301a81c7d6275b65fe2f0c38ff30df941223eca370814002ff5f0db9feb6fc9190838bfda00052ffc69347073094f24df0f856a00978efd7012105813bd133585ee7304725cc07f634404d57af9b22bed33e14abb4f3a0200b0c3cd38c23984d65c40f90d3ea592a9c5f39fbc7bd05ca24b54b987bcf1f9190a03d2f7fc9f53b8513691b3d5309c704f856a0795c6b220a9ad547c58c5c7f03fa6e1f6e1fa401ad11eac5edbba04ec15b03dab4f3a020c5ef3f9174eda80f0fae1c9a0e61f4c35dca1add27305bb799ce51543c2f309190a0725a463c7dd5eed6b27cdbbedd0112f876a08d29ec066fa88f3fbeeca49876d4dfad5bc9627f8f6bf04e37bd701d3beba2a2b853f851808080808080a0455541820217c123eb1a4e995a0dfe2d81916d4202f892e362221651cdcd6eb8808080808080a02861d0039cf950b510f0f6ac4be8f0c4f5f5b406bc827b037f0e9cc4c9a444c8808080f876a003645975db51b49767714792dc7eb8c0e63d4210ed3b734e0cd0bb80ecfc232db853f85180808080a05bed3de7860170692f1bf4d25991625a3c3e9128b20ca1c16d106a9eb53de25e8080a09fdef45a3102f268a7cdfbc2e5afe2e77a629c3bd30c062af02f9c908fa2ea4f808080808080808080f856a0c6f07d74b36b9b59b2d1d92016aed4fe72b45f5db36473b9ef8c9b8f2bb9eb82b4f3a020bcbb6e3622b85b66b6e65d1440fc8b918b05cfdd8b1b21c9e6c34d49b569929190a05bf4d1c9482130810617277169fa3cf856a0db285553fa88ad42ab1cff6821bbb8972371f6f13cb18e0c9198ead5330dee10b4f3a0202cc07a47058b77aad1518393326f43882b2cb5357b522ba3c0d824fb41331b9190a01fedb4e549efd13f406c152f8250caf856a0fce72e67195d52ebebd190967c18f893759c7061811d1d5f6bcb96223a193b20b4f3a020d698c06198eeae263f6529042ef845acca916a4d3774f20619746293afc8869190a3ea6fa432cf8a57ef404ac5ee8deb32f856a0cceeaf6d578506fab791725a471cb242c68c7b550f9902ef7159f94230144185b4f3a02050f85c51a4cd3c5d0bddaf580cdb6221ea15afb8ad9d6ceb061d8ebafddf169190a037d06f632254d77be16bb3c5f428c3f855a02eb8c9da8a15c67f2404dc0f0e0a0977069586596055375159510ae62710b824b3f29f3945ce35a3eb27996b5c9186a93e3deb0ae27c2bf0a599086ce18380756efa91905b581aeca5e78781efcef4c957a7a14af855a00af169f694a0204c2bbbd4cbb7a7c0c0030c1bbb89585f038bbeba2fc760ab98b3f29f3ca938465fa95c5fdddc58dd3ea55a7ee6d45e4904fb604bcafac894bfd0139190a00da8071a3aeea71737c92f909535b0f856a08e67b7d19bdc0a0947b8a6d0c50a1fdd297b40e08d3c21295d809b0217b42f1bb4f3a0200c06d0de54bebe8a4b99e8440ced39e1ab391fe72bda818d35325e55e73e589190a000912b440f6a5daf60f37b06b4b85af856a0fc87d057d569c9554255a0667ea790ac17cbabf93357ce46cc1f7d866d8cde6cb4f3a0207453907317d2cae3729228861bb611d9de4c023065986284742309dc7e216a9190862a10a5b24a5b5c533d14489b92a54bf855a0f3e0c5b650e2da5def7ac14737330cf78010ed6680a362bde36876cd21fc2863b3f29f20f6d14146d06acabad0bf828bb99ec288c7b98275e506de9958aac9a20e839190a0cd91d0bd7937032c0b20b73decbdd6f856a0db1ce4e424839fc809bab015def4cc4ebbc7d5e39db93329eeb223425165ccf5b4f3a020e03206ae4972889c137db05f252d811b0bb3ba175f5ba9d2cfac438f1d73da91902ba158587e9bbb709172ef72d8156e0ef8f6a0be11ec205ac98f4a8e06ecbfb6acba323ea00416761e67a04ac21db5edaf9e09b8d3f8d180a0189716521e01ed528796ed4254db20d40e8a2210d8c9e5fb4847a5939ae67d528080a000cf4547bbaf5d1702c1ad0c83706397f148d6e91837ecbfbf211a5d0ed96658a007976471676eb57090fc1bd6f7e5b6acf79592a53f1b2631d4326e66dc6b41e880a07aadb6fc6a101f0278b15319a3e5de0903b051c2ba87a1dc604217315e55ec9780a0c66c6da4a0a9089fe766b11638a898d94e3f2211d01627193e1f104b3f09d3c98080808080a0c2189ebe765aace70627396b64ef0a50a65a03835dbf21400b9d479bd13e408180f855a019f5d07cbc29e6d520561bc52bc3317494a51e2110765e33123ac7e420803bd8b3f29f38d27b068f98b6821d87d414c4b8b8812e48529fc7f2faa886cbea2f1293d89190912df815452ed5a4b8e601c998c5c5dff855a0bbeb99a001e7532012244c5eed05ca277f8677358d5b9df9c21c791935fde666b3f29f3e4b4322748a30d01b3d6998e39e0f99ca5d7e0515ee16dd08927d168d365e919041872f648b51a5ab49a534a0d440f62cf855a06cb49fe7a2e524e2c8c756a42bb380c7e957683477b3e23e45f9e9e87060b49bb3f29f209aaf35dd47af6276675480c471c0705103193b5846bdbd9b34ec2d1f24539190a07721ac7826c585b675bed7394d8028f855a060bd5385a838c68869f49a7aa71d85a8a2cba6b83bd6cd64256efbd2c1c14649b3f29f202825e7ade676cf281d007e594d37954f5afbe2d777d0b9297f35c1836d069190a0ef004560df78f883969dd3626df926f855a0758a094be7201f66baf4903b597a9a8944b0e6e6f0c54c73ea2f3e786eee3646b3f29f3318c04c6d8b9a19d400898199c6072a33dbbff718921e9f51188131b3b7fa9190a010259b8e42c408e6b3d8ff5b6fec57f8d6a050f4c7007267814a33d2a8fe35e1b88c2289d3417f620fd1bca860247c376c16b8b3f8b1a01760bdebf089437225e92799947534f492e7cc4299de7f8182e7eedbca01a49380a066616365197170703d9e6e51f23ce102acdb965634c07e460858966e98879601a07cda752225944feaa452349dabb8d078c44feda7302b9cc376de68fd2e2fa2f9a09042d896f8fcc1590e04c0fb3276d44b86c10e269518de14dac8876a90476bbf80808080808080a0aa1c596e3f5b9c697826ef0e368dc25e187ac64b6dda077759353e09886625be80808080f856a0dd0ebc1e02ce5c39c9793d46bc5dca663ef5276ecf68805d6ce51eb405f7ffc1b4f3a020074a110e2c62f9727e781dbd2ed8376079ebbae9e38d416eb408e7bd5c32869190c5c6f99930f2db94f6afab2d03c387ccf876a03030d5e273742ea2ddb9f1ed780b732dda81dd0659c237d92ac9c870dc8ef404b853f85180808080808080a07162ea81221128d80e0270702b3b4427905eba381e1e1e8a0e3ee26c94699d45808080a091c3563caf8f76d7c44c6b8a291bb148f8c97f2ccf225b62ce6c5b780c54ea278080808080f856a026598322ae014331078ac5c25aef16cec574d858a535de77360f46383025e8c5b4f3a020a478ee1343878f1f6070fd398320f52da2265e8729273b1194ebeac245a1119190720986f93e79524284e3eb69ef459bd8f856a04282f2b6140da10f3cee34d32b98fe8ecad74bb98514ba7275f4ab7efb6034b8b4f3a020b6ab82af7f2a820e23f7771a5bc6c147454ab12cf57444e3afd39ee9eb19139190a0e4cc383be0044f367468b9c5ed02b2f8f6a05c8f9a2783c1593ac68c15b5bf1ce29b8ad6feee3b9c9e88f17489674efe76c9b8d3f8d180a08251ca9f60edc6a3a9b7118c3a0a072585dc626def95b6c905b8231de6b6c075808080a0c8064ca792b4314403679211355d6cec1262278be142501695482556ca93ea8680a0c09411e2bb253e3c1e97fb6235cdae38bf11af1234bae6accbb59e09890a05bba0a9fae9835694d263193f82d2997d3278d135f261be4f3f0fc58cb44da8435f73808080a02472f0a4bfbced328ec356be14db8b5feca85331619aa797a6fb41ffc995b7c880a02afbd8ae5d5ee744cfc352e2e31da1cbdc68f3a8b0f86e0aa6057675ed7c4de38080f90138a004853709c41624bdfb4c20360d5447aa9e2b5c6da6982f3e872a11791c4cecacb90114f90111a0049632527461eb7a74750258a02a53aafc76fe29ecf6d4372c3d6f733124c14aa0391bb90e7958bccea70c2cc8da6f7e4bf19717eab7fc9cbe8ffb305eefa2a30c8080a0ea916513a029af1f8f2275d17a442d83591e445f529c4a8c3e4069dab35de706808080a0396cb8dd55590620a8ddf80a083cf782c176fd22912c3b6c59e7fc742c83468680a0a0a06218bed9c7ccc69f1fe8adbd5a573cf6096734ccc50e9a7930ad821865cc8080a0a9a02598f858b93d880c08b3d85e1c1f0dd2186ab2d073e4be9da8aca9a2160aa034d83628b645191c694f11a60a4aad830e6f81d8b7196520ced8146426095f07a0aff40ed122791aaee2c940e733552989bb4f817b2ed7b7d84ad696e875d6d7b980f856a0a44881d27be8f0727269ffa3dffc84f9e81855b9da1797f77e68ecb9789fcecfb4f3a0209eac2d44fd38e83247bde6107d52d413757b56e1ee828bb5e4856cbd7d837c919074da540ade4dc522afd5eaa85768d23cf856a05c4e13acda5e0f876687f2968a2c204aaf13eb0f3643c30e20ef7547d1933636b4f3a020fffc970b03556eb993d3a73d137edacb47c53c6ab7a3ba096bc0335fcb4cae919058d7c42d5d64feb122ea4dd0ccdfde86f855a06e03417c39d974df2b0f9d1979e04a9d0060663174933d2a4628ca5ca313cac4b3f29f3f36602d21b093355ea01a4239bc0394673a0755be608370731336018a4c569190a046fc0ca4160d184be461939d2d0471f855a06cc468a8dee37e84433cce4592cec44eeab92ac6ac16b771305a30b0b0cf5cf8b3f29f36de13920a777b43d41f874472b69fb8bddc7a46ec11c746cd747c3db77d8a91903e3be1a0057af3dd7388d6d672640c21f855a0bbd415b25ca9fd96ea4194e019bb42398dd80a95cf49a8c8e2ceb9c7234e13b4b3f29f3edcd793d6f636dc1162ebdc53273d911053562076d7bd3945ecbd3e9c82af9190244aa1de7e38b135c70b51b95b1e1023f856a0654bc4cd74dd4edac8b3db933744ed090efc59073ead2c3421f0b1853c3784c2b4f3a02013bbae4ceb6ed0bcfaf9cbef6fb02586babb23f8932787d8c975914da196c19190d0dab1ba79d63a35322601dd3e08decdf856a0182cdeba4a5d84bf62ad70adcec3ac2eb6a3a37631348190f0fd702248a07be7b4f3a03272747956ae87ff7a2a4b58a3f98859907a511fc3c9e4cab430fd8dfbd504ad9190a0909e96e631750a5cf5995b65783a97f876a012963e5602bda75a0bcb8c90379bad3539515f9128e68b2bc7554f1896ca4e39b853f85180808080808080808080a00f367739aaa7f4939049b4a06890b3a3a77467033f185cb6eca730fce6f713b380a03246f895adb5fa601e78d632b31f13ba8d994756bb86865c86e2388df7f9706c80808080f855a0412605c025a76e01ebd84c85ad2697a41a7839901e8b0d25366f24732a355d84b3f29f3f3d85ecc359bfe08726ae3d9b2e22e00e4fb874b1f5067f87bd5b057b439f9190e242316b567a64f5da28cda4293809fbf855a06da23c373fdf4c496895dcae617c7dff19085e33f09e357842d7588024fc48d2b3f29f388e3eabc485e180f9c1af38835f5b29ec5efebdfab7d24311bbf69d2a971e9190a0ccb37891fbdff7cfafa67e7f399d97f90158a017956bca1da65e5106ce93e7b8a71c8219066c4ef8c63d7dca757dc290eddf9bb90134f90131a07db488e8cfabe2f9717abc3471bbb0b1baf1f8df43cab83c09aa7c5a3bdca8d9a0025b9c0a3010bb99ce2d5c6160d347d9634ac9511db956771298e60e3f241919a0c930de9d38c47bbabb68b95563d363f9c605b7445e8407dea3dc4a11cdc407dd8080a0aa35378d12feef821ffae31dc7b3265931a66b5b26a458d5feb8ab1e4f53caf6a01bc3ede86d8d639427bcae0ee9cf4fdc8269b1834fec1a5470bf6d61dec6bd0180a0d9e65fd4c7ff6b877d8fdd0dce1c14c8ea1b7bb021b3d2a488f4c2a0ff7054c280a0078cbabf1e608329d387a7d9ae3f666e32d31ece03e021b7e8c16794167b882e80a0e6731a0ea86657baf528607e72b1ea83052f9162a580fd1180304d881085a1308080a006113c3ae43309fc4b1a03bfbb729502ed93d7d31b3d90c019fc956a51a2941a80f856a03c5c54a27633de03c524bdc3f4e01968ac323c928a815790a4a6d6b47cef956fb4f3a020c5e616d43b2354cb5a91209c6a7305e4360d069e107336dbf435d9c7b387fe9190a08024faefbf2a5035ae74b95102b4fdf8b6a0b62fbaa5c0b16491f50d14d25ef45fb968540f2e669c03002291e411275fc5abb893f89180808080a08a8f541b5eed3db7f34e469bb74bc173fd951c3e63e773d0b9914716ed33841880a0da24d83ff251743716406bc3ff3911854dd39e5cb1668be314fdd84cb7270909a0e9027df9504f47bf6f63f14d56a9ef7216cf4fe8c3100fac63c7467cdcaf6a6380808080808080a04fb8e5703ced053cabb71ff1e05fc8febe033f384129eee2ff26b70baccacac080f855a0e114df924af4eccdf78618f1c359129e413f1c90c36f72265d7ec57ad744bf93b3f29f37a5bed6b0adf940ef2b39dabc3056bf711edd63fb8832eaf2f4ba13b00f449190a07bd83ff79f6a511f019c8324c998f4f855a06078e36cd63de575dd25cb2cf233827a851a8ac91b7c10e1e06a8c6f18611d47b3f29f38e7709d461d463ac4823e376c52d7d0e086f61f9fdea32473a9ce6336666c9190cd3c108a2a51a7e911b14f72dc4613a8f855a08a17f861d2941b9537bd9a87fbd76fe2f30326163e4ae42f693825ba2e0aa2d5b3f29f332c8f4f4fdf84b68e1d95d020ef84ccd8858431b0bea92ab48dab6924d4829190a0908d0110c82854ce0750473b82a21af856a0a5d585f033519cdaaa0a2cb095be0b75229e455abb5ba854a8af021b0c90aabbb4f3a020a1dcfc5195002aa8f368287abf5f8bc81aede815d301f207a7b37e948a6c179190c198779b6d22926fd46fcceb567d8198f876a03a269a3c32db88054eeb3acf03aa5ab89a8c9bf93cac53e050acd7eb1b4de10bb853f85180808080a0bf3cf6789998ca285eb774ab6bfa9c975936564b2192fa3106df65d3d9c9b8b7808080808080808080a032c1caab6c4ff4c01301ac8aa40806d617379214d293fc0e888e190c50ed90f68080f856a09299de2d468d5d7928212d5d67ea356ac9dd0bcd055a1df14138b748e0cd2fc0b4f3a0200b6cee850a00880fc62ac6279d892cba4f489643ef3daa9d913266e07ff47e9190a0ef815c27b4e00bcfaef644a87cebf6f855a097e3596084cc965435ac20c3ec836550b467e885468e4804daa7e0c78d31780fb3f29f3b69fafa0b845b63a7f55ed4f34ca80fefff1b9aed4c96209df0aa5e38d84f91903502fccd078bd1ff0321ae88f8ae6521f855a0952bb5f66abe416970ba8bc15b5a6fe62c2723f221f9099b2a7d876cf6d34124b3f29f3c950d4d1d0c715c575369acda455956af50c2ba36c3dbc376e5e00e8a392f9190a0e789c18a5761ad66b2538bce24e76af876a02fcd0083007ccd84370833ba4041876ca47ae2e7df3081b568f8ee7274f99276b853f851808080a017a034649af716fd9a46a21078e60799d2f9658cf35dfab8979d5c4631d961f78080808080808080808080a00e198a3c519117f29f4d3480c5e61e6ed7e2476567830dfa6faf663b3de7009b80f876a0ab1ced1be7482d10563fa0ac4114f7276fa1dda5c00ce521aec74afc8f517cbab853f85180808080808080a0e8ab6855e330ba6b52b3495ab2d6acdeae27daf2a61a2c56e76e1d75bc4d4d3ca0b76272d1fc4b6df3c24c95460bd0de85e7152aebb1ebf2c24152ecc0e32fb8b88080808080808080f855a0bd24b1795b9e3fc393c5955c3f16354b2b9c38cc8f9278d5bbf2f1b9722c3d6bb3f29f3cb3e36acfbb067096c27bf680e6258e991ad64da171ada6a35ca46a2a7d279190f2a4b18eacd82be83c1a1fed262b37e0f856a04b5006baf9dc32821f41ffba921e16506aed63e6aff2bc1b1b376b1f564d61c3b4f3a02017e1c952cd59537681f4be6139e0302ca29e4fa74ecf64e8081011c97503539190a00c172d5d18a9329dae0d4489339c87f855a038c6c8d67ffb9ec539035ef124681cbce8937352a2c189e665a1b0a6d1e0ffceb3f29f3e9944f3bfff038388fadb35f0009874823db1fa7ed5fffe6b44ace05bc89f9190a0e8dddbb3f2b316c091707848fa374df856a0ad48c6523d698e833cfae8f8aa1fc2b1d93c44b45c0b211d5a8c74b85325bd09b4f3a0200fd7bbe5bf5ed33f8b2dd4a8557523597eb1deb86fa5ea1a07cfc14c80660e9190a30ab1b435c557c082b485c1f409805ef876a0cd6df92cbd16bb23cd5e370388d1b79c4cb211a44f87691ac802d689d7f6f40bb853f8518080a01d1d33b67918d16b94a0fb8e5982efda404b42fffead0ccaf62b1bf0da0790db8080a0694adffdfaee7bf7dc633ce5133da351cde602ed1e456781a6c68494de7be3d18080808080808080808080f856a0eebf7047aa5be9758b113a329398f56904ea148a22edce37f50b572e462b2ebeb4f3a0209a90ca74e49312ed4cdab0dbc74c0ce085461d511b0ec25ddf242f75bfabdd9190b95603ca47322a5ccb7bf08583c88b11f8d6a0f65f6dd75db75e1867df81c36e476d259759d02e1d05b43c920cf1a49b7955b4b8b3f8b1a089c10fccaa99b8810a1a44d3049501038f273ea161b0a2b7d3acac09c16c09a18080808080a07c39b7d731f3fcb33b261fe46341193a232e9390a17b7e5610fe420932e4ebf9808080808080a022b160e86b30748fb37c258928aec860119a84864bee8c8ed21e9a2ccaa243c6a05c84ca75e6c6603aef1224db6077ea05720c2cb200c2ca0f3d7b92578a3beb59a0842a25a5c233090004e86efa120df9648d0ba37b3409c43733b7f98b6cbd1b0a80f855a00bde94f36f96c32d24bf54eb1ad16d0d739a3bddd1c30e4f08b6ece81c70b8b0b3f29f3259daee149f0ee1f61a95346cafca2d11098dfeb71b5bfce9408a4ea06b0b9190a0dfc2605618cc0c658c6f5a04e911a7f856a0165b4628ba2b55c359c01e096b1a23bcd1c3f38eafe4f23580df05d151cd66cab4f3a020bdb88fb9320df4ae6f27df2a1c58edeaecfc83654d083202de73a8edc1fd7a9190a0c046bd23c852f58e741f3ce6d975cef855a022fc46ee85dca27133ab94b9dab7aeba106220f90217ffca1dafdd83072af61ab3f29f31f22ff575793aeea2b96e37597648de75e90cda64cc4b68882736f9fc6d1f919061f325b78e91cf5dd679f69a9ac6e2fcf856a0e03c879e23f9c5f07c750f984e5b442018226fa76864b07726688dbffc158dcdb4f3a020df72ebc7815d6f739ab9d74676a5a481310649986bb9bee1f8c3f15116807f9190a0dfa4052752626266c681eb9104436df856a003244efb51db9855c0964cbce4bddd7d2091b833968e67cee6ed2015208c537ab4f3a0205e25317fb1ccb6101951194e973fa61eb0a5ec0d0352fd69bd953a9875b8ad9190fccb639e86aafd938118d1ceb8973781f856a086b92955a5dcf11d1d41f1c7484bd98b51323eb3014ee430e1a9ff091c316b76b4f3a020763afb94a20e9411e8574d134b12e51d2ea4f2fd7ef087c202b1b7271df1f89190a0e62b6a13b71e4afbf5008faebaef01f855a05b5e5b4f004c4a48f9282e213bdf81639763ad211c0a934201c0d5b4d4b454f3b3f29f208f6a170b663ecd4d94734504263968feda83af7685541cf569047924e0389190f2a48dd6953c1ecd0ec19b1e322bdacff856a035ddfefe6a302b96361e7bd9cf4146b8d3f588d7e98a67fb54796a356943ca4db4f3a020256ff50502d1f4b1d1fe8052e7565bff0501c4d5bf2e2804f3e0d9816ae3709190a0afa01d8278b8ef60c20f7302f1e2ecf855a0838e37ecc3075c29565a8f1e20ce8a4315845db9cb0881340fb6370d162d3e94b3f29f3a04d0986cdbf5d4544b5020257671e0150477027621835b0e6f3f21617da591908d916edef76afb17b1ab242396620976f8b6a086354c0b1aa8b9f33fc47222ee2f4fb312ec1e970a9678b6309e8858762f3146b893f891808080808080808080a0de6340047cb9ede82bf2a6202ae60d894124335aedc750972ef2ec0403c0c2b38080a0a4e5c3b7098b57c72b991f90a5abfb9b975ff3681d5f3c821f4b2ec4e652c628a0c508b8465eeedc2dc7267c1463e30383a0a468ab48c786b72b98341b1581732680a096713de783bc6ac79cd7cd1615abebc41d335713eb814f08a5296b5c1a4a84c380f855a01e19437722233bf6fce9f3cd3d1c5f64d9866d9cd5d8d0eeb2d8d5e38534f6d4b3f29f35e2ed2227948a427d78d55a95089b07c392d4431bf56bc604891a7c21566a9190a0fb475982f17af6315435df2a900817f855a0246826d6f44560aaed00e8182a495f04fe72e32103d25876dfd78d0cad427088b3f29f30fb2dbb1df4d6da33389200ea98b7d5291de41d807f1bfefe3677deda7af49190f38c1b2c0e36831bd56ef99840675820f856a0586c29bf23f757845be4c490123634aba6e2706cee1998f6d96a4e4370bc405ab4f3a020538c1601966a6e8c3d7da035c4c83fe7b4b4981a6185399baa4cb73d1a38719190a049bf6045bc86ce6eb7e44a2fcc32f8f855a0d2d380017d8a3c16cb551a5fae345c3c3811339bbedb4d84b09f4db82be1d5eab3f29f31dcf21ffc260760a7a8fc97e57c3a475652b8127e4f215d2a3c94de6ac6f79190a0f786b7a78ad13d4040721be01f3616f856a0edea9e33957e7001db95110624e831dcc22113362dcb5d5587d69a682628c160b4f3a0200f132d651e3dcca1e744d09d1ce38eac860ee62da303646352e303fda856469190a081848ba2854cb906d9c14892cb0f8df856a0c1e05b8c9bdfeb9373d09c5f11a2dd2d744a3475a61cd44ecf89e80fef06d825b4f3a020a8f7710228bef9fa8a280ba1075ae7c2a644b0abc8cd68cd8e30ed5efe8df49190964c11d5b4853736f40a0d86123682edf856a0209a136e7a8dda8c3a35b6f5669a55f138460fef8f41f56e42ea9deb33121ccbb4f3a0204160e75b6e1ff6108570853fc7aa9811e22090c55642443e3b57871e3ca66291908a98f67bb79f3d0f68708d47777cdb65f856a002f9dff021023e42ffece3f4c9334bac397d8b0df5e6c239fded497eab253f19b4f3a020adb8dc4ef7be68b4bdb5c70691b0f547c2f6cde3aca2334d525888c912bea49190288f0a2bda324077db6625ee81e03bf4f876a0007127f398cda07396c650856033a313d8922d832a80b48af317d1dd1d29fc37b853f85180808080808080808080a0ab520b3e94949ca7420d05295d10cc92948bd7aa47fa281d6685e0b56435d2a98080a045ec8b42c484a3a615e7f2c1f29de223676d01ff44283f604bfa193047687b71808080f876a080c2c66f07023ebeb01e8eb1604c27ca59e5ffa5dad296ced7a6259f963ab009b853f851a08766d42606366b97e2ac6f55528f54edc16a016725d3d3cdeba7eb19ecaa959780808080808080a079a76d38ad2a0012b0cfcc4e1b201510f37abb5c61e6effeb4ab929f002d438f8080808080808080f856a0ee7986d9651898a13bd4959a0805f32d8df01881bc471875da51b5ce49da4c05b4f3a020efb47b0bde6fd52717884a917372ea487b4e35cd6fa779f084ad9eec8ced92919086430ef9a6cf924de5eb16d96e406828f856a0c2848e6e65983f215390515d4ae946779ad17ecf3ecd75e0da0ecc5fc58e78cab4f3a020ba3148f24bc8515d4f72935b3db036b59e44d7d176fe8bb108546433b8a654919081b254cf536da6e20f9ce5fb4c33d10bf855a055f291a740cc547fe69e1f0e07db384a5e655ab1a3a89c727e4a0eb0ff55ccdbb3f29f34e3ea25517c2f7582e8a46aa292d7008c4dea6017b0e18414bacb56e4e09f9190acdc1e909afec30cdf0df4d28ff14b85f855a0ec438b9f26018dd5e645a911c09772707ac9862c48c17eaf037fc16146cae63fb3f29f37cc096298e6679758edee8dcce9a9c02b086813027fe78ff11ea7f30ccfc09190a0746a04ba771a89fe4d9b42624e6509f855a09bf5df0b513d10dc40e7a7cea721789ccbf7d75a26aa438c54b7ccaf1310fbc2b3f29f3fd166eee9382a3029089efba7b5b9d2dbbe62b9b749c3fb779b5fb45eee48919071b00e436f17a86707b188023acbc9ccf856a03df35ac4bc698b7013facc83a82ea0e525794b345927ce476beaec4a1525080fb4f3a0207e4ae8a96ea4b29e514bc5ecf10a1d9664daf950a1b277f7157ac233151d079190e43e84d89136fa20d140f4b095887e64f855a06101c229e63a2bd8bdec99f2c478f5c35c45a0ad2e7e1d90fac147eb947693d4b3f29f35a85e3c28a07c13e8ebe73a3329afe79644150ddbc4915510b491488237f691901d5587a122e7b80e75b6cce85b3fe621f856a02e133b64986fd0fa7b35b2a9915c7f650886af765e233cf34214aa6117fbe6e0b4f3a020cc624139201ed80cef9684b054ace3b4e8dc49c81e62a17896affd3f5efb899190a0c54daf8d6fa0dd485ea29064438501f856a0628980afdc4047ce89688e1a807d3fac7835ca88da1b2cbfec494a7a62003d02b4f3a0208f4367f8e4caaca8e04745c3ba83740a0dff1afffd4519089b67fcb70c679c9190a02a5e024f2931802ae83885361421dbf855a032854656181ee5e33a9019f6a49f575c8a1e8027647b45c6038c365f1346d66bb3f29f3bdf41bc8297b94d33c3071b2e9aea36e9dc0baf0fb46517f1ced8c12b142c9190a0f29679c2cd05fa069570d5d3e6982af90116a0c1eaa11830162cf98ac055e498d51e368a6dcbf571ba4601019020d54e106932b8f3f8f1a0dcd9ec060d81a3dbea62b7010697ed4e0e2faa85c6402a92f0498ef84b7c2c2aa09a3ef7761d0b903c96d73d4bab5d27e1e9d5a08784c6f1fcddfa608760928d2980a0a13d663af660ab641efcccfbe7ffd5dbf67019845580faad4cbede0ff61701b880a00d900c1dc410323f8f27d3132ca6eee9f1225b28da9b1fae4b8afeaa29b9bfa8a058a6f0661f6f3839d27112ddf86dfee47bfdb7d1d89891f7c4fea9532b149d35808080a0c9851ae678278c9d79a8d748fa906932985c4d7aa15c3be32c130a9d2d715f0880808080a0167edd9cc78c90e4bf3d6cdb45da739bedbf034fc63dd9d22344930c6c4de53a80f876a0aef4baa4fa6aabd7ccd00f4544cc1cf0cc949a958301558ebd24e21d72e18ebdb853f851a03c2e2b1cbacaa97b8df5beba5629c2123c7d2f8c4c1adb1f81b06cb22b6754cd8080808080a06aeba2b6fce843619ff97d520ba19433d48e3aef9a486fd3a2391648599461c780808080808080808080f855a07d4f8ef2681b37ac04392c056961cbbe2794e7828f3dbd0750ba4e8bfaaae88cb3f29f3ceae4862bd53a46df2f2d1cffc5a8b975fcc2672d1abe84fe7da70aa81e419190cf49d2c106ab811c498919a520280628f90116a0cd2cec675736425bbb3fd37bf3dc0c299e8f4cd0231a93d136594b8386cf8609b8f3f8f180a0c86bdab224d904c98f72340512473cc70e1cde3d76b965f9551e2b53c16343cb80a091b7e79d6e72ac21ffe33de23b3f713019873f051996f03cfadc5e0daf29373580a012b3a5e27f1a627ded36fe42195bfd12052daf50413fa0cc64ced9c5ab4acdc98080808080a05244aeaeed7c115c656baff2e22737c800121cc1dd6adee2e963382d48d8fb77a0acc3faac9e76a4e2157344cf8f7aea08abfb9f0910ea4f32d43299d0443ffa5980a0da0990aa361aa1653b3cb5a9bf4eef6f01fce9dc47770c495696ca0d6ee5b355a0fe2f2871d1376fd701d4a5cb3148af0ef580c479602989667fbba6e2dba45ef580f896a0007ed198b150dcc4c083e213d26b8d042898a2f7022d86cec82cb367cba36a49b873f87180808080a08d3f4bc8b9096bfb078ad653064a745019c7ff398ce8fae42892f82a7ad70f5e80808080a08eff1bab17a52c2b834b7acc8996b14c27ed7ac8d091b6d68d29f9aed48d09d680808080a02080c51c3174571459f60853580881aa2a9cbfffed090a8f3bc6511857c5db8b8080f90238a0135dd21b3216ce2d867b4179cd23796511a15d4632289d30141fdee79f1852a7b90214f90211a0541c24cab756b6f4872448b547a06622f6678f9f91b95d2858b9bc3086b0c715a0c50242d2f5271b473e36b5afea94c0985e83972b9f6114f8e581fcc1b497c231a0d589608323b008e248fc03f2e8975993d2e44d95f9ef349b1c807035f04f9cbaa082ddafc1df998e4d8b3292699c6e911dc6024249e44d2a4fd48f544c8ca89a45a0f2b78e1d988669a6d32961881c06b38b43b78cf0f3dee6c5761d2db061fefeb7a00499c4395dfc97cd2230b0ce12727dbd0c7c715dc45be67317060dc9e7ae5734a0ff513c702034e655537bd1bd2f3b11233b8ace95897f490aad85b41c31b1f7f3a0137d8800d89769efb23873accae6c22ccde83090161d6f842e64a1d66a6a7498a0006dd4c3012713034fbac07d7f1599044ac500b348437dc7633bcd6de6cb47afa0baf90fea9ff8b8f43af00cf4c4ed649cea4e58c898c53559aed3c1a11728350aa0c9c40fad920775e50fc93330819dd2874a61100ecdc1c128d24897977c482d0aa0586779ed46f06e84727af5fecd5d3c355e38a230d547cc7115655573b479ddcaa0b2c7596f0580532f41fbf4992cb58117bcba53f0884751f9c6803805ddd86ea8a033053c569f0e2760c720c423c1ca704a4767ea9beda51d337129aeca77ad4e80a01cc43d708f6cb301d65b90e6bc827280624dffa8dfefd36914ecac36b227d0e4a04ef040783eb298ceed76abe55dd480d4dbf8068ce012e2eaddcce6ffb8d9035780f876a09fc4180b488b5d5479b6b5257c122dc7647d3ea31931b1ac71fff9d02e1088c9b853f8518080a09d07b69817466d2a7ba7b7aa4aebae362ce4f04f19186ba3e894ebf56de2339b80808080a065e921e3230b1c66091a79b9b6392b6d88abfc73c0a54f691ed09bff6ef138d7808080808080808080f855a05f05de2d433047d79bed14992bd0bcf4e8d0cdf65cd7f3388901b68a4fba495db3f29f34dba6013bc35481f4ea800c88ec181e866a205bba56cfb8ef21f32a78b8eb919022718053346cb3c2d846138955328b10f856a0c47cf2287e140982aa611b29478c70966bfff3ccda61b4552fa4421d738daeb8b4f3a020822cab0f28c939669000f646feedb1b39b62e4ec14f6ba6c4b655dfcc875ff919008da46b57cd44e47e6cb273e9a4685a1f855a036292961a97ec37ea7f74cc1d649d878c3d9ceca3c48aef76c9fc518aa6a3bf5b3f29f3c1c29994abb6728f6ca568e0e7a9fcd7d1b1a8a7db86633a7a11bcfe82ca7919019dea2fc145df483439274e0162c7726f876a006b37fc0f5218c277adbbc2a12929977b7a4958ff362048ef6893a1ac5a3b21ab853f85180808080808080a0d63b63cbb8bb0ba87fa3fa14dc758292ecff6f4550001f7d548e91acd1667ee98080a032e95a1fdec25fae5db541eebd1e3980bc63f2ff6fe96298d4025749b8c727f8808080808080f855a0b38a911b397a5a4d76ba750d7991002b33fb76355f30a03ba54330d419a813bbb3f29f39ab0c0e0584297b1bb640726e34ad53f4d92f11f246af548d33511247cdf99190a01f3d47903713072089c5915cd17c3ff856a0a9a09ac4bb7e4be1105e32cd0b2953dc5674f98444350089c10fbbd3e21277efb4f3a0206317b5a1ac3cab1437feb39af99c4de1c74dd7b7561bd9a2469ea034faee219190a0390cff91733550dd3868ff9926aa8cf856a03d845b179068319e1c2b18417a7d292c1598a1fc7ff76995bdf62060d604ed85b4f3a0202eb39435e361eed58e3bd44aed20aa02b852990c17eb60cdf233deab3fdb9091909634e6e6cb01dd639fb2a24659cb9577f855a041bda248c726f69d5fecaed2284c2083557f319cec23c01a8633ca45374ac5bbb3f29f3017edb5180ece041c041f7c5bf9a7518518e2dde522add081e71df6c073d99190a0afcff5f58bd469550965a03415977ff856a050c7b4c34c6f0b8b6536cc41ffb085a392e6c3640094bc4dc5ccf0f063648c79b4f3a0201d6456d7691f16ae5a6db2ed38f45566875cadc4d14696df3f9f580e898a359190a05fe8b6fb1d07a8584a98d49c266b95f856a0decc3bf537604389a2b68b888d78cf2b993dc2825fbdd91af0ec04584da0a20ab4f3a0209b859d6d942fa370c12dd2938406eb3700c810b2775923924cb7a8f1813c3d9190a0e29f33de69290fddaa983777ade6aef856a0783296e8e0a5785410a4d4d6d9f90ed610a1b179def0ce3a92cfb4e9d4a809fab4f3a0205d2e273ab2e5c9c0f9ae7a71f05246a46295733745951627c008a92ae0024b9190a0c6ed9486e9137802d0acdcd9a04992f856a0a7dff3aa298a62adb85491a97a9eee8e9f8dcb060cff685183bf162733673e59b4f3a02041556e16474fabd5271f544e08864a4cefe31084f437d744f542bd2dd160959190a08e8698d162f60c1c9cfe0d6c73b11af856a0d78fdb96b36398000b81bd80876197a9de8f15fbcb580fc79266d9ca9678e2c0b4f3a020eb00cc36aedf6e1cb35f0bfbeb6294b303021a86f7a0548ff2f7885a7d50009190c17649b2e82327319337e0e2fc4f85b3f876a078d1541df4c2cb0d8fd0ffaf1100c794f7c0cf4e4fa02caff4ef9e1dc86340fab853f8518080a02614a52440ed95cf875d74f2a8f67014c48c7c27ecccad33f9be0197fdad5d198080808080a02a502a104f24f1c190f23c447c4bd7d9d27bda878e8e65a8bd40d6f2dd9713278080808080808080f856a0cdd83d57fdf54c040f9e591e1192bd5712ebeb9ab05f552747cd96053743acdeb4f3a0200e6be36938a5f9d05c51c1c9123a3447b9a9b2d70886fe57e8dacc1adea81491902536383e0a0966a2f8af4a6e9a1c2c11f856a0afbae8f451a5ab19f6fbe5622f51123c40658b74a9217ae482943ca19eb279aab4f3a0209ce4be6565a22bcc6d598a0ca3d906eecb4f9c34cffc3c154670892a5190c99190aa3c467d6b6a7a2353fc3810e4b16926f876a0dd0d09879bb2b85aebd9e8cedba75ceabda5e4c90530c0c6099a739cf8434dd7b853f85180a0649000a6130cd2cb69d32b6780725cd451f4d617f5a74218047b507be2e6b6448080808080808080808080a0366da59cdd2fd25d8e66f9bdd6de89f25ef0dcf98aa0173fe79dea4be9c17d68808080f876a00427a68d7e9e6aa9b6374d47f131bd3925a68a37f6ecbe465b30c649f45ecd5bb853f8518080808080808080a0e5fc3c588fc5db734370f8bab118cc3095d1404e2db420dfb96f196e2dc31490a007a4e976b9115a031956cb6fb02b889334fbc1f55ee0b2454bcd3f95710c7c1780808080808080f855a0b0097f17e36bb378f50a4a3dd29ee5fb4365e83e55bcbe3e8978edf25bed2361b3f29f20a179d2db7e204ed511e5fcc45b8b1798c54aafe44ef172c09b931324568f9190a0120c0d46f7b31005f4c26ba60d9965f876a0da8ba3ceb988da569f04466b58a7d32795ca6f84031c026ecae33010f94769b0b853f85180808080a01af1a0bde7120c48481f13864f5d81ca0d6831423b03821756c909f77fb35dd78080808080a0682c8b621bd2493af7ca2e0ee08f1ae03e57761842cde588d44beca44a48f7fb808080808080f856a0a82b19665b47935ca185a484fd3b34a67f15c3d7fe311dcb302345c4beb8515ab4f3a020a6dd631e4908d1edc583f8866d35407b2e82ff543f1b8eb523e64f245b2aa59190a00ad202c0c7ab61afd556025f709b1af855a0836c99fec866d910cb492939c5e033d654f740666545243023d11053d4a1d822b3f29f30e28fdd35990e27346501108c26cdbd824a6c2ca47d217bf5aaaa5d6a95f49190a030fd8e6a631b69985a836a0d407e21f876a09ed614bcd83aa7822221dd00d91cf94f3d3bfc596a1da30539ebbc939a15262ab853f851808080a0511a726d85fd63c15268ff45759ae6e48a8b066f4d73ce8b9a5bd2a405d267d880808080808080a0bf037a6ac4d6649ea6d2ac159f441489ab682beb6380cf00260da50dcf7a4d658080808080f876a0034c0abc7c206dbdada02b24c26a563de0159d2bb03be0bcafdce3818b8bd714b853f85180808080808080808080a05fb6b885c57d7df64ddece6a499e5fcd438df1fff2d1c1bbe5d109a02e33fff080a0f708267c95d3ede35b8c210c4572d25954feb1b86e7830440779aad9db7b836080808080f856a0e29bf9c46d57600441de803500f0342dd1c1cdbc4b5bafe86421919cea020a33b4f3a020e5c292c24848e682aa111c569a60b3f29daf5a1ecafb6535b4c566a97e82d59190a0e649954342a814332c4e14a90ceaf9f855a0d1c538862786eaac8a5398c1025a1dae5d220d4ac1bffe1e54111168735f0256b3f29f2047936f71a787b183594df83c05a6792033479c6a98536a1d2330567a60d39190a03e4611dc10fce14060722e79618e53f856a0aeddd447d7cfd83cab0c0356b5f2f8f7e5483785c87f0a2c1aa9770ab5d461f5b4f3a0205900f7b51ddc6c507ec68ad1003b1cc9d1c38911df91f1897b577a8d9ae8c29190a062913c81a71b819e3f8b453ba65584f855a089d7a8027c385c45b37c3618740baafecd29a3e76233a81dcc83243e8050a45db3f29f3bf5ae170ba85b590c7d7eabaf4c1111ec6bdc9e51d8b2885c8195247a3ce99190cf92627f5433e7cbf8cc8fc9014b3258f856a04104688801b59418a111128a80dc3c8db3835d21aaf36d99afebc524bdefd072b4f3a0209876fff482174c409f697ba972168eb1a0a77fb3606a5ad82e73025c0a7ef99190a0e51279365d382a7da92a120c1f1641f856a0dee17360f32b96db8fca55e2cd0f31c1d512b502a9ac5eb0b287161994621856b4f3a020957709912fc41cfc9f4d0e1f06fddddcc918c3dce9165587c6337d5d5998f391906a73604e061e37ce722e1c117dd9ec8ff8d6a04a18a3b2fb83af7059804bae2f955e7a0f165a520ec9b01339dd3aeb425ea854b8b3f8b180808080a0ad48790e7e4f7c5fa4a8d28679688d72829aa55aaaee5270251e67c71895dceca03ece79f6f7eabfbbfa1dda8471eb84164e62c727d2770119b4bd0bffe1ca4a08a031351d34af011c2882e89b92bd009816071bd40907513502b068b62193c4614ea02b25e349c54dfa3a83fed3f1320059c27094be3931ebd34c8ce932668e7e3975808080a064e53231c4ec72f0518f1301ad55cb2ba707dfd494a2a80d3356a64f84927ac88080808080f856a0037f87bba25f82ce240afb9d85a46802237bce7bd1c074c83023b27226eceaebb4f3a02032a461fe54a6143d269d3c925687c99ef06a08bbaedd650b72e08fb74aaeeb9190d729c7457ec24ff6bc60f95752186359")).withContractIndex(contract_cab26, ByteArrayWrapper.wrap(Hex.decode("0d84c716d0160e91ba7dddfdadbb5389169d0112be9aa2fb540b3b3137c57768")), ByteArrayWrapper.wrap(Hex.decode("844358ea1e0368c7d37fe232a61687dde2254d3e4c99c797993c2b95fe835bab")), InternalVmType.FVM).withAvmEnabled().build().bc;
    // import block
    Pair<ImportResult, AionBlockSummary> results = blockchain.tryToConnectAndFetchSummary(blockToImport);
    assertThat(results.getLeft()).isEqualTo(ImportResult.IMPORTED_BEST);
    // collect the consensus information from the block & receipt.
    AionBlockSummary blockSummary = results.getRight();
    long[] energyPerTx = new long[] { 121_713L, 21_000L, 21_000L, 21_000L };
    byte[][] postTxStates = new byte[][] { Hex.decode("699cfad7c45003398959c9acdeb06d140bbc878c9e3524604408986b941b8ecc"), Hex.decode("1a3e45a23f654c56b6b59202fc6c4d4cf54fcdd4d484ae2f0613d77f370223d0"), Hex.decode("542d6a225149660617fdebdc96803c8f436c456dd45ea9962ac6ed1549576e6c"), Hex.decode("8821a9b7b5f997e6358b48b0ec93f7ac5213b72e6b4c2e1fbe18954923b26ced") };
    byte[][] txReceiptTrie = new byte[][] { Hex.decode("f90362a0699cfad7c45003398959c9acdeb06d140bbc878c9e3524604408986b941b8eccb901000008c000000040000000000000000002000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000000200000000000000000000000000000000000000000000000000000100800000000000000000004000000000080000000000000000400000000002000f9023bf8a5a0a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee0e1a031fd1dc7157b84cef3d48f5614a7eabe829d8b4367a461d799875dfc347ab8a5b860a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a100000000000000001bc16d674ec8000050545030303100000000000000000000f8f9a0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1f884a06565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b0a0a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee0a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee0b85000000000000000001bc16d674ec8000000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f897a0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1f863a027772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee09000000000000000001bc16d674ec80000"), Hex.decode("f90125a01a3e45a23f654c56b6b59202fc6c4d4cf54fcdd4d484ae2f0613d77f370223d0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"), Hex.decode("f90125a0542d6a225149660617fdebdc96803c8f436c456dd45ea9962ac6ed1549576e6cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"), Hex.decode("f90125a08821a9b7b5f997e6358b48b0ec93f7ac5213b72e6b4c2e1fbe18954923b26cedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0") };
    // check the receipts
    for (int i = 0; i < postTxStates.length; i++) {
        AionTxReceipt receipt = blockSummary.getSummaries().get(i).getReceipt();
        assertThat(receipt.isSuccessful()).isTrue();
        assertThat(receipt.getEnergyUsed()).isEqualTo(energyPerTx[i]);
        assertThat(receipt.getPostTxState()).isEqualTo(postTxStates[i]);
        assertThat(receipt.getReceiptTrieEncoded()).isEqualTo(txReceiptTrie[i]);
    }
    byte[] stateRoot = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot = blockSummary.getBlock().getReceiptsRoot();
    // verify the consensus information.
    String expectedRoot = "68d25637356a7914f84f0c69209b9cf8ec97a630008e489f16b266f14bb66ae6";
    String expectedReceiptsRoot = "511c4a2dba98fc572dd51a67ad7cbfca088c2d295507840bb310d2b6b6bd70e0";
    assertThat(stateRoot).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockReceiptsRoot).isEqualTo(Hex.decode(expectedReceiptsRoot));
    // checking repository state and total difficulty
    assertThat(blockchain.getRepository().getRoot()).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockchain.getTotalDifficulty()).isEqualTo(expectedTotalDifficultyAfterImport);
}
Also used : AionAddress(org.aion.types.AionAddress) ImportResult(org.aion.zero.impl.core.ImportResult) Builder(org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder) StandaloneBlockchain(org.aion.zero.impl.blockchain.StandaloneBlockchain) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) Block(org.aion.zero.impl.types.Block) BigInteger(java.math.BigInteger) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Aggregations

StandaloneBlockchain (org.aion.zero.impl.blockchain.StandaloneBlockchain)28 Test (org.junit.Test)28 BigInteger (java.math.BigInteger)23 ImportResult (org.aion.zero.impl.core.ImportResult)22 Block (org.aion.zero.impl.types.Block)19 AionTxReceipt (org.aion.base.AionTxReceipt)15 AionBlockSummary (org.aion.zero.impl.types.AionBlockSummary)15 AionAddress (org.aion.types.AionAddress)14 Builder (org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder)14 AionTransaction (org.aion.base.AionTransaction)12 ECKey (org.aion.crypto.ECKey)11 BlockContext (org.aion.zero.impl.types.BlockContext)8 ArrayList (java.util.ArrayList)5 MiningBlock (org.aion.zero.impl.types.MiningBlock)4 AionTxExecSummary (org.aion.base.AionTxExecSummary)3 InternalTransaction (org.aion.types.InternalTransaction)3 BlockchainTestUtils.generateNewBlock (org.aion.zero.impl.blockchain.BlockchainTestUtils.generateNewBlock)3 BlockchainTestUtils.generateNextBlock (org.aion.zero.impl.blockchain.BlockchainTestUtils.generateNextBlock)3 AionTxInfo (org.aion.zero.impl.types.AionTxInfo)3 HashMap (java.util.HashMap)2