part 3 of private_to_address.py:0x3d14fe97601dca70806f978138db59f6ac071f85e234a7f2baf2b364595a3558, 0x16c6bdd6e84681ef8f29a931dbf56e1482e0a2e147c1d727c6adb3ac6443df4c,
0x470a872d1756368680453c6a77494cb782e0354e4c77cd510fc702414ea4178, 0x899a7a9c1109acd676145e9fd39c0cb19b568706984daea079449f1b8098bd6,
0xdd6fa540e82e65251cc1ac4d2c9248652528d81c7e3f7570ede9f5ad82b1fc24, 0x67e62b7eb1d3186fe366f1ebf1657e77ec10de6bed7322304a431c460e9b74ca,
0x42dc50ffcba4d624a21a278f5404eacdca1c3969006611ead74de6d963369217, 0xa5ba9a1f66385b1d7ed78f5f160ba853a7a139eca8e01e841c3097e23e2dbc57,
0x13fa2da82de55d780f869499aa3d1e80108547b7fdadf02881ea91593dd08e02, 0x136338b04555da72313356206bb432c7e644afbb19a42b97da5541dc3cb03410,
0x9582b79c4b0aef757d1f82bb9cca75dd5dcbb7a7d8ae7b0423f1ace91646a9e9, 0x22067d800ed426eed4ec6aceeaf8e6a401cbb5c5f13b82ffbc4d7493aa56a698,
0xd06c4851d3c70a443f7c10b672c68282879b56dd3b7d69a6ac233ab9944ee41a, 0x5815fd4c0584d0adbbb0acd4f4f630919b7b84346162ee252f1f84e98b295e6f,
0x85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751, 0x1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962,
0x6b790f4b19a4c4f4f607a6cfcd11df0468b482e009711ff756356d141d5fcade, 0xd03a981b2ff9eb3ef296661f9cae09cba83fa5b47be26b0ab6fff86fc338d3ff,
0x384dab4ac11422c3be7c2d26d15d9ae79340e535478a066ab9955061ecde4cf3, 0xd6e3c5bcd1b9ca43bfb4ed6da2b4c6f01f430a339751ba73b7c796b2252d0566,
0x41149b2c2d7ebed3c162c367acc4f8fe3d2479de85978be0bb0ccdabe3a3e0cb, 0xc90d5b92db7c30542b415c9b9902cf28b3ec7805ef490f2470e92e98339033a8,
0x14f0ec0eb7d415aa41b1610b4e82ed4840355f5c380ecb8b98af3e921e5238c2, 0xab12d53dd4835d80921fc73e3842747fd25c00d80304939d6e86a34792f07922,
0x8a31870949bfe15c8198c1efcbc441a0e192160402521e1f8a4366a08a972627, 0x64bb7c8768f7a64d09577ed28587baa41744365ac3efcbcce7b47b5646bb8af9,
0xeb42f3bb782c287ec41c34678a5a0ddadd1302a756f98e188f6352efd543e94d, 0x234a6d074f25d92dc9a0dd572fcdfb774cd8468de60d6d4240559de445924d89,
0xd1fad4fa4e7c849dfaec3dfe2872a7ba664a9b8205c29cebf8dddd28e3f3d3fc, 0x8fe19714a348fdfe5473f70e858b7818bad37131eff37326ed22343c50f3704d,
0x1cf138ca516820d9a9eec02f6e06a920459bacde8c6673270324e5b57e19aaed, 0xd6ffdaf3171c63865f4372a66b6dde17479eef8fefc77ffbc136ea5d692f400e,
0x5cbeaabfe2b74127f266838c1dad312bca7c9438c7ead6537473ba2e0ba68dd, 0x13ca23b6fa90156eae9386665506efa07f3d96705de533b594229f327dd03959,
0xb58686be5f40d412c875a096849990d937a6637b4a78fac55f6c0e9fb6a8aa39, 0x5632d54324c78c2c149478d454c0a91dabbdaf98e6db347b8fc7935d2b493c1f,
0xebfc69ab340557412dd30976e1f8b751801da99f8effdf279a544c67ca3a1550, 0xe2ffe8cdb99cb540a3df199db7f4fd077983c818e68c0b1951f42bf641362f6e,
0x5fc19db06b8bcc2b67b5bc4fe7f3a802572831ba5a1c77c2ee91ebe3b03b4cc5, 0xec8e84c0ec98c7c66ee2138f9a3a5ef49276f503cc087ec4a3b39fb865b57c28,
0x6ce5c350ce93a8661050b65337aac980e66aa5616d4418e948bbf38e5e8d319f, 0x950d0026e2503c85bed3e3e8cbbe23f12da8f2e00ec5378308ac6bd795cf513f,
0xb88fb70d42ede289deba8a40fd3eea1be10b7fdf4d388948bb4b857d4cb38cb5, 0xd6c736ad46ea32806034bb994b35a8e24d4f3e1227af8c7197bfa7565965f3d7,
0xff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e, 0x493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907,
0x2982dbbc5f366c9f78e29ebbecb1bb223deb5c4ee638b4583bd3a9af3149f8ef, 0xa61b5be9af66220ab9fa5339c7b5bc9d095db99412e3ed8456e726b016c7a248,
0xc745fdf2775f230888b7ff25e02c94b066ce0eefac8feb9fc59054fe79d681f9, 0x590222f2f6b9e5e78a71394c70e818678cdbd335c67d45c7603173437bbb1247,
0x1a28e5042af0c0f6b436eb590497db5860011f4580e1765885289f612380441b, 0x55779a7996c59dab7c78329a8976f0ed04b3e75b46ee67aeb05f606a8452af25,
0xabb279f3a975050b27a59e5eb672e7f2b34478e820cac4815e04ceed35cd0ea3, 0x5dee103bbf17970d9fb4be0c03078ed47c9769059e02f3b6470931337c307bce,
0xfd73c052b194c6c6dd46aca9d640981aec79600917a565ebe77fd534649a2115, 0x620768c1c8178844020abab026f7d6d904f601562e9d421f049cab7ba6ba6cda,
0x3f81150b59fc682827faeaa74267ed11ea9fa1a963e7382c5c2e2f3f1bc9ee3e, 0x19c88a68fdbfa82d4671beb3c47956627623b2dcfcda81603ceadb0c599aae06,
0xc8b83e9535f30601d250cc0bd3f20142edd5eb7985d83242eef0e39621e30a7, 0xdcc7077065fdac7b850e3f17efdc854aacad237b987134dbebf7beb9ff688de,
0x5cf8132dd0082de69594ba33aa56c7ec15eceecf08bb358b6171befaf8e4a007, 0xb45aee5c0d61fa0df4ad4158848c3df6c8946f96c79c7fe8ce63f0909068b883,
0xb3fa054583510d6b9122671104bac7f4ba4ae5fbbaad72303003efcc4c3c18e1, 0xa85c24759340f56b7ba18298064fe6fdaa55a499f10ce542cb11fbee12aa2b4f,
0xb6d5fe4d0d4ba494653e33973c404ed21bc36f933bcfffb10956fe7b26c2d4a7, 0x47f373a13abbd6c14dfcf9209dfffd8e745b7e4e6f5e3cc8118dce7e3ae86371,
0x5a4d46dd65951a676e8165fe126c5d5dee0cb7841228ee11fdb86c351b816b2f, 0x77c92396ca0e60ab0283e27f8f3dfcd6b50e6cc5fb3eccebaf97aeb873e86c60,
0x61c8bbc066cf588706bb1b150029b022ea8fbc8ff1dc76dc50933622fc66dd33, 0x93599e239e54f70344669994b985d3fb6a5106eac2820c8ca3bba9f3b6f10bfa,
0x4fd699b12c720ccd7b977e5bdc62267118ac3028bd635b26fce648cf335cacbb, 0xc6c90ef3f511a0aed9479dbfcdb61e2caa998eb2e8223e6133b2efa88e1ad839,
0x94e32ba57426785187c9f5373ec3bdf1876336c17286c8fa9805b7ccdd6b2ff8, 0xd1b448b43da04e192f1e488662d9e8cb33af042526bfe13add485552ce1af3e,
0x827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241, 0xc60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec,
0xb77f12a7dce56b973e2d7c8d576e6b3660470a9218b87461ef6e44b70cb1815d, 0x4b6f85b14f86acc43f0cefb373cc2e654c42f0f91a44816d6ba3d2bc8e57dbc5,
0x857e31f6308c2fbc0d1a06bd320819f3aa7da6bb7041388634485cb3bb80fa7, 0xf64393423ae0172092d7cc9d1dcb7147172e37043cd7016abd98211f09366b2d,
0x48973b943018bf1247b308b2cb79f956d858d8df4977c5970fe5dad2c45565ec, 0x761f75684f3cdc1b6437bb3a01445af1511b3596580477b83b879075faed07e9,
0x28aaccea56bd60043545c655764a672e9cbb8b78e753d496f5d02c3a09c70e63, 0x2b69322ef81a0e1567a89667c768ebb7f5fc59ce444da1e8b9f03882f057da4e,
0xea1266167f2b818481a69b87056523973416611d0389378833a00abe7b6d6cd3, 0x21a4e2e5078ee3fdaace112bf1145e25b1c9752debbe1a88aae62925f4f450be,
0xa2f3b625a055a66145ddb2c9bceb8a4f92d8f69ce7060aac601dc52f73e674b5, 0x620ea159614c68ae80044a90f32a7c4b9222fa317c33fa53b0938c8e0e937941,
0xe931258e8eb5559c6d6972728a704c170b775a265b4527d4a4d4d742bbfd71fa, 0xfb1e33364c3fdee0e85eb4169c954b40b3946ce1bb5e35f33d9bd0d3174d3307,
0x3c4f83c9eaae59231d98b5c6a3f515f5a002efdb8ecfd386c7601631d91eb056, 0x94479007514a8b6a33ad6573c3b278801982b54481cf6b877425893da05cecab,
0xedf384387f7f42449c365f8de891817b00359b87a712df9de643d8cb548fadf1, 0x72d3b5b0a1898500ded80235120aa6b70f4e8813dea37d2879c436cf6c415fb6,
0xaff8e1288a9967d4e29c1e03e8103baadc38b4a409b993a719061fdbbd86dfa9, 0x8d8b4bb321377c3fd3d3ebaa1fcf53f4f9116da94419f9c707103c36c1d12681,
0xcf36adfdfb25442ca6c12c1e782b4b635f4efd281a275ec977123d425cff55c5, 0xd16a12166ae0768649c2f58b3bd9f207a7547ec25c0d2706aca2788521a0228e,
0xd3fb784528dc00b3e8458262aecee579e40f7ca5a09d338e28f2736b989ba9c1, 0xf894d434efa6b4e7ca7ca05758b70fe6341cedd5c011ade0061b88dfeb51b267,
0x31c80ca26c63dfaee2df82e7c6a5ca26e045d8650ce4adb4fe8540cbc181f79b, 0x92b59ec1202926df3094e4d368f30d91622ff9eaf51125f1f0b9e526d5225400,
0x4ec9300e0ac9aa88ff47298839187d7f6391027c53598d999da96c1d0f2bb909, 0x782ba106be1b04dc5c80dc45184c49bad52e16820dac3827b88a383fa4cf4071,
0xeaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3, 0xbe3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d,
0x3adb9db3beb997eec2623ea5002279ea9e337b5c705f3db453dbc1cc1fc9b0a8, 0x374e2d6daee74e713c774de07c095ff6aad9c8f9870266cc61ae7975f05bbdda,
0x4b72a5e9042f4abff48731c3b85047e229aab71cc52a6a98f583fd3a3f2e070d, 0x599e1d4e1d6ae1cf60277bb36d0f3c10b0b465ddd2948c3de44ba82ee96dd780,
0x129e53ac428e9cbb7e10955e56c5fc69fefdff56963e7caf054e9e0c90ae86f9, 0x415ecb958aee9a29b2da2115b712183fb2a232fd16b3e01b822efdcd1e89c85d,
0xa9fc93fc6539c8e285a6bfbeb5e1fd613ef54996585125a1e9ce7fd84a02591c, 0x9c2ce739dc5387173e84c17a1a9165e5ca888c415fcf7253790addef69bec2dc,
0xaa7121d4e3fb5b786ab499694aaf054327f9ca04e4609113428700a0f85912ec, 0xc690f077dad09509c505266b96a2edebfee134a8ce056cbdb114cb264ae35978,
0xc940017c1a6f9f0a6a7d7ac1209b027709a28bae13cbbc2e11006e0e2d968b59, 0x39d922500c9b862013b8a1bfa5b5742ce2842cb64390c9c8fefd76408de572fb,
0x60144494c8f694485b85ecb6aee10956c756267d12894711922243d5e855b8da, 0x8bb5d669f681e6469e8be1fd9132e65b543955c27e3f2a4bad500590f34e4bbd,
0x1f84bb9d7eed0024ec6793a5f70bf8e0310388d073ee5de6a2873335726b3332, 0xee726d072bca9ecc2547c27f75b9edf0c2bcce2d436dc3a2554428a314e8d52e,
0x3df2d057c8bb9f028f68e0213eda1776c2f22e3e241ecceb9dd95979b1972bcb, 0xdc7eb1c640c86eead6e6b23b046a684b1b91449680194771b2822cd3d65d09df,
0xf13e0890945fcd06ca8157b3991e9c77248446811ac27995cdaa54acdefa98e, 0xadd521f1764e7c5035e3f8b0a7b362db287e705e16ceaccdc08a7769be286767,
0x4b9915533720f934ba48070d37bd79d9775e2680b17714ce1b806a24ffd292dc, 0xe327754961103a226dfc0a74b5f01f57938323c45b376afd433a5ffe57095ca6,
0xdde191a551ddec7db3728a1d2d5826d3e9b38c63c1888e2fa5e1c03be9f59b6b, 0x5b2bfb78028275cbe0a757d61c52e14e8b5738bbe7154fecf6ad962926cb1410,
0x83c403979eb95e937ea4825fff359c5c181c9401bf81184feeed1b3423b43eeb, 0x29575ff2437cee3d0bfc1e46d00d61b295b6bfcab553fb40aff34086d484fb51,
0x5fab012eed836f7a5a16d7bf97b41682a86f57356be46871b68c55fdc9c6b699, 0x2d9bfa70a3c3d144e9ebb41130d62f7b90ab117fea883519b1732152c1c6c3aa,
0xe4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f, 0x4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414,
0xfd6451fb84cfb18d3ef0acf856c4ef4d0553c562f7ae4d2a303f2ea33e8f62bb, 0xe745ceb2b1871578b6fe7a5c1bc344ccfa2ab492d200e83fd0ad9086132c0911,
0x3e419634e156a3a24949bc8e8d396faf09430123677b392b5c8410af3bea0c68, 0x123c59d924b21f7f373cbfe370693062fa11946303cda1abcbb6ff71a45edb6,
0x1eee207cb24086bc716e81a06f9edbbb0042e2d5dcf3c7a1fa1d1fb9d5fe696b, 0x652cbd19aef6269cd2b196d12461c95f7a02062e0afd694ebb45670e7429337b,
0x8d9438f5455d7508eed4a3e62f7f0b576eb7b64c351c9897af75d23c939824d7, 0x3261e0734fee6c2a2ca60bd31ab6ef6f8fb9e2b8326b063d8a004f489366489f,
0xf13a99e58dc72fcb0c62a492d2850704621ddf48f1f433e69a9814c417d4b84a, 0x33c2c8cd0f0be995aa6b91cd1e3fe06eb6e37d4710f2d96285990fc553fd1c81,
0xb72524c558ee54420d4a912a2fe545439360c2fb7428e6208e48071a98d713de, 0x4c51b39a8a283e451042d182e9d694150482d26fe44a5fcb76ffe5259b8350e9,
0xcc0ea33ea8a9eb14d465ab2c346e2111e1c0fc017c57257908d40f19ef94c0d5, 0xf9907a3b711c8a2fb23dd203b5fbe663f6074f266113f543deabe597af452fe6,
0x3de45f5a216d12519adc76e38121149e3049f35bf37210402cc6c293fe3b2cb4, 0xba2a8598405eaddc50e08aa4a97c9106823e28e65a87044cf61e33ac307eb02f,
0x9e4ac64d9ca58a0446ca18bfc1700f2c16937ef9c82e8b559ccbd7512a0c0222, 0xcea45d1d9fe4e74d3080e8df63b300d01c62030f3dab904e16cf7673a4fdc9bb,
0x8511f1c68959be87c1e3fce3748906ae9b67ca86a09005b17234766f6ce4e5bf, 0xecdff5cf91bcd4874c1ddf7ec6aa00232da87889bc5365262fc92944c1789c08,
0x678ac7c0799b56cb46b8cddad61202fc4003e0966be61fa05f0c3b144e735a1e, 0x8514e33d9a5285b7a70ff3d57105e8e597fffb33d371457a363a5f712f7c055,
0x8c5a052e81cf60222cfa1c72ee14ab5957d242818abc14dc31b5668a3d3258ab, 0x6811db4bb443bda1079a80c7904c08c246dae8f9c0d944ade57e0853022d0f8f,
0x64ba9514d8680f6cdd66895d9c5ad45f00006e2933506f8ed7be9770822aa9b8, 0x81273f22a6431bdbb7e07728c19be49e5fef1b6f68307b35e93d1fb9b6163565,
0xcef7f816debd3560bdc63cec556bf137f5cf1d8f1e0c0d84158c2a0abf91bcee, 0x67e74c83637487012463b339c01d245fa63e4b02a172f6ac6bb4da9f81966b33,
0x1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19, 0xaeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd,
0x5be7ea3519f04bc6cbeeaa0344fc90bb8e8462f6ebd890560dae805d414ff9e4, 0x32f32ec3f638e605477f890f655ab7fe0e99c6302119a3094030b07847e0bdbb,
0xa6dc880a55d1f2e83bcfddab67106531c4ff0b508c0452b94b17cbbc52fea1f9, 0x7ef1a8547dc367c3038683a116acbc50057b89db7e68f7e63b1c14e47bc345e9,
0x58f099116eae4e650813fc8698df7f5cd50028649f853991e3fb545f4ddb7bb8, 0x7e07002aaffe111a0d62ff7614638066507ee4062d174302bdec73582e5b2d6e,
0xfe6ba93fea4245992bdc229c78a481ba8c6c4ce874865637c8d40c3f06d6c9b3, 0x7ee918d740539872b6bb41b345413b56d980f1bf05c2e9b00c2c788fa948bdfb,
0x2320b5caf7b59b7ce542842802f74c34134bfc495b9e2b108b613e771c7985c4, 0xc79f943dc88be94318c721b81f9bca93d96f10211cd9eb8d4ff4f1df4c2c6d44,
0x15d5e2f146fc98bfb020c8c2dc08ded1b964806e442c4b64422f10730cf95151, 0xa5b72e31915fd4ec7f90e109789023f9bb204fb97dd8c0f9482a07cc2ff8ecf2,
0xb0f9e4b9b29790b633bcc04fd860cb0f823d8d1a4cc1a1c1413c1606cc9a8e2c, 0x49e82bf1843ade6d41cbb0b906fde3f03350cc02c171cee76c2066c4df3d0db4,
0x84c0e8725688447ad8c7e00927ae29be3814b25241ef65643d7810b9296a5658, 0x26598380c16022c4a087e3190653725ed3a61a981f4f1fd22d96729bd81b80d1,
0x56db6280670a91ec8fad04ce213d59f494b357cf1c9a124c5aa02f29d9d6fad4, 0xda0d3b94db57272450f591016d6830c7f5b8b2a1a31e5cc867a9c0fd359e0836,
0xfed6b1c71a93731d565264e7a2c077c27443419142fe1575375bb5c894dc6a0f, 0x8de2abe6b0ffff0a8479181ae4d3ae231374d5930a3fc409ccb8d72d976fc7e0,
0x125e7ec83933df56bfbcf97e4254a89edab662f5d798346d79fe0b0bca3a809c, 0xe0d3f6ede254cb38887747caf5721a371e4e3b2ef07fca3dda8c900a949e70d9,
0x2a6a4dd992d3cbc70fcef8604023b9d82f1c8e9339720d86db3885f118e29355, 0x8677dfba7c4a7e0c760fdc81e268f90dfe905a3a64c4c76c0053e00fb5cc2872,
0xa1acb3f1185d20e1bf33ce97ddaf3d8f196e235eafcb9bb47f529511e7681028, 0x55a883a61abbb29b6a047588288f0c5a66eecb271fa0d7881f1a463e14a11c9d,
0xe42d93026c927546d9764ec235fae735c1add2b9349d78eb1f9fa88fe148dabf, 0x6413862c6e2d84b0d8b38cebfdf385303272757019e77eb9d772c756811e1361,
0x146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be, 0xb318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0,
0x574ef0ce8a597e24e5670b5c0bcd14cfeefc983c7ecb261911b2365579de5cac, 0x9b99930281f19c73bd6ada0569b78451a260a7bef10008cae59aea6c75a4805,
0xfc696c040660935ff42c899820a142a13d79bbd54ae867299d93873827315443, 0xe0ce27ebf83b5892bbf0e1cdd69677b5487ff486109bd1b17490d60b57d28960,
0xd3d97e799d8bf9f85d909397b98c835d10a770c1aeff8645808c2d74260966d3, 0x8ddbb46376bac95e6aaa89275d403ad3b5e48711be8dc4eebddeb850833c2e52,
0x974af221ff4ff2ad1ae56a3562beb0928fa3dd79c62e6a79d1bb2f5c16fdb4eb, 0x5552387d535003ca64d1e43d02c090ed111c572a3bffc2348409c3dfa9f6f484,
0xa0e8865700ef4338cdf587ed3bf200e54185c8aaed888b607f3615fd7c6b5b56, 0xf5ba46839fa9ad50b99a6b89b853dead526b871d70858a51a16bde513a1d7518,
0x5baab59b49de398b09121b3a669270c5e8284bc36658c81373904adb5d5aeee3, 0x8a577f617c0f7e856e5a008661ffdaf7215ddc9dabd31eed82d29afb70f69717,
0xb1aa653288b318987b974e782cbbee0ab2be78cf8f494c120040fb93968c6d4b, 0x7ed6071c60810d712684aa8e2d63a83b100a1d909d623cc383d9e62ae891ac51,
0xfb685fa7eb49c43d01032fcebf910a0ee59025feac837d15851b1e44f5726890, 0xd750df22c98e5e2e869ca16d9864ba094fa6cb12e90e79b2606ea8f3b835783a,
0x25116c4108c7105f358ab0b8392a597f24fdffee356cfe6ab7eedaec62c6e5bb, 0x60d86913e77177e01eb7406dc815dd8f77c508df51cc272d4dc4732a0f7e1321,
0x5de58ff659e2995a0ab27b91c287f71d78b4d5f4e83df62f5464bf13a8bca48a, 0x685a3b3d80359b55309a623c252d3c843fe5bd9c4e0f8aa958794e80d2fd41cd,
0xaf8848372961ebb2611d8100f9639e2a3cc8b99dea5715541d765df750cedd26, 0xdc57fbf97b167030d28cbb88ebed2f9654549e4867aa41708b6e7ad3b0e43f7f,
0x6f1825cdead618bfaf1b7fda3b4fc1c85ab4d016731b182ebde38344e5ef63b6, 0xff097e7dd591911b98f4204d783334553c895a64027f945412c846cf45c655f3,
0x5210d6605b8880365b256e3ea081add0b5a275ecf6ae4bdc39f9e5b1faa50e2d, 0x35f6674a5decd30139c13c0e7ff6588b5a273dcdc642686eb029a8935afda8ee,
0xc5ecb895f762a376b587115f5e76c76583203b019978f9727b5047edf4a63f3b, 0x22252518197881f374ea4058ff9233ec8beb65ee5e30bee5b53f374685005024,
0xfa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9, 0x6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811,
0x63964eee619074e0780140fe02e90836e72328d2448386d459c5be23187f5048, 0x3b6cfb3a6b89cf41a39ff9b1c34bfbc93d580b934dde6c84383a284d89309df8,
0xf7502e3c4379e31bcda329f93a1ca2b6a9c60a4015cacb2971ee0e3391da5e12, 0x3c57f5edd67cfafd59970945c3d672047b86d32ef725cebc7a4b9c5e8385f4eb,
0x5a3ce25b4d15b7e22d1469ddf0fc9f75afd7f12ad3cbda31f814ba1ebadb2a65, 0x8b34125b92e05f63873a6dbfbf3f99af3ee28bc3d825fe8ed8b170cf1d327f1d,
0x12fe78f983ae5862a3a4f6624e3455b3f4ca5c4b94e57c9f2074933110b7d105, 0x2062f1a338d6bcf7786b5aa199a7cb771dece265d6ee90b8458ac6fb9f794a60,
0xd42011d6010613880fec6b7f3f332b2024ab318f2a9ba7ed237312073e32478e, 0xbae5d4e9a37d4e0c1b2d5f5f44bf847b6fb24b2f35508cc31ce05681d04e88d4,
0x76aac31347df473d58c4bb1028084b1a480e6c50aa572daff621d8339e0c5d05, 0xef5576ef0d5c70efabef32c83202625f4b1225cf015e6ee3556619b751ece63e,
0x5ce605af98f93eda6910be34f0de41ff85dbcb6e69a8fa0016a733754a9f44d0, 0x4cddcf9bec226bfe7ba56bd031c76c58ab3cb1bfa32eccc6c0d05f3489d30105,
0xa663fe5bbe5c5ccc87e60c3145e88104c6b55c349c9a1aec9e26f485fc53c086, 0xb541997f6b211fbf5d1b102c89823dc3991ecca573994fc0e69c5032a5016201,
0xe0346d21121ff741fe4eaa23938a4347a71df4429e55359eaa20d691c9f40840, 0x3ee683713c998956d756d4a97ee7ba2a269cd39a6ebd33edc39a1aaff3d7ce72,
0xde95527a0206cd825b7ca1027ae2bdf3d8326689434f9c6e9ad801ed4b758574, 0x4cd3e056ac93d14e4e21dc847f169ed7bae6a105155a2deb4b7df1fcfb67232a,
0x1ae1ad36f64e99edf7b5beb6cb8761af044b110021ea003556a7237ba16ddcd3, 0x7016054987a0922059c74f775210448959616addfcbb613c7cc4619d2e7eb2b7,
0x8da6bce066d32addbfedccbe44785aea894c4a2b89634668d779b8abfd85474f, 0x13fc6c6af31ed4ff84fddf5d071dfff10b1cc59305dbdd7a5fdf9c7d3d7b4ef7,
0x1138ad12333790f920e979f6a64712742a9bb56702356e3c80ffff890a9de533, 0xb35525b758751d9486f0dc3e9f95a7dff679bd0b454a40006a8b7094fd332573,
0x7329acc7cfb3ba39b1bd6649e33c93beebfa26a6458eafd06b5d42567dd042ea, 0x9272493541b76f1489284e794fab68ee184897731dfab4f0ada8cfec2f5c94a1,
0xda1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2, 0x8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1,
0x9c7be00b4ef4c444df85d5f61dc1283a23605483e1f8e934b3c210d22cd3c369, 0x9220c0de74b20d2052a26d455ce401483e31153a16769cbd29ee3feba2329515,
0xe3e90da46303dd0419e96646991b1723b83ec0c4479d36f615d87732fa95a8db, 0xfbe53bc0056c178bb00faa90c702e76afbb1ef97cc984d3d1016cf7f1b0d1cf9,
0xfcd83f42825263bb55664b238ccc49174dd06a70541178e76bcd92d7bb8c9e3, 0x6c0bc1cfeac5fbced1d8232de5fdb683adbeaecdf1627bf4e86d55fbdf4aa9ad,
0x9f4ffec732e3d775a8b650dfd5c0c01c782a4e979593154017aafd64112ee214, 0x639ce2e1318e2f2e60e96682fd75c69d9719b6930bc880283ef442225085f37a,
0x14295a2937f1a9412ee14cce33a05fb2748992a2cf598d41f4fc3dcb541d0ce6, 0xfea75363df1150711b031c44844083b1310895601b5d241a52a81a8ad738bb86,
0x431f622d41134ac1b171a0a41f440b2c4b1253e1b3c14e3ef8b681451f61a0a5, 0xa298327fe7aa438f6d6de6519723aa7241baaa043556577246b7b7fe78cef899,
0x7175407f1b58f010d4cda4c62511e59db7edcf28f5476d995cf39944b26b64f1, 0x43b4554344e3d550f36d3401134cc86eb01fe8b774471d2a426e7efab24234d5,
0x993dbaddece78fb86cb62ef39f8a12ac0e6e0e47731328e7cac267d567748503, 0xa521a9ee8569eeeb785f784787a1f51a17f87bf69b8adaa49ba736137eb0cee2,
0xc20e86b84e51772ba8289212418cfac3aca86a23cefe2f4e464dba997421e21, 0xf561e9bf76d0adac1a1237a11e19a5b786ee76f65bd09349dfc83d64a1aa6a45,
0x75f17aba06ad5ea5a339431cb90962c0e10bd11f26474d478dea2275a6d23d80, 0xa07a62fe15639a80c7fc7d0bf19b6292372ffbedbb4ea590986a85b0280dd57e,
0x354cc84bd972e0ae0e97e32cbd26d410ee8b89fd48ce60c4c718cf9c4b344f7f, 0x9c04bf29291c6b5d6750b493f9ba88558e36c6018602e0ec7e4b11aea5db82d6,
0x6678555e11d9f4a0a6e95f485cb87b7a8db9c0040327d684ae2b9b6d61ad3413, 0x510dda3de278f646925266d927cbdf9ea6ce2d153adc6660124810207ebca672,
0xacef1418da0f942840486c0f262213a9c4af2554d6c08a447487b5f83502b4b1, 0xc4d3559fd7e87a4de04017b53d8971cd2a3f6290adf1878c6f81fa7966e85bfc,
0xebdc4a362cda7748adac82bd819636889224df5bffe101eaac00af5b06cc8563, 0x659a3144e856d35f9b1ee35e6cdd4f07bec4079249204f9249b17bcea394ccfa,
0xa8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13, 0x7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c,
0xcac6f2e7e27faecbcb876f805ea66e63efbe9eaa753d67c1c15eb9ea7f7653a1, 0xf7d416e5e2aa6f194cdb65d9a42a345081e83ae5688103a068c10ad0fec5e556,
0xae2207c5cdade26327f37f0b1ee40e50ba288f8de67e829e22a199b0ba3979b5, 0xea91fe510c079f71ad4c924523ad7060fca87b7d37d4f88968f3cd668450fa6f,
0xe6dfde46ee37d206efbc5932e58e43254ab767294238cb11cc9f4ab08624003d, 0x8727b3b7be9139498f2f48f7b88f92203b1ce5ea527fd7dd7548650e2216b93b,
0xcb8ded0cad72ace59cec541006585461e0be0c4fea2164fae41019100efca824, 0x33a5008f740d88c85b316c487a2ccbc496ad1fdfc7931742f140bd058f227361,
0x49dbe4f7b2792b64bc9eca37e8d64c460a00e49ca3221cef559e11e1ece4dd6a, 0xb8b57298470481c72c5fe33db692255a1c38552fca05bb69b13b72a42a9e3eae,
0xb0c53b298af1836708e94900d7e76ed6b04e085221e4aaee9411b4da3bcbd327, 0xee2a97401fbd7ea1638f6a601b66b2afd82a220c74636a0f1616bc4a2d7be436,
0x3c4e089cd9a6823d66a40cfc7ac96082e250e3149cf211d3b0e1103548dce109, 0x43fbbe669fe191b480757bca15764d379579e142d97fe697e2bf65923a19aeea,
0x6f6ba73f329db920d4d8862ece77f526c806405ff7679ef7de6efb6397b836a1, 0xdc778a17ff5fc18e3db0b8a405bee9c0d8990c5288e1ff934dbdf2fb06832b84,
0xf8cc1dada779674e534277d340b3ea8a563ed7ca920bd2f668056b7f825d5241, 0x13de4e4410b170feb33e892fa5166f0452c2d76c61eb0bd4960af038f070e10a,
0x7d471a7dc7422af4bbcff467e102436031088032d70612d42aee34209eb39ede, 0x4a7b19f3a6856507b82231effc86fa7795cf7d1c22a8fd0c9bcd94abf6607e,
0x80c34fdd0289be33737dcfb33d7dfe3596565feb1e1606d54fe8b5bdf4e5f03a, 0x247e0856a78c1ecd55edb57007dc9a03d30b2aef1f3245cb117f4546fe3ca504,
0xf0025163f9b73fac7070fcc31982f0967fcd7567cdae5c5aa56d49e2565eb1c1, 0x54ea9e8883d20df4c66b4a5da26afed8576ff5cd6cd11e57da7d7046dde2ae0,
0x6ced1ae897a9df3d4afe802214dbc7bcb383e4ed9e4c4deca610a061ca14f422, 0x25888aeb1b0f8e7abb495a728be6b9b88ca102c879a9c932ae73da43d84fc091,
0xac12140001ed23aa0f704e950f47715e0e36fe03ecae4bf84cf35093dac32c64, 0xce8ebccbac338baf1870b695730499a3ed5a5d3a5a53f0898812adbadeb1a867,
0x174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c, 0xccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73,
0x20e6e2e796946bb630c7071ef1b92ea3d53d280e0e4501115f5da36f840dd273, 0xd3ad7afe4f1559e44a0ba1ad97874655811ec9793da8693cc07cfd15bb46b593,
0x5e5a094ae446526e40caa5d458436a5db775b77d67d506bfe948073d754b8367, 0xae8af8c9a4795e05c2c901f1572a4b7a796aa9ef3de5ffa445329a9d91ce85ca,
0x8e0ca824d7a351dba80280a07e71db7035ae68136cc24ca3e7b54f301a077674, 0x4ec560759192d41dc569d24da62cf57cff60419d2f910290b84cbec12b7ed98,
0xd4e0adb9702e859deccb83310cb82de6a52f189d1f8fcaf198579397b10d9d, 0x87b801981837640947d2f846432287f70b5898c978e2d923e82100487140dced,
0x2ed76c1152ac36007aa17c85a5f902f17c845a05a4e0aaa07b05e8360cbcad59, 0x639f4d4043b85f222cda6eaec81767ed5f72c60130a7f94114ac7a89c4ea66fe,
0x366521368ef74c0f6f7a19aeec4a667632e2045b1a270bb20811a609c9caee8, 0x1f18c32b2a93ded99949fc681ba6944501cba9893295ba7f0a9ec6a3b772b711,
0xf7bb50da51c982d1c5fa63553e3d66c1afdb5821a321b4afe96afc5ea8192441, 0x93cc3be30334a526311bc63bdde6485db1cfdc1fbbc4c74bbc640ea1d45165ae,
0xe5891056fdb8f1faa0676c453f6c6eade37de08e601c06353ff97519446c85c, 0xe39a485f11fa7bda0ec7418baf481898f490234e80cddadd5f6c77e72148972e,
0xa34667155b6ea5982d3945fb743a1510c671b96fa3494a57e0349010055ae087, 0x21ca5fa5e56bc5bd8defe9a1aa2a3051c53eab6f2394f0bccb3f366322887627,
0xa740126d26f1463f2b6cf5faa0077771931739a40681362aff18adf3c22e1259, 0x5a9ffbaf194f1ff1b05f174a67c7ee517865e753b1d6dad5f771724334a5f43,
0x5fb1df0e7d45a4f541910f577d417f7091adf4c799e817ea830f4571e4b84b48, 0x2152fbbcbc3c4d49fbcf4646fe6d25820629c390873f21ad77edea6a37be8eb8,
0x87e4b8216d9474e4a65405765d82d177d7ce7ee70ba087bfd88a17a3cb08f1fe, 0xf74e3ac0766348cecd7d7f8ea2f8c2cc6e2f23dbd6786d9d75f74ac9aed5e2ec,
0x95bbd97478e1b8a41622e4608aa82fe9e77d43e7492a0d211146d987f9b8f255, 0xbed43ad129e3c77fdef2c208f0f2d0d8f2ba72aefc777fc1010e3fe828361439,
0x35ea1b463fea79a5a92c22c0c1254a44105ea7bf07c0e74b9a8700e6a1c4d15c, 0xad2191651b9ed2cd7888fa5fd74d3b185d633aa03065095edc939baf7f3fe1ea,
0x959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba, 0x2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd,
0xcbee1405ff0da7deafe32ca7dd73d95ed702226b391747c707275a940bc8f53b, 0xf6211f4f4e75f902b51f3e689b8294cf0d9ff4f68126f7282922e6b278c87f45,
0xae97675ceb72f7e788f690dfbcccf149f309ccb6ddf72aea09c5dd90fd69985, 0x91219973f6e48d14e9b8dfee051a54c5d0b99d417aee1aff89c8eb411409a003,
0xadd5bad28faaf5acdd580bfa0ba252e03de3beaefbd71b9cf377c88b14b311dd, 0xe9c43cf4da3dc3a5974e434f8359814f52d4e1e7669b9b8902f982f349d6c38d,
0x2b15862a5ac1612ec9b65f1778025d1fb723c4c1fe3cc29a9dc193dfd9262b90, 0x2eb0053daa0a33faa7a30d52da8749066f534970f99489a4991996e6483d7557,
0x209d6bcd766163b5248d4468c66d170714ff12c6c41261974e75ae796078afb0, 0x1a2f13429e7b3280a0965baba9898a5b01edb79339f4e3e385d1b775a740b310,
0x6af9eaed1a96ee677ee95c1616e4769af2d2c89491040ee593f9714ca8e7be40, 0xb3812a11690066496709ea428347dc8145e3f666a0f59569fa416e026e387e1c,
0x53f2432ba81717143fa9df3dff41ced24a29b314bc5a8c96f5f6400a0d7c0979, 0xbd52effbc1f079b7ccd4e3e0911b07de4bd5a4f5c9e8b845f9f7e90c537b36a2,
0x596668ee0444144eeb3aab424cb8d6f940794f8bc5bd4155d26b6fa0f482801e, 0x949aa0a85bbaef5f1ec8f9608771304e8db6c1cb63d3535ad477148f04870c37,
0xa762e69e047f9a6f61d50f83867e0fdb65bf6f8bfb130c4fef4040a588977063, 0x6b98dd57cbed115781a1732d93372a89958b48a396dfce62a06369f8294f6ef1,
0xbe84d1881b5050762fdf4d17ab570b5b4acab8e9058028c3e4c9b2e7c32c19fd, 0xeff960cb32dc50944d1e65f4830839947955a7f55e50dc3767694a5372f1281f,
0x726298eb9c6e3181810307f601d7c578f6b015ef29ea5bf8ebcb0298df55a9bf, 0x38d48801a9de9bfda9835a2ef3d099e0be797bcbc00673b4e116f8b0bc3accae,
0x9867a0314c0d7ee541f57274caf2bc88cbeab540132fa167bd1b75fd56c69482, 0xd02e615a3b10834f9c792d55b1ba99639e6245cf515628a916f061146f792cd7,
0xb934130f1339e48a693af7555946de47a4c90e8c3efabd859957f2d841a7e7d2, 0x95233f6b9b2d0576aa0929a5fbf78d1fffd381dbe70dcc41a4a991a898653d39,
0xa866f24540d8815a5927f2ea0099d6abdf1d92fecd01fc2978a239d91d557aa1, 0xb58739f6a8022b44d793d8fa5db0e13961eb69c67c611a4b7981bbb4c1430634,
0xd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151, 0xe82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405,
0xbaf183a76100525e23bc7202033725f922b9cd6b36c413497c6c4bacca72da5f, 0xdeac9fbe9ccb4d335688bd58dd69b1d18e2336c5ca739361377ce628a8f2a0cf,
0x41081105221ffb73befe170f31bf245f5c2abef5f18bf1f17859f635ee4b3ba0, 0xdc37f36976ff5668f2ca65ae1d6b84981336498565a06455486961dc17525595,
0xf7aef8a7e38440238f9332906e48f6fd5adbd02d56b76a5ffa5aca58c56c3943, 0x4e3b0b44d5ffda797c442bbdc3ab3fcfeec30184a8dcd003431f627facf442f1,
0x63a2a210a16cc0c8c8cf22990531d65edbdf22833b8a02184629c9b893d98ded, 0x882b42e2e7fec76fd065033254ed94461fabf6a009c7873a519197d4e0d1cfc2,
0x1cd276d793a2bdff8e2c708627320f124513068bf5da5df02089e66a000e5485, 0x6615bdd18b2eaf738d4b34d4552e977f99d0e270b209a4ecca5cf051885fbd7f,
0xc15815d449d67ca3df12e2e5d57bef080ff7371901e8d7eea861a50b8045445, 0x2f30d60a3ae94115d0a93c3b6663cd28ba3054e43658cea3214f87d54054a206,
0xdfb547cb10019036c5a2e29f0dddbb1f7af2fa25a3c7a78c1fac945711924459, 0x9accd2a9ba0f47088b8389ce9dc864cc22af0930e5c031dcfa205e0dcc65fd9e,
0xc757eb6b89ae8a9c0d57ba8f4828ef7f882fcade1e9619701e91239cc3857faf, 0xf03a59cfcd23ff36257369f208bec61b627d310d101894c101d9db0ca0584ca4,
0x712022f7ccc4db2495dbc8064a115e2577c2771a47171bac9a8bb3518ef8b517, 0xbd578338de4de928ae7101f9b0947541a3603edf3bd79d7748b7df28249da1ac,
0xfa8063aeadafa0d0f815d409919c02a244faf77e2d8858d10e4d184f5459225d, 0xba71f9057c0c069160de220824c425c0a2b6c36d007c59c3a2b7e3b7ece1507,
0x2ceed8ed2c82072e9e5a925f74450f8084b0f39351e015e33c753d59a90bc03e, 0xa4276b80e9b9de3ecd850eb7afc7daeb4a1df9cf20d53cd01cb72b8b7ab82adc,
0x658ca3c59d0257a89e2f69cf862ee0a5aaba9fd4909e61a79679fe9416f0d044, 0xae5cc1377aea25460f165d62713bd37655a16763c418ce89add1f32ef7cb872d,
0x379c749a4539e8ecdd1136e7c4ebbc827bdcddfe7dd10c9a50cd4e3142aa2494, 0xa25463848bf9c0313c9c0ef1d6783f111364f6a7b7e856435befa9e8cec86c63,
0x31c94b4aaf91f2bace4c19835d3f305c676af16056561417ab5ac9573696756d, 0xf80f884b556e83a9bf4b8b59aaf4160683aedfcae6ad1070abc45e8dde08ae78,
0x64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073, 0xd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589,
0xb866d6b142df940f2cf28b54c92f0c1294e0b6a22a91f2ef44bcd88c4384480d, 0x1914b0b3426aeb7089a278d7ea9ad7ac24e522804b1d86d60e659b470c4cafa8,
0xbc477bd55a4203f836a213cfc592a17ac34604c07c004859adf714720e103dd6, 0xe31e1e2429a8dd526cbac552c6dea6395d293572c63b44ac639082d8d6f7c343,
0xec2bb89085de819ec4d9d1646102ba87e2d52ae4ed4fe455d229cda81db20d6c, 0xccecc17661e013a1332f66f0650940c633a2364be87efa98a0e99c4d629cf4a0,
0x589db4fe5a6bb8380303b423267bf8e80ac5af1404e634907d0dc3b0d44eab31, 0x6255445c108aa2a4f607062024bd90f31f610e552148f8db941aebe751361f6a,
0xb1d25d51b4558f5fd0ccb8683af9a9cf62a169c691627fa592d80b1836695f94, 0x706dda72030e90b1f7bea0ac19aba81760f6f18dab863edca5b7eb9a5ee32736,
0x1339b337d16e2fa2ea8a1860ad6edb7c42831c1c560336c67bf961729a0c2c41, 0x9f9b296362c7ae5ba7a3240fd113a3406b1227f87de923a4185f054ba9f1bc2b,
0x71c4a7e389e296ced39d75ef5e545905e50050640f50becf38a60ecb23b09d0f, 0x1313fadb737af3ba0af3e0a292f810aa786f2b084a62ffc7637b1f01720ddb62,
0x7ff3bba11363cf17cc50329b5001b568a8ddfec832c0cdec3704b1f858fc47af, 0x1f6ba7ae8018a629a0bc891b7473446b17a53b1ad18bac297f86164cf9ba43a7,
0xfc395dc4a5114dc8bcb0f7f003a4d3e938a87a3d78d33864d1dc4cba9e41e20e, 0x3866e09108d07d094ceb81a98bddb6d60221475a685e4e2b77ad8cc2e7cf42ee,
0x8ec670463ceb60bb6141e9395fec7f6100b4293b23d42a990184d60095213775, 0x8f58a66fa0da5be306e643415cedee0e71da98a0bccf51e90e010f3e7841ffff,
0x850f8cc53502ba26a8d1582765b3fdd0b7c30d8e760425e349971018b6f83231, 0xbc4a9dbe02a79053d0bf7086b82cc7890a85bfa17722d77f4a031a9d5f2e8373,
0x83de61b441e701bb89dbac3fed95d495ae6aa72fe2b95c2e3cb3ff8d3452abbb, 0x32f0e334a34c609fa6bfb6af8c4e1563d79c5f36bbce42918a05176b054eb66e,
0x53fe8af98f9419fb1445bb6a94750d4646be9f37b715576388b11064df2e6ffa, 0x9328817e7b5154621640cf6c4464de5c5fb5f8e603bd70c22a1eb37264e92eb5,
0x3d7663898f50c1db1a8bb5c00f7cd86833ae25b292a17b15e9688c26f59276f1, 0xd37669737a187ddb60976e34dad8333ef321982019b1978601e4a65b859cbcb3,
0x8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458, 0x38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e,
0x9629a450bd383a8b9fd43c6cd1d492bf392ed605299561dde54433526ce9f114, 0xbf439b280c5fb6d7576befd220cef64db925593e5c56af8dca3972c4a24aa391,
0x3beaed1e0f518c5f0894e6b05fe00bc811dc13db08d0646b160a0fa4152da17d, 0xc3b0d7f55aff7acdfef4a8bebe80e1b554cde77b8dfec416ce704985ecc768d2,
0xb73b1c47ef1e4688eb1730da7cc893df1477d747e187e18383d38d9626ca6cc3, 0x584315cb294922a90a57d64bbcc805097322a25209757f5afac35d76a54fdba3,
0x6e73dba0cbdc9d618752dfc039275997e74e3221420311b7234fa17dba4edcc5, 0xee0ac1fc49eecc48bea4550888828693278a77da700679037b31f7cdd59da0e4,
0x131641d11d602b14722615253dbcf027a92429a2f7e39a75c1b9ad04d063e1be, 0x4c3bda61796039f06a42e30fcdbd2bebbd0faec0f9745b77fdd1ff3e21fec890,
0x7706dd8937e5b5927627d97eaa47c3100490f5fa329abb31409c4c424a80b979, 0x8a02a9827d5bb7147778dd7991ea9c7117fa0a34fd7efe3214cf48104126cfde,
0xedfe16b2db40180311f9892007a2fef7d05b2a3bb676899f9c6e2192d38f93e0, 0xee6902f1fca5db3694d74faa4b05d0d25b3d5100c46e227e3d01793de29405ad,
0x16d422c5929bc0f80d2f3c7a41f9e06aa45bac29413ef127dcdb9c4b726fe285, 0xdf888fa51e22641a8ab7e69a63531b1e93f0c1137364d4233e0ffe6c155b441,
0x972cb363f9f30c334927129b35f2e5c6b8b5f624c4c247f15d3132b869e306a5, 0xae634704e2df92aa5f9e77fe5bc65079b85702edccad4f35d061fd40b6e86295,
0x1fcc0e47eec76d63aa5a344750f56a9c4e24079f9a60e3aeae310bcabacfa513, 0x165dc1a041e35478b48e38754339f9b44bededd16498391875075ba4107afc9c,
0xab86c2ad2acfac530fef75adb02ba374ab66930b85e9c78dd12a03527c46e079, 0x1209c286019f29abcf5c46d4d73200c9ce7728e84850d7c0ec428bc17636ffe1,
0xc12b9073ad6cb8a17306430435caa386a50a6089b26b771721a2707cfedc69b2, 0x3173c43fe534cdf1d9772dc89f894976b8ee1dbe3d27b2a0032ae9b020dd41dd,
0xc6701c110c2da3b01ba1bd2179a116687ae684eb76472760d3ec7bce9e341142, 0x2a020eb38d6cdd9952f869bbde19f5a15d07fcba5bc9be578924c6159e0f4dad,
0xd059bf85dc327a8fa3f3e931312ca73e8a14886f8b107197ab6f585df961fe4d, 0x45107a60c08b525e3fe0765dc84955b4fd388ba1f4dab64cb9935b066ae823c2,
0x13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b, 0x69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27,
0xeb3cf8f532245362ec05c88c85fe12d19182be7dceabe577c75849c6065084ae, 0xc833c78222d9d70043fe63dcefdca4a1f52b45c5e7dbd2a66f67c1fff96b9480,
0xdde9d514dd9ee6962c6ed6b2bf05b5cfddea171b94fc9aebf216b2098eca5f51, 0xb84e69133ce28111d891f34b0a7f8f0950feebe8de89571f9ad69a73d0c638f7,
0xbdf1a67d092d99974f7a60f2184519b2a576fcf984a201d9f8e5bcbcc2e9a5d0, 0x4095902bab65a1aaa80be54a86bf7baaa6280b61e5626461cdb4f7018562ff7b,
0xfd1a6210236993736e9f406eb1204b179aed513e20ad46ec2f906b05999c88e4, 0x1ac97b54b9c8c20bfb13c06954977782dc6b71d495cc00f299c8c916595bc8df,
0xd538cb1dbb0f4c8d5c454f68a28da59a345758924a4d6f01ccc6a55a09b0cca, 0xc8196bac7a3ec110cb0a8d5c40eed7cf8534cd99d89134c9731b147e0c929e05,
0x4ee48531d8c296b9f13ffce4f2c86dc7cf2da5738d892d68bd515b5b5f8018ce, 0xb68f9ed4810bf8b5fc7b4408d0c7c5e671074971b4e806013c35a61b1e48381f,
0x68856a6eddc4ec29cd5be267b64483b48c3b4196477da62abde5fc173b27e771, 0x77a33df14f79a1fb13b6fd49c19f7b4a331d22f293b0733a6118d62a07bbdab6,
0xfd76cc9c34c400dbff5e314c55b8c070cba05795094392f702852e91f1473678, 0xf2046543787143dae0fee0a73d032cd660628eee1401c8437e164eea8d144f4f,
0x4cd5d8cfb9e9c7b880e44d99bf1aded2e8b9c60fed7b8366b5f00532cee66b24, 0x576eae82deb94b559fe4e8c39cd6d103ca61e45e12d2faed221efdbaf40932fd,
0x85a2aba33123b40219e6ce8274b4ea212c691e44f197546edf00b7148d7a2193, 0x9c129857eb2b0516d82c6082d1cc029fe1c6dadf9c3b12427f0c83d4b0cdcf3a,
0xc352d50f8828f7b25ac6047270ea2107d3a0f2568536c4d56ae303ceedd7e577, 0xbe772838ba76b9b96abd53145bce79fb00a8abb2b61217063ca4ff88f8d9b570,
0xd25ddbfc73cffe74440b6d6c5783650f35ae8dd019e03b0535b0305b377568b0, 0x7a3aff7593f848938beaef74cde7d92b832273881e3c3f0060a13926df39929c,
0x6914e86b0a43a9fe086de71ab635e9ea85051f56ff5fe71a33563e81e712536, 0x2b7e792852d9bd0527d8aceae5ac28c0896c226b0af7a9da2a247713801128f1,
0x4581353143e94a7255f07e9a97aac805641ab5f7fa0ffa3855fe5118a71d7c13, 0x9f5858ec14979ad8b57f50f177dd69c97020065542bd96b99638bc553aff63cf,
0xbc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366, 0xd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1,
0xda433d5e11ceccc0abc5c7626ce7bab42e89b221f785c409282de545f3fceb19, 0xe498dbd321a810301debbdc4af95e5218e77fc2d9227b277684e7120a6f5cc64,
0x39d7349d9331b378d3c725dbab0015347295f18eda146a66b06a2e32f712be3c, 0x8f929b4f56ef3bf7fb127554c66812e8ef5ef7a5eca41644cc3019f41c6ff65c,
0x31e8e1ee9e8c7ec1c1c116981c16efdbcc4838a72207e0654de275c5acf692a, 0xad7e7f5b465b353dd9d0970290d6743b70649827c5bf73b09cc2a84eb16f667a,
0xf0cba617f7dc1dd09e51cd6c2995af26c699723994f82e035aae4fbcdf77f22b, 0x1a25ab4313f9df989ef326c36516d04004f18c7e90a095661fc8e2c75909a03c,
0xb4319cc90f3e0d3b313626ae5385796bc49b300c88ba4553dec0aa4a77829372, 0x4707d4499a6f502bffb7afe09c21c5a2707b1215ca3e11bb7729ccc00add5427,
0x381d7ab9db2154d321d170e8d87268ed8d6bfe235bd1f47658acdcd4c6509c12, 0xa47aab5b7fda3da9eb5d24573a6581e7205828586ce6eaf754642a8e2eb46102,
0xa9878607a88d61155d3e00d862657f73e9c9bf363fc7a91592bbd7ff81f488b6, 0xd181a1abd58895d61c063e7c82157c2239d0f01964ad5c6d495a7bbb031dab1d,
0xa703f05467ab87e64793b73e694c8a53f69956a5a063bce48db3b4d6384fe955, 0xd500f935a2b047adc0ea792d6b19199b539e1629c597277fa26b2efbd61344bd,
0x331924c750b3417e48e279ff6ed7f3dcba2e121e9f69f8fbe64093b6c38a8cc6, 0xca8f79411b33f0182ba5b601be2ffb317fb99e9ace9e9b54c4e8e0fb46587810,
0x73c6b3c5aad550d746c6ad0d7053a03f1b7e4563a2f3211d3499656c06eace58, 0x3a2fb4a4733a4f741ba90991366d91c6aa6a878dbbb8d2917170a9172af8654e,
0xcdcb12d7119d337a9ecc32447fd43761d6fa5689dcd83c3df4bf1126cdcbcb9e, 0xe699e2e17bb9f11fbfefbea096de9949a199af24358df340a08a585ac961cfd1,
0xc627f3e7506d47fda1d00d3a1c0eddb8de71b3a9b95aaf2054b388bf00181d5e,
0xd78f9dd71e442a63b2d6960138a1f7d68ef6b00549cbe2c3927900a6369f886d,
0xc6ed5e6328ec31b13704110842d4ac23fbb883bb349d88db1d747cf7325fe9cc, 0xde47405b49d7f8302932ee125c7f7b2a844f972b60f22cf10c0bce1c4a8fd94b,
0xbb88fabe0edfd233fa25f40a6f06de53a047958f28a4847f34e28d9fb7828b16, 0xb73676b304f5e8dd345dc59601159163ec4a8174e3a1e969c51473a20aea5df7,
0x8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa, 0x40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482,
0xab1ac1872a38a2f196bed5a6047f0da2c8130fe8de49fc4d5dfb201f7611d8e2, 0x13f4a37a324d17a1e9aa5f39db6a42b6f7ef93d33e1e545f01a581f3c429d15b,
0x9729247032c0dfcf45b4841fcd72f6e9a2422631fc3466cf863e87154754dd40, 0x91d1a244265fea1dcd15c75dcbd4df3690dae85255acaf49384b492f2aa36143,
0x2564fe9b5beef82d3703a607253f31ef8ea1b365772df434226aee642651b3fa, 0x8ad9f7a60678389095fa14ae1203925f14f37dab6b79816edb82e6a301e5122d,
0x89637f97580a796e050791ad5a2f27af1803645d95df021a3c2d82eb8c2ca7ff, 0x2d1fe1248c888424d57b9cf154357489f87bc6a38e42eab7bed415e170493e68,
0x71efa4e26a4179e112860b88fc98658a4bdbc59c7ab6d4f8057c35330c7a89ee, 0x145fa81f8bb624ae9efb2c32b17294a22aaafab88e5e9a0b4f489329c1366a2e,
0x308138e71be25e092fdc9da03d5357421bc7280356a1381a6186d63a0ca8dd7f, 0x28d1e2d28828fc925e39ec45d1408e18c8165646434ad915e415f2478a92c7f2,
0xff3d6136ffac5b0cbfc6c5c0c30dc01a7ea3d56c20bd3103b178e3d3ae180068, 0x133239be84e4000e40d0372cdd96adc1547676f24001f5e670a6bb6e188c6077,
0x575fc4e82a6deb65d1e5750c85b6862f6ec009281992e206c0dcc568866a3fb1, 0x6f6edb9042a6fca2d671dbc2978e87daed33b573c6a3af2f09b8e90a902655ad,
0x3fa915480bab8ad2531e342ba43555e7df45e17583998ad4954e7fdcbd21250a, 0xbf9b66905499b030cf5bdf9603bb127c2e45e55a032b5fb791c86c02faa76731,
0xa5ec9036b64eab7a227f26f81eea2a8fda253bbbce20102921b6a8a4790117df, 0xb79dc6625ec140400c597983ad1fa0f71c8461f05614a363d8128133f86462fe,
0x52045bcc58e07124a375ea004b3508ac80e625da2106c74f5cb023498de0545f, 0x1b3f31fcebe3123ad430ed9c20ce312b793b9d0f2a8fdaf236ea34c0506c3d91,
0xa153dfe913310b0949de7976146349b95a398cb0de1047290b0f975c172ad712, 0xfd94d8413fb05b2fc48318d5f1f1b89abd053f285af0b329c8a5f6538d48fdd2,
0x58b5436ebe472fdb80162c8d237603635de47b95e5e5b38a89f13d0c3220479f, 0x85d7b6b055cd672c4e2913a252f6de8396af27c4829bb34144a7375e567db17a,
0x9a541ac6af794615935c34d088edc824c4433a83bdb5a781030c370111cf5b3a, 0xb66148c1cb106ab7cafe1af3688f475f5548fee2521ea52d63f5575f36a44ae4,
0x8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0, 0x620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945,
0xc25f637176220cd9f3a66df315559d8263cf2a23a4ab5ab9a293131da190b632, 0x53154fede94d2873989049903809d7980a9f04ff9e027a1d6eebf3d6fc9590cf,
0x383b24fbea14253ac37b0d421263b716a34192516ea0837021a40b5966a06f5e, 0x54cf706ac4edba2044cf566d54ea5a19e8f6ae74bb8c2b04089f4786d3c6e772,
0x2a9e8dfe3cce6bab3e82d82a5688544c0c7b55dc31978b4de2ccb3b7d466d561, 0x1dfeda5c16e651fbac7b5ad608b96cf5e01eaec17a02182f96ccf5252e76373,
0xe68432d03e02ed6d789e59c6b60d790c2b0d1ce336838195c7975c1d4638a136, 0xca5be41398e35a6624d2a7303a01e6472e09e3ebdb357336aafd18108c6c2584,
0x95e62d4292e46218bd49e4c992ff998068114a105c1dc6c02139b408dbcf2dce, 0x6b68184296c2875183a26e2b428d52e5e7b30603704d20e62bddfdf58c86594,
0x395dd559e2fe5c2a0eefbdece7306e7fb472985f391bd6807ce87c4416e8c10c, 0xfd62dcd4b4592ac5d0413e87affa4e274c909c04dc66922cbc3d6d9305fe638e,
0xb23790a42be63e1b251ad6c94fdef07271ec0aada31db6c3e8bd32043f8be384, 0xfc6b694919d55edbe8d50f88aa81f94517f004f4149ecb58d10a473deb19880e,
0x7a514adc35525dcb9f6eed5beee264800858fc7506f93c8f51664db20d6c14ef, 0x56edd1fed152e4d8e897f0b94c8f5c3729beaef72aa6e24f7ad3e1870b3fbd13,
0xb2113bcb7b4aefed1ee215aa8ae6818127ed7091c8d59c2dff9f053d097ec94b, 0x93be9e7399e8ee73105a0b53454cb4eb0943220b2357d0fdbd5fbffc687831ad,
0x1ee1fd584325d90d8ea8ef3bf4908f235a991077544021524a9463d04f6d65eb, 0xbb692891bdd6c73c1cfab9fc4f42fcfaca32f4e9863582b11e036b925d22941c,
0x71e935c8e1f54f25a6424274ab07e7891873c3b1a27a6c40b805264597a6257f, 0x78d93e59f47c22513ded86ba47ae2a52ef2523540cf70f7a5b217461d1b1e582,
0x15515634d38faaa8bc058fd0d883357d617e8b6c8dca20191f1950ef0e36cb44, 0xab4fffc755575215e370e3f0b463205da8c37175f020c1e5329af4651f495a68,
0xabc451ca4ee795cac52f8be79ee2c46139e015762bb13bacbf08472479ca950e, 0xae2718befe820a59db1dfb80c2c9145652684000cea553ec07ce7d8c9a9490d2,
0x3bc6bc6446bf520136358eb0958dc4aa9e733164dd2d62e151f946107427bacc, 0x8e305cc07176c305cdb62ee226d6c02bd71b75a5228beb4714c33fd5ead6fda6]
#64 pieces of 15 (2^4 - 1)= 960 * 2 coord = 1920 coordinate
p=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F #caratteristica del campo
#n=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 #ordine della curva
#Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
#Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
'''
#vedi http://www.springer.com/?SGWID=4-102-45-110359-0 pag.40 algoritmo 2.20
def inv(a,p):
u, v = a%p, p
x1, x2 = 1, 0
while u != 1 :
#q = v//u
#r = v-q*u
q, r = divmod(v,u)
x = x2-q*x1
v = u
u = r
x2 = x1
x1 = x
return x1%p
'''
inv = invert # k -> k^-1 (gmpy2 function)
fmod = f_mod
def add(ax, ay, bx, by): #A + B -> C
if(ax == 0):
return bx, by
if(bx == 0):
return ax, ay
#if(ax == bx):
# print(ax, ay, bx, by)
bxax_inv = inv(bx-ax, p) #1/(x2-x1)
#m = ( (by-ay) * bxax_inv ) % p #m = (y2-y1)/(x2-x1)
m = fmod((by-ay) * bxax_inv, p)
cx = (m*m - ax - bx) % p
cy = (m * (ax - cx) - ay) % p
#cx = (f_mul(m,m) - ax - bx) % p
#cy = (f_mul(m,(ax - cx)) - ay) % p
return cx, cy
#return (m*m - ax - bx) % p, (m * (ax - cx) - ay) % p
def add1(ax, ay, bx, by, inverse): #A + B -> C
if(ax == 0):
return bx, by
if(bx == 0):
return ax, ay
#if(ax == bx):
# print(ax, ay, bx, by)
#m = fmod((by-ay) * inverse, p)
m = ((by-ay) * inverse) % p
cx = (m*m - ax - bx) % p
cy = (m * (ax - cx) - ay) % p
return cx, cy
def mul2G(d):
#seq = [0 for i in range(0, 64)] #decomposition of the private key in 64 groups of number between 1 and 15
s0 = [[0, 0, 0, 0] for i in range(0, 32)]
#s0 = [[0,0,0,0]]*32 #(x0,y0,x1,y1) * 32, start with 32 couples of points, 64 points
#s0 = [0,0]*64 #(x0,y0) * 64
for i in range(0,32):
j=i<<1
seq = d%16
if(seq != 0): #if d%16 == 0 then we have to skip the addition involving this term
k=(seq<<1)+30*j-1
s0[i][0] = G[k-1] #last: 30*31*2 + 30 - 1 = 1889
s0[i][1] = G[k]
else:
s0[i][0] = 0
s0[i][1] = 0
d = d>>4
j=j+1
seq = d%16
if(seq != 0): #if d%16 == 0 then we have to skip the addition involving this term
k=(seq<<1)+30*j-1
s0[i][2] = G[k-1] #last: 30*(31*2+1) + 30 - 1 = 1919
s0[i][3] = G[k]
else:
s0[i][2] = 0
s0[i][3] = 0
d = d>>4
#print(s0)
#first round, from 64 to 32
s1 = [[0, 0, 0, 0] for i in range(0, 16)]
#s1 = [[0,0,0,0]]*16 #from 64 to 32, 32 additions, first round
b1 = [1 for i in range(0, 64)]
if(s0[0][2] != s0[0][0]):
b1[1] = (s0[0][2]-s0[0][0]) % p
for i in range(2,63,2):
j=i>>1
a=s0[j][0]
b=s0[j][2]
if(b != a):
b1[i] = (b-a) % p
else:
b1[i] = 1
b1[i+1] = (b1[i-1]*b1[i]) % p
invb = inv(b1[63], p) #62 diff 63 prod
b1[62] = (invb * b1[62]) % p #62 -> inv part
b1[63] = (invb * b1[61]) % p #inv #63 -> inv di 62 (64 inv tot)
for i in range(60,1,-2):
b1[i] = (b1[i+2]*b1[i]) % p #60 -> inv_part * diff -> inv_part
b1[i+1] = (b1[i+2]*b1[i-1]) % p #61 -> inv_part * prodpar > inv di 60
b1[1] = b1[2]
for i in range(0,16):
j=i*2
jj=j+1
j2=j*2
s1[i][0], s1[i][1] = add1(s0[j][0], s0[j][1], s0[j][2], s0[j][3], b1[j2+1])
s1[i][2], s1[i][3] = add1(s0[jj][0], s0[jj][1], s0[jj][2], s0[jj][3],b1[j2+3])
#s1 = list(map(add,s0))
#print (s1)
#second round, from 32 to 16
s2 = [[0, 0, 0, 0] for i in range(0, 8)]
#s2 = [[0,0,0,0]]*8 #16 additions, second round
b2 = [1 for i in range(0, 32)]
if(s1[0][2] != s1[0][0]):
b2[1] = (s1[0][2]-s1[0][0]) % p
for i in range(3,32,2):
j=(i-1)>>1
a=s1[j][0]
b=s1[j][2]
if(b != a):
b2[i-1] = (b-a) % p
else:
b2[i-1] = 1
b2[i] = (b2[i-2]*b2[i-1]) % p
invb = inv(b2[31], p) #62 diff 63 prod
b2[30] = (invb * b2[30]) % p #62 -> inv part
b2[31] = (invb * b2[29]) % p #inv #63 -> inv di 62 (64 inv tot)
for i in range(28,1,-2):
b2[i] = (b2[i+2]*b2[i]) % p #60 -> inv_part * diff -> inv_part
b2[i+1] = (b2[i+2]*b2[i-1]) % p #61 -> inv_part * prodpar > inv di 60
b2[1] = b2[2]
for i in range(0,8):
j=i*2
jj=j+1
j2=j*2
s2[i][0], s2[i][1] = add1(s1[j][0], s1[j][1] , s1[j][2] , s1[j][3], b2[j2+1])
s2[i][2], s2[i][3] = add1(s1[jj][0], s1[jj][1], s1[jj][2], s1[jj][3], b2[j2+3])
#s2 = list(map(add,s1))
#print (s2)
#third round, from 16 to 8
s3 = [[0, 0, 0, 0] for i in range(0, 4)]
#s3 = [[0,0,0,0]]*4 #8 additions, third round
b3 = [1 for i in range(0, 16)]
if(s2[0][2] != s2[0][0]):
b3[1] = (s2[0][2]-s2[0][0]) % p
for i in range(3,16,2):
j=(i-1)>>1
a=s2[j][0]
b=s2[j][2]
if(b != a):
b3[i-1] = (b-a) % p
else:
b3[i-1] = 1
b3[i] = (b3[i-2]*b3[i-1]) % p
invb = inv(b3[15], p) #62 diff 63 prod
b3[14] = (invb * b3[14]) % p #62 -> inv part
b3[15] = (invb * b3[13]) % p #inv #63 -> inv di 62 (64 inv tot)
for i in range(12,1,-2):
b3[i] = (b3[i+2]*b3[i]) % p #60 -> inv_part * diff -> inv_part
b3[i+1] = (b3[i+2]*b3[i-1]) % p #61 -> inv_part * prodpar > inv di 60
b3[1] = b3[2]
for i in range(0,4):
j=i*2
jj=j+1
j2=j*2
s3[i][0], s3[i][1] = add1(s2[j][0] , s2[j][1] , s2[j][2] , s2[j][3],b3[j2+1])
s3[i][2], s3[i][3] = add1(s2[jj][0], s2[jj][1], s2[jj][2], s2[jj][3], b3[j2+3])
#s3 = list(map(add,s2))
#print (s3)
#quarter, from 8 to 4
s4 = [[0, 0, 0, 0] for i in range(0, 2)]
#s4 = [[0,0,0,0]]*2 #4 additions, quarter
b4 = [1 for i in range(0, 8)]
if(s3[0][2] != s3[0][0]):
b4[1] = (s3[0][2]-s3[0][0]) % p
for i in range(3,8,2):
j=(i-1)>>1
a=s3[j][0]
b=s3[j][2]
if(b != a):
b4[i-1] = (b-a) % p
else:
b4[i-1] = 1
b4[i] = (b4[i-2]*b4[i-1]) % p
invb = inv(b4[7], p) #62 diff 63 prod
b4[6] = (invb * b4[6]) % p #62 -> inv part
b4[7] = (invb * b4[5]) % p #inv #63 -> inv di 62 (64 inv tot)
for i in range(4,1,-2):
b4[i] = (b4[i+2]*b4[i]) % p #60 -> inv_part * diff -> inv_part
b4[i+1] = (b4[i+2]*b4[i-1]) % p #61 -> inv_part * prodpar > inv di 60
b4[1] = b4[2]
for i in range(0,2):
j=i*2
jj=j+1
j2=j*2
s4[i][0], s4[i][1] = add1(s3[j][0] , s3[j][1], s3[j][2], s3[j][3], b4[j2+1])
s4[i][2], s4[i][3] = add1(s3[jj][0], s3[jj][1], s3[jj][2], s3[jj][3],b4[j2+3])
#s4 = list(map(add,s3))
#print (s4)
#semifinal, from 4 to 2
s5 = [0,0,0,0] #2 additions, semifinal
b5 = (s4[0][2] - s4[0][0]) % p
b6 = (s4[1][2] - s4[1][0]) % p
if (b5*b6 != 0):
invb = inv(b5*b6,p)
s5[0], s5[1] = add1(s4[0][0], s4[0][1], s4[0][2], s4[0][3], (b6*invb) % p)
s5[2], s5[3] = add1(s4[1][0], s4[1][1], s4[1][2], s4[1][3], (b5*invb) % p)
#s5 = list(map(add,s4))
#final, from 2 to 1
res = add(s5[0],s5[1],s5[2],s5[3])
return res
#return add(s5)
# 58 character alphabet used
__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
__b58base = len(__b58chars)
def b58encode(v): #encode v, which is a string of bytes, to base58.
long_value = 0
if bytes == str: # python2
for (i, c) in enumerate(v[::-1]):
long_value += ord(c) << (8*i) # 2x speedup vs. exponentiation
else: # python3
for (i, c) in enumerate(v[::-1]):
long_value += ord(chr(c)) << (8*i) # 2x speedup vs. exponentiation
result = ''
#long_value = v
while long_value >= __b58base:
div, mod = divmod(long_value, __b58base)
result = __b58chars[mod] + result
long_value = div
result = __b58chars[long_value] + result
#return result
# Bitcoin does a little leading-zero-compression:
# leading 0-bytes in the input become leading-1s
nPad = 0
if bytes == str: # python2
for c in v:
if c == '\0': nPad += 1
else: break
else: # python3
for c in v:
if chr(c) == '\0': nPad += 1
else: break
return (__b58chars[0]*nPad) + result
def b58decode(v, length):
""" decode v into a string of len bytes."""
print(type(v))
long_value = 0
for (i, c) in enumerate(v[::-1]):
long_value += __b58chars.find(c) * (__b58base**i)
div, mod = divmod(long_value, 256)
result = struct.pack("B", mod) #converte numero intero tra 0 e 255 in 1 byte https://docs.python.org/2/library/struct.html
long_value = div
while long_value >= 256:
div, mod = divmod(long_value, 256)
result = struct.pack("B", mod) + result #stringa di byte
long_value = div
result = struct.pack("B", long_value) + result
nPad = 0
for c in v:
if c == __b58chars[0]: nPad += 1
else: break
result = struct.pack("B", 0)*nPad + result
if length is not None and len(result) != length:
return None
print(type(result))
return result
def priv_to_addr(d):
Px, Py = mul2G(d) # P = d*G
#if (compressed == 1):
if (Py % 2) == 0:
P_string = '02' + hex(Px)[2:].rstrip('L').rjust(64,'0') #formato compresso - caso y pari
else:
P_string = '03' + hex(Px)[2:].rstrip('L').rjust(64,'0') #formato compresso - caso y pari
#else: #uncompressed
# P_string = '04' + hex(Px)[2:].rstrip('L').rjust(64,'0') + hex(Py)[2:].rstrip('L').rjust(64,'0')
h = sha256(a2b_hex(P_string)) #sha256
h1 = hashlib.new('ripemd160') #ripmed160
h1.update(h.digest())
a = b'\x00' + h1.digest() #aggiunge byte 00 all'inizio
h2 = sha256(sha256(a).digest()).digest() #doppio sha256 per controllo
addr = a + h2[:4]
#print (addr)
address = b58encode(addr) #ultimo passaggio: codifica in base 58
#print (address)
return address
f2=[]
for x in f1:
f2.append(int(x,16))
addr = list(map(priv_to_addr,f2))
for i in range(0, len(f1)):
print (f1[i][0:-1])
print (addr[i])