diff --git a/lib/evmone_precompiles/CMakeLists.txt b/lib/evmone_precompiles/CMakeLists.txt index 8fba5b8804..8ee746810d 100644 --- a/lib/evmone_precompiles/CMakeLists.txt +++ b/lib/evmone_precompiles/CMakeLists.txt @@ -39,6 +39,6 @@ target_sources( sha256.cpp kzg.hpp kzg.cpp - kzg_setup_g2_1_lines.hpp - kzg_setup_g2_1_lines.cpp + kzg_precomputed_lines.hpp + kzg_precomputed_lines.cpp ) diff --git a/lib/evmone_precompiles/kzg.cpp b/lib/evmone_precompiles/kzg.cpp index f78263f1c8..0840a33625 100644 --- a/lib/evmone_precompiles/kzg.cpp +++ b/lib/evmone_precompiles/kzg.cpp @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "kzg.hpp" -#include "kzg_setup_g2_1_lines.hpp" +#include "kzg_precomputed_lines.hpp" #include #include #include @@ -55,10 +55,9 @@ blst_p1_affine add_or_double(const blst_p1_affine& p, const blst_p1& q) noexcept bool pairings_verify(const blst_p1_affine& a1, const blst_p1_affine& b1) noexcept { + // Uses precomputed Miller loop lines for the G2 generator [1]₂. blst_fp12 left; - // Runs the Miller loop against the G2 generator (no precomputed lines). - // TODO: Precompute lines for G2_GEN and use blst_miller_loop_lines() like the [s]₂ side. - blst_aggregated_in_g1(&left, &a1); + blst_miller_loop_lines(&left, g2_gen_lines(), &a1); // Uses precomputed Miller loop lines for KZG_SETUP_G2_1 ([s]₂). blst_fp12 right; blst_miller_loop_lines(&right, kzg_setup_g2_1_lines(), &b1); diff --git a/lib/evmone_precompiles/kzg_setup_g2_1_lines.cpp b/lib/evmone_precompiles/kzg_precomputed_lines.cpp similarity index 50% rename from lib/evmone_precompiles/kzg_setup_g2_1_lines.cpp rename to lib/evmone_precompiles/kzg_precomputed_lines.cpp index 25e9e3faba..ebfb2a3af5 100644 --- a/lib/evmone_precompiles/kzg_setup_g2_1_lines.cpp +++ b/lib/evmone_precompiles/kzg_precomputed_lines.cpp @@ -2,20 +2,572 @@ // Copyright 2026 The evmone Authors. // SPDX-License-Identifier: Apache-2.0 -#include "kzg_setup_g2_1_lines.hpp" +#include "kzg_precomputed_lines.hpp" namespace evmone::crypto { namespace { +/// Precomputed Miller-loop lines for the BLS12-381 G2 generator [1]₂. +/// +/// To regenerate the line table: call blst_precompute_lines() on +/// blst_p2_affine_generator() and serialize the resulting blst_fp6[68] +/// as hex-limb literals. +// clang-format off +constexpr blst_fp6 G2_GEN_LINES[68]{ + {{ + {{{0xe547457b5803d28e, 0xa04c9204cec6827a, 0x30d1942baa126eda, 0x6f845b37e080e5dc, 0x37c92fab9ea539bb, 0x0643c42a1f6a0081}, + {0xfddf233864606368, 0xb667f347cf9d52f1, 0x6865350865cd31c6, 0x9e4fcc458c685791, 0xda1b03b43c10b649, 0x1378d5a36d32abd4}}}, + {{{0x1dd0773767275300, 0xa9c17f2a3bafcd7e, 0x9d3d896fecae6d6e, 0x7bc97690f4ed0da6, 0xf332c2894908633e, 0x06e24c8c8f6f83f2}, + {0x05a3bb58893e6a5d, 0xe121302e421ccbf6, 0x261553e775539726, 0x823c0287054407ea, 0x547e9daac976afd1, 0x148386b635328897}}}, + {{{0x98e615f0c0929894, 0xb2f9f43ebc6d38b4, 0xcfcd0ad95414c6b4, 0x77df6bd2dc1a92bf, 0x0fa752ebe1de4b45, 0x0107fb1cfd01b5ca}, + {0x5b81f925bec960ba, 0x31544e145628c3b9, 0x0d5b58d477c9d740, 0xf292b89d927b4675, 0xce2eb0a1487995da, 0x16578542c7bc37e5}}}, + }}, + {{ + {{{0x74bfdd645d7e9208, 0x3ba5ee1dde7817fd, 0xac74b94d19f87144, 0x87f74d68add9d596, 0x43ba27f7ce72f32b, 0x179a55d014bf8a9a}, + {0xca9accc9319c9007, 0x5a6897239dd2c979, 0x97ad796a00f2ffbf, 0x0f2fa1213d64f883, 0x3ee851573b2b0e59, 0x02151bfe04f37465}}}, + {{{0x7426d892bf7bcf5c, 0x7731af36dca032e6, 0xa9dfddaf9f607571, 0x75170343b9bd0d85, 0x7c9b869902a7f3d6, 0x14e3db2ca0901a90}, + {0x6c694bb35588c329, 0x9c0f6e66303d9b40, 0x4ea76f658ac953ae, 0xb09a163cdcd88ed6, 0x956f77637ee17485, 0x002152d96bbd34f1}}}, + {{{0xa5e24e340c7a03ff, 0x2a55e6c4506aafd0, 0xdf27253d42c22d9e, 0x096bc0ae1de6eca3, 0x8faa05522ac01da5, 0x12f135b565072ffd}, + {0xed049e877e8ef67a, 0xf0e8950b0af88d7e, 0x915653f3002f2c2d, 0x9836791f4d9480a2, 0xf79ee12f6b0aa3f3, 0x0688f93badbe50bd}}}, + }}, + {{ + {{{0x6f3d67eded6375e9, 0xb64a55d27d0522ab, 0x44ee847f06f0c0cc, 0x6b4691edcac19928, 0xe21156579b928eb9, 0x08c32fc615c7cfac}, + {0xe2885b7899a860fa, 0x1bc844e1ea8d722c, 0x70ec8c96d768c8ba, 0xad6225a5491531a0, 0xb55898dae5bb3b10, 0x15bb04252e63d409}}}, + {{{0x4d93c6b546b3858f, 0x0e446e7155994532, 0xb0001fc1039ea8e5, 0xf8dbc16565cb3450, 0xf866df99640edca7, 0x06966562861d99d9}, + {0x8820b0ef5415c898, 0xadaedc3fd0e32a07, 0x74764a3a6bf4acd9, 0x584f8c62cc291853, 0x8339e0772f704d99, 0x0b5430d1a1a59d9f}}}, + {{{0xe7176c3679935d19, 0x5a6abc7244b53073, 0x8d516fa9c4e4d165, 0xa17c0bddfcc7b9d0, 0x1d706354aaa482fb, 0x0aad0ddf6aaa6c44}, + {0xf29c597a0ab86844, 0x7277023a1750fe24, 0x013adc3ae3de6cd2, 0xec788cd5886e7e46, 0x584a52d850239628, 0x19812490153991af}}}, + }}, + {{ + {{{0x32f447ddab469744, 0xb0ecd90644e6bb37, 0x8f0a81f663d08d80, 0x393b2493aab1732e, 0xbd4c7df8bbe9c04a, 0x0559d7979ef2c53f}, + {0x9abe71bd3531865f, 0xca6d8cc7b1ed4c68, 0x76db754dd12c4250, 0x28bb39a78c8bd169, 0x3df4a5d1f4daa16b, 0x076da3b628f590be}}}, + {{{0xc49d21ffdff0642a, 0xfb83966288e61efe, 0xf1392c0c3d87eec6, 0x340233ca09268244, 0xb5c576c2c44981c8, 0x0f6294c9a60339a2}, + {0x65fcf1b4e95f0ae5, 0x63cc0ab71bf97d24, 0xe3e4a8f75bac444e, 0xcaf9bb7aa3ee1e7c, 0x385918c8b437e179, 0x1488c93ef0375ec4}}}, + {{{0x0c51df3801277a41, 0xac4f5be1f18ec633, 0xec9574cc97a61c7e, 0x5153bb0ed969d33e, 0x84cb5594ddb504ae, 0x0f14a618fc0caac9}, + {0x6195655ab4d0cbb7, 0xec63183ddc6e944f, 0xcc6ad2afed422a0f, 0x399889ce0d8b76ca, 0x9766c87f3a262960, 0x0f0b5b8bd3a96bd6}}}, + }}, + {{ + {{{0x70678dddfdc3b09e, 0x4581713cd2bf8256, 0xb8821ea2acb13090, 0x98c01ae399b2baae, 0xb593ae0a4cde7cc1, 0x18adbbd3232f7565}, + {0x06e11ce3af7da28e, 0x0ca19c56ec89b291, 0xd882f1730b12d318, 0x35376288c820cb40, 0x05e31f7b542ea445, 0x0bafbf9479b07c5e}}}, + {{{0x3bc587a9016c61a1, 0x71b9b965c4c26e5b, 0x89a7ffaf094c659a, 0x6b0b0d6298789c17, 0x6a9758ae389ef899, 0x17e06d65cacccc10}, + {0x6897fc7f1de2a2e9, 0x24ad43222ec51dd9, 0x29b1362eaa0a8f50, 0xf677d05dc3b9c73a, 0x09e35757379da914, 0x16b7f335067e8c45}}}, + {{{0xfaeb0133d6e8c469, 0x4152424643ed5012, 0xae0726e7916ff38e, 0x8582080256b27206, 0xcf6ae5f66602e010, 0x0aa3f4f94d6cd52a}, + {0x102bfca9de355fdc, 0x8a65facca0467f35, 0xa8dafc39f9b4c828, 0xbb9225ac00497d69, 0xf77dc16cebffeba9, 0x111984232684cd94}}}, + }}, + {{ + {{{0x9de83522edc3da7f, 0x93b71d38001e7b57, 0xc66cc99b1acd2473, 0x377fad1234c797b9, 0xcb28665db0fcc232, 0x10cf44f91645bdd2}, + {0x7207c28069ad3eff, 0x2ecd7227159ac360, 0xb8446b7c3553a34c, 0xac9a9650125dc8d6, 0x3747bca74528c5bc, 0x01910df79cadeb8b}}}, + {{{0x1ef51702a56b796a, 0xa995d0c033dcaba8, 0x82dd0aaed7cf2863, 0x08db57db9d71c1f0, 0x2805ca7f8ab721ec, 0x0ea69d0223a03385}, + {0x4bab3a76d8664a11, 0x67ff152910dce4c1, 0xb3f44cc97a4bacda, 0x57139daad0aed52f, 0x113b7e0680b08405, 0x11b70c039f4ee0e9}}}, + {{{0x81671725582412aa, 0x5f255976864b9448, 0xfb4fe54ac4d7d0ff, 0xaca1c4a888e011bf, 0xf2508bf022c3d669, 0x0e5554fc532e26a0}, + {0xa74f0a93a80a5d83, 0x647863c5f4f5737e, 0x6fb8ebb3f3688c77, 0x0f31860fe9ea719c, 0xa490c46a37a1f331, 0x0d7a7999572c7dd8}}}, + }}, + {{ + {{{0x299504eacc73012f, 0xcf6a6950758f98f8, 0xdd54c98472158dae, 0x552102c32548404f, 0x2c4be42eaa6ca6ad, 0x108089bf4b475a10}, + {0xcd67d7ce040290a8, 0xc54120d3e38417d6, 0x4a5efe25d15794f2, 0x8130a9439216861f, 0x0f29abaa66a06951, 0x15ecf449986d214d}}}, + {{{0x4e9127e0886cd8cd, 0xc6ad62e46cc10cd2, 0x660eb5425d672c10, 0x6f6edbbdc5cadf43, 0x234c77bddb11e614, 0x1477622b1adfc0e2}, + {0xaf3239744b069ba7, 0x510c8d7ec8a3372d, 0xce4a17417f014824, 0xe1e3810a2f051c2d, 0x7d13ccfffd135d46, 0x10648195a6fd940b}}}, + {{{0x1a171cf2f832f923, 0x8faa8451e7f44933, 0xe879f0cdcfb47602, 0xbd99e03ca2cdba73, 0x8385793516b584bc, 0x085777b856e2d31c}, + {0xebb75606d0e8873f, 0xed054bb0344c03e4, 0xe1f5c78856c9df48, 0x96754128cf5b7d9c, 0x5d8f2d7267112c37, 0x155e8492cfff0e98}}}, + }}, + {{ + {{{0x8cf89902e301aafc, 0xacaebd8cc3b6ad69, 0x2eae2286f19f64bf, 0xcfcb81acf26ca7da, 0x1da1a070323163c7, 0x1668b3615d8bd448}, + {0x1a956e96cf02cbaa, 0x26e92f8fe1571d16, 0x92d2993e4ed73cc4, 0x5916cba9c5faa651, 0x12ef4b9238b24b0d, 0x040eb5b6f632fadd}}}, + {{{0x10503ed23fbfd427, 0xc5a0d8bf47bd6c14, 0x559745f24967dabf, 0x6a8bb24bdc83f38f, 0x9e7cd6ae212d6cc3, 0x14c7c72c47b91e84}, + {0x2930de43349f7378, 0x3ccdb2ed020a36d9, 0x8876836ee1f94161, 0x32275a74b4834ff0, 0xbcb936fb00bb2c21, 0x0af917f64efcf1d6}}}, + {{{0x9c9ac9f46ad18bb0, 0x37a436e773d08640, 0x4e003a7fe0942885, 0xe6c74d1225e3805e, 0x2b6588598cf71a6f, 0x07b552a5a3a3d2e1}, + {0x3798e44337ef3569, 0xaab484856b5e4075, 0x42f2e410449d03e5, 0xc1c0ee085fd4c61b, 0x93b24184235e51a8, 0x0d70cf606519c957}}}, + }}, + {{ + {{{0xe8e42b320ac55c39, 0x9bf2c6ad11d1b291, 0xdffed5f58ff5edc1, 0x788525142d4c96ab, 0xf43a09c83c721544, 0x05e861825d823b4c}, + {0x5232ded5295cbe7f, 0x1979315d403d37c8, 0x6d6e54dfce1db5c5, 0xc0a18e4ac07aa8da, 0xbb5c314e38022d71, 0x1264563b2fff0be7}}}, + {{{0x892f20b9fbd0050b, 0x7c77d06173c5cb71, 0xa716bd37f1bd88d6, 0x9fb87c47f85e96f2, 0x0da80c8d321e68e1, 0x10f2259b2ac62e19}, + {0x7715d9360f394bb2, 0xd6db3de79cc02c7b, 0x9a1cded5b9c69faf, 0x5057447414ba21dc, 0xbe68d4fd425be759, 0x118b2ad7b3979e29}}}, + {{{0x13e2af9946b0c7c7, 0x3f1791c962656a60, 0x396b34658992e4c5, 0x5dc398084308fd2d, 0x03669791885d453c, 0x19f4e44ea0a1ac4c}, + {0x582e081e239843bb, 0x0d9e562147b22e5f, 0x451cb4cd405be175, 0x9512cb8cd03ab965, 0x20e7ff2f6d3c1c0a, 0x00a12957b7ce6a86}}}, + }}, + {{ + {{{0x0c22a95cc328ac5d, 0x1d7b0a1facc850e9, 0x2c880eca047d90fd, 0x854be9173ab7d417, 0x1cd5f938001beadf, 0x15894e29f9e55e03}, + {0xb967aaf77ceb68a7, 0xa870822ef7e3cec0, 0x4b7aab48112667ab, 0xd07c2179faa925f1, 0x646088ed6a667a3e, 0x197e2219f6a48c31}}}, + {{{0x9f5c05fbf5d35e44, 0xec00ff1b6b941bae, 0x055bb3e795f82ddf, 0xe907532c4cfa8dfe, 0x4d0b1c0a7365d842, 0x016b836eb1a23ebf}, + {0xfd986f4a39df98cb, 0x1cf96e9d21338a86, 0x587c859c4b11a40f, 0x2a32da1b52821f75, 0x743525c0f0b8a8d4, 0x105206a5042d37d4}}}, + {{{0xa8fd9a0265d8c508, 0xc4edd6fa77412050, 0x4c63d051abb761e3, 0x966f6277f67d79e1, 0xd7787c44228b92d3, 0x0c7857f886114a8b}, + {0x38cf43c6892661ec, 0xc47451a47dd1e7b2, 0x4d129762dc69f21d, 0x68c33836e651ea79, 0x578a2adb63cbbb31, 0x0acf7990e4c286b7}}}, + }}, + {{ + {{{0xe153f6c19d79dcc4, 0xea17bd01deb5afb2, 0x6c8a156e08de6d72, 0xe7f01710dd687922, 0x70acf1822ea2babe, 0x17a0e4034d16b9b2}, + {0xf1b2a38ce3bf6d3a, 0xb69f099cf1438d22, 0xa8491ebcadd408cc, 0x2fbebe31eb52ea24, 0x1fe2029d2901e5d7, 0x04afff13f63badf8}}}, + {{{0x412d934cbdc9e620, 0xbf71904d9c3baaaf, 0x38cec507d26611e1, 0x2f0cb4495f85acd1, 0xb3ffa3c9b6bebc72, 0x0146de13661c7c72}, + {0xcb828e1858055ee5, 0xd320700a17b8f395, 0x782cb698f2db7821, 0x9fcf887ec1a2188b, 0x43bac4f7677b0462, 0x09c2341bd78a5f23}}}, + {{{0xef5e5e1b6754b416, 0xecf08e54dc10414e, 0x7abdbf47a41bff84, 0x475881202e776488, 0x9f1b4aff31504618, 0x0ce93162579480d6}, + {0xa0b5cb27ca237c68, 0xcde882bfde9ecf92, 0xa3cb2ac8c627aab5, 0xff937642474f7d4d, 0xa84c7364e2ada6c2, 0x0f251dd0c78df8d7}}}, + }}, + {{ + {{{0x56cca43fbcb947ac, 0x0bac6d619201124b, 0x9caabca0fb440e66, 0x7dcbdcef7e2249ed, 0x8e3702e35c9be342, 0x11cdada49dcae95e}, + {0x7f4b0cb3839d3afc, 0x47590d57aff04242, 0x627915b80aeddc8a, 0x158661c02d6cdc44, 0xc5b941effd7f1b2f, 0x008ae31d985201d2}}}, + {{{0x97a77ec53041d2e9, 0x6c9213dc6d4f6073, 0xaca5b003d1bd6249, 0xd66d611c1faf4b28, 0x0a711d18435f1c01, 0x133e860b930199a5}, + {0x4d7e08c11c14ee99, 0xb3173ed1a0769326, 0xcb24b99b80a452a0, 0xe08b158eda9bc03d, 0x76eb3bf205b2aed9, 0x05ce06ae1ec4e72d}}}, + {{{0xbc3c92678b9b8d04, 0xa7e57d0abe54ef73, 0x56aacb9da9dbbdfa, 0x9230843ca62acdbb, 0xee06c1627ef3c404, 0x0b2835511c75d5a3}, + {0xbde04a1c9fc9f571, 0xb92c982f44629040, 0xfbcf849251de9b4b, 0xb55aa93f1a66ca49, 0xb6e8c33e7ba49767, 0x0ea6b480ea56b2bf}}}, + }}, + {{ + {{{0x59fe5d1668b06514, 0x44f31d2547fdf0e2, 0xdc51c576df832de1, 0xd19e3ac149c2f5bc, 0x6b2460bff6cc6cf0, 0x1288778a66109028}, + {0xc47141285c3840a7, 0xdd4d90aee95934a2, 0x07ecc291de26c087, 0x16bb0c2b3dbe205f, 0x06ae4686c9b81cfa, 0x035358ca5bbe8a49}}}, + {{{0x1ac6311de262c74f, 0x8cf21fad86dfbbaa, 0xfe54e5c77a555c22, 0x1daa193cf61f3825, 0x20bd20dbabd06278, 0x0fdda2e14dc12f9e}, + {0x9ae01b04b4f79608, 0x4c77c9e47449a0da, 0xa904dd00a4fdaa88, 0x6e56d4d01117a152, 0x41037684d9f37cdd, 0x1639d6ef0bff8d98}}}, + {{{0xf8a69ca9ceae34ba, 0x86dfc80ca8049727, 0x74bda49117a35237, 0xea72c883ca49936b, 0x45063c43d8f9f171, 0x0afd30fd2a6da504}, + {0x9b646bf24eeb857e, 0x33ca0066a44699ad, 0x9afb676388d753a2, 0xd1770a3fccaaf0ba, 0xaca4cbdc820cd08e, 0x10409a92d81cc73a}}}, + }}, + {{ + {{{0x3e538c4dc1d8b628, 0x6cb1657b878108bc, 0xcafa328e61eb2dfd, 0x6fcc4b452f7fbe6f, 0x28da465220b4d505, 0x0c431b4499efa89f}, + {0xcad376670b4efc7a, 0x175d40f5a6f874c6, 0x220a67cc7e854113, 0x63aecff57c61912c, 0x30bee0c20732cec6, 0x158ad4015d81f14e}}}, + {{{0x2916d602f8353f1d, 0x7f8219c9e8bc91b4, 0xe969ed03fa3d079b, 0xe7c17f27951d74be, 0xf81d0d1764dece4d, 0x12f7b19d492df76a}, + {0xb6a0a4ca77373e3e, 0x82ae4b3c45bf4468, 0xf542a65223b48705, 0x458938e7f69bc8d5, 0x79a638a5c9f97a8d, 0x046c05f1ca1cdf10}}}, + {{{0xfa0ea3ed905879e7, 0x71e988fe8262c735, 0x285a5e01fb51b33b, 0x767b6bb9599f665f, 0x91731c2a5d7dd4d9, 0x059d0cd2758e5db5}, + {0xb264870a9cf6f837, 0xc02f0eac87180b8d, 0x0215a68246ce2dd0, 0x232acfa5e49e9639, 0x31dcb5effde9c1a8, 0x02e239bbadb5c1c2}}}, + }}, + {{ + {{{0xd84901810ab8a03c, 0x3ce52ead7d0b1e0a, 0xe09b6f1931040a96, 0xf06b529215a7281d, 0xaf974fbfa57c99ec, 0x12cf98968cc7488a}, + {0x714f18157720688c, 0x0df3fcdf568580a1, 0xf1a596bfb82e51b5, 0x65b70e0240911e0a, 0xc573e546f154210b, 0x105465e28d8e6d76}}}, + {{{0xbca5073454aaea8e, 0xc7320b852d8f35c2, 0xe1fb088b2e4b66d2, 0x5ddb455b1062ff15, 0xf99a32bb2c5584a6, 0x07a7315f1cb30690}, + {0x74b706524d1c02f8, 0xd8b27b33db657954, 0xed5ab6c69c493f01, 0x1bbbdf07f058e1b1, 0x7a00373505f20eb5, 0x05b096f3569862ad}}}, + {{{0xe7ac3aea71034aaf, 0x5795659eeea1ef5d, 0xd30739102c159ff2, 0x991274d2140ac9c9, 0xb405d7f3bfcb98d5, 0x06d6b97b2ff11802}, + {0x76995d4b0712020c, 0x6be9ccbb1f80a121, 0x6d82e9f3bc15a777, 0x3ee93b8b4cc7c53c, 0x7420ced9b40092f3, 0x04368c6c0911c869}}}, + }}, + {{ + {{{0x2bae022289d5972f, 0x953ef8afcba2f1e0, 0x1fc13b17bd485e01, 0xb94901d34329b695, 0x2c8caad360d6805a, 0x09d24759af07212d}, + {0x7fa3b11ba3708252, 0x8a9af4ccc3a7b681, 0xaf9e6a35b336f2fa, 0xeff546711759ed7a, 0x53df532a6ceecb0e, 0x10a99fc992ae3979}}}, + {{{0x864972d8f90ef2bc, 0xce24f14cff73ad45, 0xeb65b20f66ba1d7c, 0xbc5e600f9eb64860, 0xcc8b89509ba18fc4, 0x0e549c965e5bf657}, + {0x31c94593d1e74cab, 0x9ef9720ef25c5420, 0x6f339df9e287274e, 0xb51b9f4af0033588, 0xa9e1a8ebb319202c, 0x17135621e779aa50}}}, + {{{0x82d0d5d14d1922b2, 0x587143e401a0669d, 0xb82df798986ab463, 0x18a3bfb52c9a1432, 0x45f9ef4196dd3da2, 0x0662ddb7a0d4a126}, + {0xba10d3e160612442, 0xcec4be9cb4a7b8e4, 0x41a36029da348d3c, 0xdfc57c091e96639d, 0xb76510304bd08ed2, 0x1731211f7626a87b}}}, + }}, + {{ + {{{0xc78fc6b28545a1f5, 0xf371370fe6a5581a, 0xcc7fc697a698f808, 0x3807d7e480ba75c0, 0xffcb4c698f80c40b, 0x04323c8556eee7cc}, + {0xd6d36b3b81533d06, 0x120bf6e76ad2b1fe, 0xb29ce513f1d777c3, 0x02cba0865ef79fd8, 0x3467f7bed979903c, 0x15f3e230a7755a8d}}}, + {{{0xf295be74813f4490, 0xaddb05a6af15987a, 0x01a464fbab4950fa, 0x873ef0d5847cdd4e, 0x6e9ec3454eb46d3b, 0x117bbdf1bca7a097}, + {0xe6921e26ad2e3cd5, 0x27ab842e711685fd, 0xf0f9f4a2a803e986, 0x3a330247e77b3b75, 0xfcfd11caccda7a9b, 0x193c7d4f51bf9725}}}, + {{{0x07a4d1f12c2d989b, 0xdcf1777647d65d76, 0x1ccc632453c67379, 0x17614ca7fc9414ad, 0x435404c14765555e, 0x108cab018f6bed17}, + {0x41c6cea38287166e, 0xd18125f44c27463a, 0x27de9a55f0d66d1e, 0x5314577ddddae9c4, 0xb21bed6a77af007d, 0x0be8b0f058a9c28b}}}, + }}, + {{ + {{{0xbe30f4e73c6f2dc6, 0x2a274576fbd6d67b, 0x7ab975b94f28c6f3, 0xb45cecf5f6b6f4aa, 0x7ae428dbddeb3468, 0x13d304be9359b02b}, + {0x2a18faf18154bd07, 0xe871320a74ff483f, 0x58d9d9bfd8a010a6, 0x27f2825e3bdc4379, 0xadd4e56badb3907c, 0x17a4414ed22edab7}}}, + {{{0xc846559939ccdb9b, 0x2d0affa28cdebbc5, 0xa81a712a1f2d667a, 0x15a60377a0097db5, 0x0c32686330836b45, 0x148bd87993b6ca8f}, + {0x3f6b0b65feb4dbd3, 0x71177e9eb29560a9, 0x70154bd83bedc1a8, 0x3d3eae8b9c7485f7, 0x5bddbbf8fb6de7d1, 0x0386f9be3ab0d31b}}}, + {{{0x4b5ce48f7b70243f, 0xddb66c3f2fef7abd, 0x8aed2d661de339d7, 0xe2bb3e97852a8941, 0x265734b9f2ff5c4b, 0x03bf2f014952661c}, + {0x582a73de6b8b813b, 0x4c5f48a76944d9b0, 0xc5cff7b29bef83ba, 0xf12e92090323f0b4, 0xe12469c1a2089b07, 0x186e4b2f431fbab7}}}, + }}, + {{ + {{{0x9e81fdebb45eb999, 0x8371e6ae2dcb5f33, 0x012eebd6bd816591, 0x7c6e4061d4e19a2d, 0x94e34676eea4977d, 0x16a7f3bc876d8641}, + {0xeecd0f7a0598a3fe, 0xb78df29bc194461f, 0x8d36b088a43c6a30, 0x3a3f6f86f7028fe9, 0x6469e6ac6628a949, 0x0c96ca6c0eac9a03}}}, + {{{0x43985137159e587b, 0x7c09aa97f2df1652, 0xb8cacfe348f5f485, 0x1422a6eb1e49641c, 0xb2dc84aa96335312, 0x14da532162af0d37}, + {0x76e03f9665d1d56b, 0x9dad8c3b634d69ae, 0xd9815e5b0fe19603, 0x6fe625cf3a4f20d6, 0xe9686d0d76089532, 0x08a96a99286fb084}}}, + {{{0x02966f2d815c6c54, 0xe6f77545fcbce404, 0x18638e6a712795cb, 0x6a6e72598a24789c, 0x173ca7892580ac08, 0x039af608ea5f139a}, + {0x50255dac622b6c37, 0x58eb75bd29c1a765, 0xa394aecf10a9d85c, 0xe10623ab2cb28925, 0xfc30c667323c6a4e, 0x19facd005c88dcf8}}}, + }}, + {{ + {{{0x9b100d703b4223dc, 0x0fe8a0443c979756, 0x0ee6884a2f554423, 0x1d56c2c0aef40b97, 0x924040459b154a61, 0x0789dcceac7aaba9}, + {0xce0c7ae42b967956, 0x110ffd2c1fc742dd, 0xe3ac2f1a9c81e062, 0xd078ab578bfb02ff, 0x04d5932b0d90f927, 0x03d9d7ea87938012}}}, + {{{0x5ca11fe3ad4cd531, 0x25ade4206fa73b81, 0xededa4182e1c4caf, 0xaada5ebf70d98168, 0x7e724b5fae760154, 0x07beb1cc4042e38d}, + {0x8b71ab182129a894, 0xb20193073c606ce4, 0xa94d974be7f1ce7d, 0x47fed9c5ba68cd2d, 0x6ccc3ef36de88403, 0x09d528c216d8e3e9}}}, + {{{0xcacb1a10327a15e6, 0x665194183cc08848, 0x3d55cbd5a4bb62ba, 0xc07414fe66de7aae, 0x4759dace9b0b947e, 0x18c2f2cee6ac8385}, + {0x1a0b6e7b3fa028ec, 0x4935fb371b4a1435, 0x3e15815f8b7616ba, 0xbeb708913ad910a7, 0x29cd1469a4677fe6, 0x1057d972a4e36c91}}}, + }}, + {{ + {{{0xa7c8f71c027a6931, 0x95fc9f1d861495c5, 0xed05e96145d7a870, 0xc8d5b0a4bfec2e17, 0x8c9238ec48c78dad, 0x0d27c4bc335c0604}, + {0xa1765f3e254f9a4e, 0x4f5ea309c65e682c, 0xd7f2c8dd1ddf996a, 0x938bda887c571609, 0xe3457d062a59fbfc, 0x046d52614b643b36}}}, + {{{0x91026d6c66a2abc8, 0x69c0668de53b32f3, 0x51a0a80660d0a6ba, 0x52ca5b0a89a4e36d, 0xaf9aed942dd151c6, 0x0cfb9d6480356705}, + {0x9f7f87aa1987dd9d, 0xf6f75baaccac60d7, 0x1eea8999e0363686, 0xdcc0c954b694cf72, 0x21793204c477b228, 0x0b5a754ff3c5928b}}}, + {{{0x000a2e6a3618fe42, 0x1f801f04dd9105d2, 0x97cc815a1c90ad7d, 0x6073c0496f5b44ba, 0x1636866f98f33d02, 0x0373fb8e31853dbb}, + {0xaa73dfbdb53d16bd, 0x842f11759385e1db, 0x202de2d28c9e34fb, 0x93f21acf055ddb54, 0xd83e6ba92b7a2e41, 0x07c6bdabbe46b3d6}}}, + }}, + {{ + {{{0xe55f61fd501c5861, 0xc8f2ee9dd2b4b219, 0xf242f9071c012560, 0x0ba29210cc873ac6, 0x12c45b4891d67827, 0x0649b158ccbdede9}, + {0xd1fe165cf3aea1ed, 0x1a0fbd3a389f4e69, 0xeb0daaa4319f6c91, 0xa6161f65914d4b61, 0x7cd2e924ed72dae3, 0x07339528336921b4}}}, + {{{0xfc94c958c554b28d, 0x04e749cc9dc898d2, 0xafd5384b56ab931d, 0x95899f7d05e05c7d, 0x7ed9647106787d3e, 0x05c2fa9c20c8f819}, + {0xbf1f05750dc0f4a7, 0x63affd2a7884e0ef, 0xe9dca61e4d09d41a, 0x2363dcfb2bc3e412, 0x1a57eb3ffe6d78eb, 0x18e049547e067f3f}}}, + {{{0xccebfcc6cdf0fa72, 0xa9d538bc9c9f23fa, 0xa724d08106aee68c, 0x6bbdd5cb339a4c5d, 0xc890802c8b82b965, 0x059891dba12e34bb}, + {0x28037391159c2410, 0x99a0260ba7f6f435, 0x1f45ecb973adf2e0, 0x9555f9fb5a93de14, 0xd63334a8d8fa30bd, 0x03ce076561053206}}}, + }}, + {{ + {{{0x6a98760e9aa51110, 0xa8d69fdbb783058c, 0xb07ed276152084de, 0x56ca2b48edd2972b, 0x63a1ff6f425debc6, 0x11b1603f1bfb5dd2}, + {0x2510e759d79025c2, 0xf14a583bf2cbf330, 0x3fb815253e944701, 0xf750810506a8ad0a, 0xceee48acaf6875de, 0x1841b5fe75d663d0}}}, + {{{0x02208813c3093476, 0x149933ff6f6098fa, 0x71472fb6e0bf3893, 0xdb104a9263aa58cd, 0x508d948208ba4ab1, 0x0fd40e47d3ac0eb3}, + {0xe03d5c8242187ff2, 0xeea978f1a46531f2, 0xb57a13f4645a3d79, 0x0e2a9cb9f85e83ce, 0x76ac424601b4f544, 0x110c173de2847917}}}, + {{{0x80bf82706c8cc797, 0x9c12943f30d9d2ef, 0x6936b523754c05de, 0x2dd61beb5a005acb, 0x7b0b051e80c4e47b, 0x122bb1c0da3fb9ed}, + {0x00ae3f08458877cc, 0x4daa2d169186a12c, 0x5f72690e565c435b, 0xfbe046446e5f3183, 0x2910d8182d38bd13, 0x090cc31c5183d8cf}}}, + }}, + {{ + {{{0xebbee76b1a1b9b2a, 0x4318d25986a97a3e, 0x9546c6b0c0226c26, 0xe63c6489727b5dd9, 0x1055511e8a4b8fa8, 0x0825371c652c4168}, + {0x255200043f4fab8f, 0x2e20b113cef9fa54, 0xcfae28f7a5cde583, 0x5e511be5a9148aa1, 0xb44fd9dfe030d75f, 0x0db4925190cc2b2c}}}, + {{{0x2f98092be1b16652, 0x20abfa566432271d, 0x2a7b4891ff22180e, 0x8894a35f0bc12ccc, 0x67f7bf713c954fe2, 0x199fca412eaa1e34}, + {0x59a59ace5522cc3f, 0xcf20e01ff0a48a46, 0x0acc3f5218ff80b1, 0x7f3d3a70ca8e44d2, 0xf24ba3a296db6be8, 0x049661c9ea873ed1}}}, + {{{0xfc5e8ae94498fd15, 0xe58cefcda6e2cae1, 0x494140419090d66c, 0xb3ae0cd92c3ddfc9, 0x8d199a9c91f3b42b, 0x02b3588400f88afe}, + {0x1fdcd0d86d18ae49, 0xba73dfb38cc5afdf, 0x0375d3e69e8ee3c4, 0x10697e32ec1c3c81, 0x96d2e3c990787557, 0x053dac5f8c1ebe41}}}, + }}, + {{ + {{{0xac0ac445fc7024cb, 0xc75afff481c2aea0, 0x32b31625bb8ad96d, 0x2531636fdd86354e, 0xab1c3e581c31cea4, 0x15548279567a60ef}, + {0x5a0df4c780edfa90, 0xa9d51d36e890b2b7, 0x2ff2ef666c6d14f5, 0x15610670bd200708, 0x41211e98bec7e333, 0x17081e64d3c7f257}}}, + {{{0xfe77cd46fb0f89ee, 0xbca8a01db917dffc, 0x47242255d734a9bc, 0xc8e7435b6830467e, 0x877808247acdd116, 0x0acb8e8c09967095}, + {0xc5c04956bfd4229e, 0x8eb32cc762b550b8, 0x9952e8761ee2f080, 0xe9c721d1697440dd, 0xbe27a3389b81ad4e, 0x0f65e2d5dda9c358}}}, + {{{0xc5acb423c74184a5, 0x4cff2a2e84715f8d, 0xce72f3e927c6dedd, 0xa310a38b6dd93639, 0x4bc940192ca80aa8, 0x0a442421c59c4bf4}, + {0x36ed99c50567c637, 0xeb3fd7d4ebfae424, 0xd9c13316dec46be5, 0x3918a2d27a5de1e9, 0xf2c3417762ca06a9, 0x15761a6effec6527}}}, + }}, + {{ + {{{0x56a89b92286fcd47, 0x13c7a8c0d5100783, 0xe9afdb9c191db580, 0xd3b4238393b06de0, 0x22daa8a671c2e8a3, 0x0a16e7ae5db3a513}, + {0xa0b5c166afbc5931, 0x298d2a96e01f5fea, 0x0cf6a27e9d73021b, 0xda3188078ccf010c, 0xa28dee912fc0b232, 0x07c2f7f680ffa478}}}, + {{{0x10d777f388130d77, 0xda19a519bf1b16ce, 0x98b22019449c58f1, 0xa0235c372fc29332, 0xdfee6dcf22852353, 0x08f4328803030ea6}, + {0xc45c5f9c88484696, 0x5ad085ab1d1e77ed, 0xa84fb2124c4b0f5b, 0xbf8ca1867650a859, 0x79e912bd4e9afa24, 0x16b41dd743e0dc74}}}, + {{{0xa369b6a0bd1b1840, 0xbe01fc6f97eb914d, 0x9e15e9707d1f1755, 0xe98060f2774c9271, 0x4d5cf15d86fd5769, 0x0c10b0280d9e75fe}, + {0xf39b90bd323c9a5d, 0x72cb8e16accafcdd, 0xcfd18d405d344ff8, 0x866ca80babf1c7e5, 0xde02e105ede8fdc5, 0x00ee7d809d5de726}}}, + }}, + {{ + {{{0xe1cebdbdad5229db, 0xe81c48b17c637836, 0x001e23de63309f59, 0x64a45d7ce6b33120, 0x365db0e5c5934b82, 0x073ced31c269e4d1}, + {0xf328f75a6d00b82a, 0xd011a27714ade08a, 0x3ba974e8eb0522f4, 0xbb1b7b115beddaff, 0xcf94a6adee0f359a, 0x02e5b346321743a0}}}, + {{{0xba693e35354a27b1, 0x87303f5e9836e3bc, 0x59a64cdb0be5c309, 0xd718f0eb1274f8ae, 0xd542d08c974595cf, 0x15ed841fd010d4f5}, + {0x742b06d77872a04a, 0xd7fb63d165886f7e, 0xf036cea5e95720da, 0xf957069615594996, 0x8c52eaa3812d9d74, 0x0b8b836b6b914b82}}}, + {{{0x1c69bac36133e625, 0x2c0e307a8b1988d9, 0x0bd0947dee49827a, 0x3d867c354d40c090, 0x67849af38131b83d, 0x170965a92616c353}, + {0x9f0c68a7c9449a1c, 0x06fab30c666fa00c, 0x4e09c2d802f894f5, 0x933dc154a69840e8, 0x5bd12f4b892fc026, 0x0228a60592c473a5}}}, + }}, + {{ + {{{0x9331cb0f70afa264, 0x87de02e469a5c1c9, 0x2ef0d1aa04837736, 0x6852a7edc81159ae, 0x55f7049257c27a41, 0x161e2722f74d81ac}, + {0xbf46dcf1d905d4a1, 0x4b043bfee0971c27, 0xb5f23135e5c8f466, 0xbaf95c1d64c68cf1, 0x0fb47c76b3dfe99e, 0x19b3aa2e3c76d82d}}}, + {{{0xd315e736d242f8ec, 0x132370d8fa5a78a8, 0xda7ba834a624cec6, 0x68b1f7619ea2e22a, 0xce6d6c6c64a7b5f5, 0x077abdc38cf6e048}, + {0x48dd2e412f330e24, 0xae4cf941ef30cb66, 0x3fa6cda8636d92f3, 0xe85e51840f902072, 0x6d6776bb30c5076a, 0x04ea58b184ef6955}}}, + {{{0xda1f35d8cebf5ff7, 0x9a8d0887ae608638, 0x78f5422228fd9d8a, 0x15ea56ececf41823, 0xca69bd07694fab33, 0x1262c0fcb941a519}, + {0x52f6ce12ac54330b, 0xbb46a84470b978d3, 0x0003d97902707ec9, 0x66c8a8426e60566c, 0x2f13f392c51ffb2b, 0x0c3742d3e540de06}}}, + }}, + {{ + {{{0x1850d0d023ef4269, 0x19b161e545349f88, 0x94abd6103684c2b6, 0x009564488fed7ba0, 0xcb3f73b949db0661, 0x0a5ef88a0705c563}, + {0x38b8f342659bea83, 0xc2fb69ea580fea56, 0xeddfa8761e75bd23, 0x18e7006054fb08f6, 0x2d498447d5179ae3, 0x09377631977f2f9f}}}, + {{{0x0b45cc6840faeee3, 0x054d568832c8cfc5, 0x6d2fb62f73a12001, 0x85f50f6213cdc8b4, 0x116a9952d81ad3b0, 0x049c29dc333a1764}, + {0x38c9375401b3abc6, 0x2ae633e3dd17f9be, 0xed868525f85fe993, 0x0bead87d9a92902c, 0xc0bb461b5b5d0852, 0x00dec186a94e80aa}}}, + {{{0x85e8867dac12634a, 0x2b84c1e10a497999, 0xd10a08fb73b49d84, 0x21b665038a9b14a2, 0xfbf30f654f81becf, 0x12bf09a268d35275}, + {0xc58028fbb028bfc9, 0x466953d4a729c040, 0x918c0fc88b995f44, 0x3434d4550f7511b0, 0xcea87bc125d9863c, 0x15e645f706884b02}}}, + }}, + {{ + {{{0x6dba88e6a65ef4ec, 0x7dd1dc30cc25d569, 0xf76fe435f66de6e8, 0x67e3fde0ef1a0199, 0x780693f03b571ea5, 0x07895f67398dc597}, + {0x9d6ebc2cb24cef93, 0xb66e7ef74d38037c, 0x77847ba3b254ccd3, 0x8ef8a9aa38666837, 0x258fe0459a596a10, 0x04b28caf8db12b4f}}}, + {{{0xbcac7bf664691078, 0xc857d6307bd71b5d, 0xd68b38c7659d66a6, 0xa299b5e9791af057, 0x3e9afbee59ac8fee, 0x130b985a72e00198}, + {0xcdfb1e8c8156f4d1, 0xa7f48355e98f207b, 0xa4b33317d9b1f05d, 0xa6041d162a14f60d, 0xbbfded6b54d0a539, 0x053d353e02c11e2f}}}, + {{{0x6ee249cafe40890d, 0xf7c70b65cba0a74e, 0x851257be5500cc29, 0x90e41329296f1472, 0xbb32b814ab2d63f3, 0x0c554032763ddc7d}, + {0x285a602ae1d7635e, 0xf7951b02d789b5bf, 0xa60a7f75f0049671, 0x1d18cc853c21b9bc, 0x3ab9d953e4cd6f1d, 0x11bf721b697bd3bb}}}, + }}, + {{ + {{{0x71febbdaa6ca6816, 0x8f873326554e4214, 0xc853bc4ebc5b8ad2, 0x41025c976b069ad5, 0x109e51df1e661213, 0x0093ed7bcb3a0f7f}, + {0xf4e67535b2948eee, 0x1131fdc448f0f51a, 0xff0caf1a6536f22e, 0xd88e38fd41941509, 0x978ffcdbfc759ef5, 0x1490028fb6a02282}}}, + {{{0xdcf31514ca9a6299, 0xb12c9176a3bb237b, 0x4341c035fde7b8d9, 0x9ac62565e558f23d, 0x05f7f2bec3e7a219, 0x08001353a8b88be1}, + {0x73ad2470671b705b, 0xa3d18e04fddc1de3, 0x2ebb7e47b03cc1fc, 0xc911bd6d41e694e2, 0xc066a6b742ebe580, 0x1791846a46f99ad7}}}, + {{{0x6b1559f6563f29ee, 0x937a5740b3cd42ed, 0xdb45b25f719e8437, 0xde23f8ca26841231, 0x7e1385c4f87482af, 0x0ad2ab425e892a05}, + {0x5d089bdfa648e7aa, 0xa8da8148c275f10d, 0xb2328633d937112e, 0x133808f35171e658, 0xdc07744bfdb4d7b9, 0x0b9d472c01bb2a84}}}, + }}, + {{ + {{{0x5ff3ef87c7a2649d, 0x2e9d9e93f5a0166b, 0xeb1352a0ef072ec3, 0x1a1fc17b0f17fbf2, 0x9be52df1f919381a, 0x0dd47d959be3682a}, + {0xc729c7965fa32f61, 0xcd0d793612cef86e, 0xbccb226946125b8e, 0xb5a03206c0f61a62, 0x880c06f3f589f065, 0x189f8b5363c2c447}}}, + {{{0xce33e817b7ed1c5a, 0x5af554f6a5ce4d9b, 0x60982175187c9c2a, 0xd6d19f9c80658508, 0xfbccb1ae3758aca8, 0x19fb251016fc2e3a}, + {0x4e02ac1178241238, 0x23a56f155e1b1490, 0xa329d1300cc7e14a, 0x7714572b7672e10a, 0xc2075813395db298, 0x05fab3d599e8db71}}}, + {{{0x4a4da910f905eeb5, 0xebe757b3905887b9, 0xc9ad53756b4da5bf, 0x8f1378426eeb47dc, 0x935858212b29f2e4, 0x08f4921d7d0c5873}, + {0x1607547b1a9f4161, 0x4e707b60fffe8b38, 0x4d4cb01feee299c6, 0x56bc10d2b8a790bf, 0xcb34287afe4b0138, 0x14c7ee1860f49d6a}}}, + }}, + {{ + {{{0xa66b89c6e35929bf, 0xf32c9b320df4b7e8, 0x250c152b0a96c734, 0xde8de2ab8f3213db, 0xde7d98f953136175, 0x14ec363acc8831cd}, + {0x287501b3f2d8ed96, 0x9b7847be7bb444ea, 0xe9bd1d317322e4dd, 0x6b3e6de636e67774, 0xccd0796c27ef4457, 0x024548c1be9cebf2}}}, + {{{0x6c04d5de994c912c, 0xcec6312cf700b931, 0xd8c9bbd785945b65, 0x3a6095a1c2375450, 0x4df8789ebec2caf7, 0x02ea30ae9fc0858c}, + {0xc75c372b7c74b6b4, 0xd7d72b656ec6b076, 0xd7e73e817fdc5602, 0xacfac9abba950366, 0xd66e1cce4df71ed1, 0x060720b83aece82a}}}, + {{{0x259ccdb58a37a7f8, 0x768c2254b6c8de9f, 0x4a999f100b23d5b0, 0x5753849ed9597930, 0x073973602922cad3, 0x11f6f84c9ffc1556}, + {0x25681cafe9a67af3, 0x01f32dca8654d55d, 0x962a5b513eaf9481, 0x478f5e119daddab7, 0xdaecc2c118f6100d, 0x179671a05ce91a31}}}, + }}, + {{ + {{{0x6c3ffc7313369a75, 0xb32196aa084ebf91, 0x19888bd7d5107653, 0x98e6f81205f7adfb, 0xb970085b6f3ad328, 0x1798566c199a1308}, + {0x9c0a43e3e8062254, 0x3f59c01632962d49, 0x0f710143caa5322b, 0x2fa91b07515b6449, 0x3545e83cd60f65f6, 0x0e4dbe21a246dc8c}}}, + {{{0x8705447916fc4e32, 0x1928db18e1ca59cb, 0x5ce51b5b0e12fd7d, 0x1b86c70e2ed61245, 0x5d091cf57972eb0c, 0x181a07a21729d3ea}, + {0xe810f6465a045eee, 0x5d24c02e2ed3eda6, 0xa51a9f6559ca54c1, 0x214691d4c7c4f39d, 0xe551c5bcea2052a7, 0x186b4bc37abcfeff}}}, + {{{0xa5c252cd575b22d1, 0x1e73290376acef00, 0x215b1ce5bf826234, 0x68258ffe7def6d94, 0xad2fe90e8e6437bf, 0x1746ee2d57e45ed6}, + {0xbfd607cd99620ee5, 0x3976d6eadf0fa770, 0xcfb973d1a4d010c4, 0x47b979579be581c0, 0x17db99d532a61b1e, 0x021af2fdad4ebcf1}}}, + }}, + {{ + {{{0xebd668fade13fcd2, 0x3e2c922d330352b0, 0x79cd063c5d10b02d, 0x862ac1cb862c5c83, 0xce58f977a3a4974e, 0x16035f69fe8f1bb4}, + {0x2222fab82efef234, 0xeb53583187d01830, 0x15248c60d4e3b9c4, 0x21ffc0e823a40ea9, 0x3ecd52783a07cf3c, 0x199571e2ff2bff69}}}, + {{{0x1116511a8ecc1476, 0xfa43b14a8703b829, 0xbfa8bb4f062b8d83, 0x7171baea3f24df2f, 0x9572f92b59ce17a1, 0x0c9b915dadebd560}, + {0xf7b6a71a70672f9a, 0x9adf6797517b8886, 0x36dfc84004db033d, 0xec756c3d48ac63a7, 0xb0814fd64a7313f7, 0x03025ca2565980fd}}}, + {{{0xa18eb889b2b25da1, 0x1619af7362e47f5c, 0x7bf3d3c073c0e4fa, 0xefc234756dbb3b10, 0x68f1f76152b10ed0, 0x0b279158fdffcb51}, + {0x157be52b457bdb46, 0x53f567cf928b4057, 0x2005b4941b7cf528, 0x3509db54f26c6e58, 0x05dfe2d5e0f888b1, 0x03abbaca4934fd54}}}, + }}, + {{ + {{{0x012a954b2ad9559d, 0x1f1ddaf9d3bc4e31, 0x1c5ff7da680f0c54, 0x28dcaf8faa1d430f, 0x79c0283e8ca04b7a, 0x06474c993df8a031}, + {0xbafe9485098e8841, 0xc115a3875d7dfd1c, 0x8d41dd32294d7e9d, 0xfe73ec5f63807358, 0x400cdf921f459ce3, 0x14a312db0385bc8c}}}, + {{{0x909e57e62b5b4b40, 0x4b43ba00d5ecde37, 0x36767820fafd6e95, 0x5f6ad6037be97a2b, 0xb8a13990c896259d, 0x108e7f5ce9579686}, + {0xf4e91c5443bd6f2a, 0x1c85bdb5f97b17fa, 0x729895a463f44da0, 0x579210a56fc9bfb8, 0x1ea15250b8e82477, 0x12ff3a74b9d5435e}}}, + {{{0x7ca0ffd56a42bc2a, 0xf295044af745b213, 0x6c5e1d1bfdcca444, 0x744fe2e669e310e2, 0x31bee835da51d873, 0x021c8d108ef8016a}, + {0x9a0d60bf2fd43f19, 0x44030f1ab45d1df7, 0x51a6bbcb2fd9283b, 0x50963ed44a739d64, 0xcdbdeeb5e048e2c6, 0x073baf8839ab66df}}}, + }}, + {{ + {{{0x4f46006fd7dcb1f5, 0x616b81c62f8bfba8, 0x8f00cf5c667b3af2, 0x6e9ea24893596bc1, 0xf6309491cc8b4a13, 0x15ed356fa0fb5e8c}, + {0x21db22e1f8e1ac7b, 0x14b18a90b0b75a47, 0xdd5c871316d4c3b5, 0x7d0fa4c7316cb577, 0x759dff89c484b665, 0x0e38bf0619158130}}}, + {{{0xff6979d9a6fdb7aa, 0xa0df35fa1917b8a0, 0x05836339e611b7b4, 0xac91b61069b7acc8, 0x7d3e4d0a21984d9f, 0x1449eff5559d2368}, + {0x639ed5ebe89f21ef, 0xa32c26b3a7a7345a, 0x87866937493841c1, 0xb7959e61641ac59d, 0xe5edf8df3dad817f, 0x15ecabb11bd7e61e}}}, + {{{0x83680d16f3389724, 0xe496c375a64d1a09, 0x183fd9794d1c7061, 0x2cff4fabf073aed2, 0xdce471cd77f32ee5, 0x0d8431fdb3b8bb86}, + {0xf7f60ea5f2f52610, 0x917f6fa5cafa335e, 0xdb1dea5fa8376781, 0x2af55ee87acb589b, 0x349060ae34540f2f, 0x0419e187131d6a93}}}, + }}, + {{ + {{{0x4bbc17de2186551b, 0x80137952b2b572e0, 0xeb5b3ea6eb58448b, 0x669111d5b3ea4bbb, 0xd7eaf0de5a8df3b9, 0x1354d01b68ae77b2}, + {0xce62e1585252b636, 0x26d8f8ccc6201c2d, 0x23d165c880a9cc3f, 0x7feab6e39499e22c, 0x5fa61da0db4a25a2, 0x171534163ccb5ef8}}}, + {{{0x81f86fecad0afb58, 0x21ad6ae17d05331c, 0x67e9a2d7f4dd72dc, 0xd1a1d21c1c6e26e1, 0x259fc2d79c303b28, 0x02ce45510bfc995f}, + {0x38b9b6f5e119f091, 0xc23afeace0c3ec74, 0x7ae9b236d205a72d, 0x07e38723653f28f8, 0x51dc529cef51efca, 0x11da881500afcb75}}}, + {{{0x5744220d39a97503, 0xb043d76c46d0a966, 0x8a15412ed95f7ed6, 0x8a0c9927f14ec40c, 0xcd0599d2f534b9e5, 0x08842b0415d24149}, + {0x895a94f58932805c, 0x8b2e933404298d88, 0x993598a51736b52b, 0xda44bf66a365c1ce, 0x57aaee72d09128b9, 0x0c5ef4b969bd72ed}}}, + }}, + {{ + {{{0x7774c29ee8fc5bfa, 0xbc5226a8d2a98b55, 0xe3b25ede7bff8dec, 0xdb783d9a6177fd4d, 0x34521de2139cf858, 0x13a47abd3066bdc1}, + {0x80c069a96edf1161, 0x6a577d8fc9944127, 0x1f26bb387a3092dd, 0x3e8f21438d71a1e0, 0xba41129983cd8bc7, 0x07cb7638dbce4419}}}, + {{{0x6c3e048a4fceb146, 0xe5f76fb3d9323656, 0x925ee53bb4e3548a, 0x8884fdc193e40044, 0xe65aa08aa2104ebd, 0x070f2e074254150e}, + {0xd9c387a32826b77f, 0x9e46935eaceacdc7, 0x51479f7c3b0c3bdf, 0x19268685d9058a00, 0x848094ee70415ab4, 0x193d41d28ebe9fbd}}}, + {{{0xb6a9f2095719eed2, 0x5c44fc1883a2b036, 0xbf151b6ca46474d3, 0x74f20298980a8ef8, 0xd2febd6f41210997, 0x0cae18c9f959e837}, + {0xada0a15a030d9e68, 0xb1528ba1e98af8bf, 0x6c1b7e5db1406e33, 0xf3b8456f647c5db2, 0xd3276250b8433bfb, 0x07e868fe91cc6f69}}}, + }}, + {{ + {{{0xd48ec385e3fe2948, 0x76bcb305567ad5bf, 0xfacd1ea566f8a26b, 0xdc16d00aca6f939a, 0xa196a00e4221c035, 0x0e8b9f666e20adb2}, + {0x76c440ea3ba3b432, 0x361b24f0c51051b3, 0x40d9f97ed745c389, 0x7d0f3124b5b3ba9b, 0xc43ef29216fa7e8f, 0x03ff2caacb609467}}}, + {{{0x4be2e79a53c12326, 0x69f1781929e195dc, 0xa11b90dfabf7a0dc, 0x10efe8a636f19141, 0x77468e44f52849c9, 0x16cc53f13e202187}, + {0x4704626dcf23643a, 0x62dc4c8ca063bf89, 0xc8bcf87d94c4083a, 0xe670e87f49fa5ba0, 0x8b8d90a8a74a6582, 0x19b432b8c320ac64}}}, + {{{0x9224345cf4dac845, 0xf7e7f15e9e2e8c54, 0x53f8982c1d98763c, 0xe53a75b2d4dc7ecc, 0x2ddef007a3c69fd6, 0x14fb7102ec1e7704}, + {0x5e15498b27542bfa, 0x4332bc353fcd6d0d, 0x09581b5be6dc4483, 0x7dc32d2755f98eeb, 0x3d7df21bcdd4ad34, 0x011cc25b00ca4678}}}, + }}, + {{ + {{{0xc98e3f9793fb7dc2, 0xda768cdf44db5785, 0x8275c7f587a1a3aa, 0x6b12f3fa8e0a3b39, 0xb74c83718f0f898a, 0x16e4414701b1da51}, + {0x53e72720b3155909, 0xf12a37e44e01d3c3, 0x37bbb99d783cb20e, 0x86c4bb7e0fd3a264, 0x5fa5d3b1bc3d174d, 0x108ccb9a39384534}}}, + {{{0xf8f4bcb65a4602b6, 0x4e410d9c36071712, 0xa6943d9c15654d60, 0x101e9db72e381a59, 0x1b006bcae84c607b, 0x06b9725046471599}, + {0xbca2269971dfb327, 0xe9597b09d6ea7d90, 0x2cd5460d51268bf2, 0x4725e70c051924b3, 0x163ab43fd8f7afd1, 0x1008bc997ced5322}}}, + {{{0x1a49932def600b88, 0xfda311cfa216e398, 0xda44fbfaa7ffce7f, 0xbbce4a40ede5e696, 0xb996b24f076fe9af, 0x04aae7814a73377c}, + {0xd0a939f98618ad28, 0x30e23cae5d9caf6e, 0x07b1a3ebcd3d81a3, 0x76f15cf1b049478e, 0xc9845df0ff244dba, 0x0932fcf77bf512a3}}}, + }}, + {{ + {{{0xab3c352cb7903fec, 0xf5c732941190b463, 0xf01446ee660f883d, 0x6ddd55119c08ec81, 0x547f3ccd7b2c5ad9, 0x02d43772d2cde2cf}, + {0xfd1aabdc651b1194, 0xf7067479474bf8b1, 0xb9ae1be7ac942224, 0x7b824073dd154cf0, 0x508efc3b8bd7b320, 0x18f28b7f85db4b51}}}, + {{{0x0067be51ffc20973, 0xb4362fa46081d731, 0x3cd73de04b51509b, 0xc12a552343b90c3a, 0xdea3c5e8bd1960aa, 0x07f1f3b54d9608f5}, + {0xd3617fbde5ba17f6, 0x6b1e01286f28f19f, 0xdd663f33eefe958f, 0x540a19e46b343137, 0x4ad7b01156e8add8, 0x0c5e0b9b5744a190}}}, + {{{0xf986d78320f43fe4, 0xc9e93381a135b4af, 0xf1dab02eeacb337d, 0x657eaf8c2edfcdbc, 0xae67425d8c53cddf, 0x0e35b504432f6d38}, + {0x1dbb9f1d48127e43, 0x443965d0f31805d9, 0xe28e6278c81fc3d5, 0x1f3040ad1b9a2c9d, 0x0df2227c9155c895, 0x0059dd75ffbf0a7e}}}, + }}, + {{ + {{{0xd04da9134cc5c08e, 0x13645069a81df1b5, 0x8a3f034b224f981f, 0xdd2d7c6be6e1495c, 0xc1501f263cb8fe7f, 0x104d92a21d3da84a}, + {0xcf5bb6f97fc9c4ef, 0x524000c916964603, 0x2e6a94cf54c71e54, 0xa17b04a68dd209d5, 0xc768dfd3a7fe9087, 0x16fa6fd3bedd5c89}}}, + {{{0x3aaebca4858aedff, 0xe9de6acc7060006b, 0xab009dcb435fcf62, 0xd87ff783320aa26c, 0x1108e98f1b37079f, 0x0b7701738bf6e611}, + {0x682bed55c50f0ae5, 0x842cfd54608b1f96, 0x9f3c83542f5ac0d1, 0x4bf6ac01377cc8cc, 0xaef9feb12b27e372, 0x0b4533b57da69dda}}}, + {{{0xe514cf3c73db5962, 0x9ddc5d8c845207b1, 0xcd8a1ae73b5da609, 0x778d8f417285a33a, 0x84259c69c045d0ca, 0x0c6ccd43c3ce44ca}, + {0x73f49a3d6a3764c5, 0x16ff80f7242705f5, 0xfbacf265a129a412, 0xc6b4981c55176ade, 0x77a7e51125933910, 0x152d461791c7d67c}}}, + }}, + {{ + {{{0xc7dbb8cdfbe835ce, 0xb549a9f7c83e99d8, 0x30e7f5b41b6af205, 0x2b490844d169228c, 0x0c4daaeaf46b76c6, 0x043bf7eb5d78e277}, + {0xbe81b1da35a9f395, 0x073f9a57fb17621c, 0xd6b11f7b8d4d6e51, 0xf69e12fbd0b06f4a, 0x10a61711b19a1f9f, 0x0cec16150832b8ff}}}, + {{{0x21710ce5015609e3, 0x464aed88c6fdaf1f, 0xa5068976a77041b1, 0x2667799b2bd85c51, 0x52b749774d313d32, 0x15fcf37552956115}, + {0x005252f37966977b, 0x241e4931968f2e1e, 0xf32f1c8952fc0343, 0x2596fd980af20b88, 0xb4ca23c95c7e46c4, 0x0c4f149775ac8548}}}, + {{{0xce0cef0821ca3dbb, 0x0e9394b9eabc6ffd, 0x1298dfecb20a6cbb, 0xc688e544f953710f, 0x1b1fc723172021e1, 0x06d79db36ec9348f}, + {0xf48dbde53a87e93c, 0xb19eb40e7b5bd5a5, 0x4274912c2188598e, 0x0b09c932fdba05be, 0x4ca8a33e998a0da1, 0x09d7973cfdea8dcf}}}, + }}, + {{ + {{{0xea55e6bc877330f4, 0xe2a93aa8e6590941, 0xef5662699df3cd11, 0x86e5e28f8212c006, 0xa5a04634af641c92, 0x19d9232526b8e61c}, + {0xfdf4c98046b98efd, 0x099278b279211bc8, 0x73d2a2a2e7d6bed3, 0xd85ed3fedd92aa41, 0xce0bcd94511f3115, 0x18a3e6af99cc1c78}}}, + {{{0xcb7c4c547f059eba, 0x9042a754ded50276, 0x57f762e86bd008f2, 0x755a2aae285c340a, 0x07923dea80cb941c, 0x05fa4d2ddc6a7a15}, + {0x638cc6bc9353b473, 0x9fc22e668b291dd6, 0x3a8f9e22370aa02c, 0x3fae99fab50844c5, 0x540214bb1d7bea0f, 0x184926206de7b9f8}}}, + {{{0x50a7d6c7a5a857f6, 0x043ffbb8db7ce832, 0xa8850516944f6eac, 0x7449c03deb84aaec, 0xc993a8c4634d4a18, 0x0fd94e76c1c2aea9}, + {0x51fcd553fe0c682a, 0xa97bca9ab1268c07, 0xab2107b048604630, 0x2756fb32738d805c, 0xa463992135258941, 0x15c574da37704a1b}}}, + }}, + {{ + {{{0x040f531d1984af16, 0x1550b38eb91c7df9, 0xc6c4331f26ffa3d5, 0x07959e0e07db97b9, 0x20b3be3a858540d6, 0x0999e51d8371ac2a}, + {0x0e6543eb3674e42c, 0x813c2f8b5d4bf90d, 0x96a9dfc5091a5f66, 0xdda45f5081877f7d, 0xd38c8e5e19840551, 0x13f1c9b6b2bd4cfb}}}, + {{{0x9d4eb16fe463e89f, 0x4cd2983e2e012cb6, 0x14a8b79ea51811b9, 0x1786ab5e1446d0e3, 0x67022bc09915db05, 0x04fa951e2111b306}, + {0x7221bcdadf7770d8, 0x08d4de052a1737c2, 0x743b61967ffc30fd, 0x53ce07d714d0ddd3, 0xc239682fcf31312f, 0x18cbada0129b2a49}}}, + {{{0x3cb46234275397ff, 0x54d53039cbadc107, 0x6e6d3cebd750c881, 0xe1aa429178857c2b, 0x04873ea29f721b6e, 0x077b1a0feb10a32f}, + {0xbd4001de0988e389, 0x1541729edcc05bb8, 0xa6749319874bd738, 0x884101da1019750a, 0xc6c30fc60f295c63, 0x00486e285a377b09}}}, + }}, + {{ + {{{0x4fde628b772a10e1, 0x8e4c48b8067e0ba1, 0x9a2bce09ce96de6d, 0x40af1a7029bb881d, 0x9c3297d6525ac35a, 0x06945ca737f7c385}, + {0xea7a4a456ebb4423, 0x8519717a7686cc75, 0xee00b88734231f96, 0xb12baa22df980de3, 0xb5148971705ddc83, 0x1865e88d0d827b83}}}, + {{{0xb5d1fcb7a469540c, 0x18ff90394009a544, 0x9b3506bf36195f9c, 0xfb7f118f7ba85052, 0x4832da3baeca1be7, 0x1898c89d00fadcc9}, + {0x323778d50e57a592, 0x3215ba8a57adad45, 0x68ea2a23de6052d2, 0x0e71f5248b322172, 0x3acd3c1f68a15d8a, 0x15a6215738d1db10}}}, + {{{0x8b574251ae42394e, 0x0171798fe982e42a, 0x9c0a3dff8485784f, 0x6fe0db2def270039, 0xd7e8c3752cb81664, 0x0397b114ec183a25}, + {0xe2ebd1414ee8170f, 0x45285226453020c9, 0x917338f24dd8b54d, 0x796764cd511a38a1, 0x66deee75fe631812, 0x0cf7257659686176}}}, + }}, + {{ + {{{0xa9e9f67a84d79502, 0x58e947bd25f48425, 0x4e9cd72a3c82f9c3, 0x11a743c538454199, 0xfdfd8c3f3306f2e0, 0x0634f8b01b881091}, + {0xeccfd1bbcefe0d8c, 0x72ea70a84131bca8, 0x1f799c3956228ff1, 0x3cb8a135448efd71, 0x24045b05b60d08a4, 0x16feaeb69b3aac8a}}}, + {{{0x34139447f4ca3f53, 0x66070c368feca318, 0x086620287937ae25, 0xc1cbaa231ce67494, 0x1e570a2167f69c09, 0x0d3c1c3e96849ac0}, + {0x2603b64f467aaf68, 0x0b290c1b7e1a420f, 0x82e88f50580f0c56, 0xaba1e298cdb94eec, 0x4f3a2a9d704fa110, 0x15415926fee69d0c}}}, + {{{0x77f356fc232fcea5, 0x81997b1e51e75a19, 0x0a212ac453f09c43, 0xcb835df108c8f71a, 0xef86181e6110bc29, 0x134c50ce2f690d5d}, + {0x1c532d507347cc7f, 0xfdaa16b39696762a, 0x24b90dacda7dc04e, 0x740c0ee121bfb763, 0xff6027e30a461aeb, 0x165e6e1d60abb1e0}}}, + }}, + {{ + {{{0x2fd677de56636cae, 0xe643f49ab74566b8, 0x000fc809049f5534, 0xe2fda467600a5179, 0x9abaa7094c22d849, 0x121a9f7761b65dae}, + {0x9337f90db639666c, 0x3cfbd35635a5c2f2, 0x666994649a0f5480, 0x767c06a60c51d119, 0x6ee1b1136e992ff3, 0x16d34c93a74c580a}}}, + {{{0x092e9162e1db21b2, 0xe0604a65b210fbac, 0xfacd55bf10e7a820, 0x9f846b763c35eab5, 0x1fa279c79ad62960, 0x187284d92e15e26d}, + {0x66bfcbff9cbc2a5b, 0xe280b61342d1fde5, 0x26fc5a71ff10700a, 0xf157a040d6c384b5, 0x72935605abff546f, 0x0f4ebbab97693f64}}}, + {{{0xc3035c11f7961989, 0x79494afffc9eecf8, 0xb3a8bb598ae8862b, 0xbad9bd613dd0bd19, 0xa094f4ebf2b2b294, 0x13662ae9bbe303ae}, + {0xa2fbcc884f9ee8cf, 0xbe4c765b7888b0a9, 0x95d09526ca406c54, 0x8320dcd7102a7ef4, 0x12cec265e035b7dd, 0x1049b68cf5db5743}}}, + }}, + {{ + {{{0x030d14d258ac2331, 0x182cce476684c496, 0x745ba790938a609f, 0xcd4ee2c30bb918b6, 0x1bdda1cc35d26024, 0x16b10cdbd6319f32}, + {0xdc01227c1bc9a55e, 0xa46cda2b78a11939, 0x205cfb5b3e86b0c3, 0xf0c9e1768481a062, 0xff06489ae4fe8bb4, 0x0016647c573e4cf7}}}, + {{{0xa1875c64592230a7, 0xac19e641f8cf6cc4, 0x4d191b7a06755386, 0xd4fd63a589a5b7d5, 0x5faf6598e00404bb, 0x0541b09d037578f7}, + {0x84c3ce1226fec8f0, 0x39d8abb918c231ab, 0x514773ecd2b4f944, 0xdb4dbf23d180b48f, 0xaf4390c2edaca81c, 0x022b33505a8ae9d6}}}, + {{{0xc044bab55969740d, 0x5b08c31b6be64a5f, 0x3d59adf29dd8a5d4, 0xce6335d600d3f4fe, 0xed446fe327284220, 0x13f14d0459be36a8}, + {0xe83ef8cd1dcd519f, 0xaef2363bf1e79a49, 0xd9376651429d6397, 0xa3f99beebb717cdf, 0x133d057d6db1fac6, 0x0ead2e910a3ecba2}}}, + }}, + {{ + {{{0x1ff87898ced141d8, 0x79d6494b9b2b24c0, 0x99e6f18526b08bf3, 0xa3b57b546235f3bd, 0x49f5e7c775b7b062, 0x01a324710ef8671c}, + {0x14be3e38fe66a8e7, 0x76f68c4ab13ac975, 0xecd33b9facafbfb9, 0x048205e890d50760, 0x2665e8db42c8fa34, 0x0b30db6c343e5598}}}, + {{{0xdeb14fe2033d0beb, 0x0106094180482833, 0xc20f90caaf08131e, 0x947aaaa897609ac5, 0x65c538f17385f9a6, 0x19f912eb1530f946}, + {0xef8052b02e1edfaa, 0x0541484045da4b43, 0xac5f37b1a7441e8f, 0xfa6578317b4d688b, 0x819f06636592a680, 0x0bb4f2c34ed92b64}}}, + {{{0x8aa1fe522545be5b, 0x79297b8305ebdec2, 0x18ad24be9d6ff29b, 0x4614353ec7fd7445, 0x6de5104ff8aebd2c, 0x15fd357c75488237}, + {0x480d0071e14a2b9a, 0x50fe7e364991d381, 0xd4c023a8c352c6c8, 0xc64b9df84161cb88, 0xc1ea74d00015de42, 0x16ba6a3b9062a3a4}}}, + }}, + {{ + {{{0xd8645ac4c082fa74, 0xe7f713b50bbe3d71, 0xa0d5c05c509b2ed5, 0x030952b3d8fc5876, 0x5e68a733551e3e81, 0x0ae31153db8af4d7}, + {0xc4a1170b9db52a99, 0xf9320ad18b1856de, 0x0748d795e7c8834a, 0x24c904422e5e04cd, 0xaca71671117df0f1, 0x09d5ec6cb778fd18}}}, + {{{0xcae349bdcc6e9198, 0x6757ad6779ac2be9, 0xe7ef75388491f12d, 0x87cd3470021f0ffb, 0xa2a3776dd768b01b, 0x00a5de0ed5de97e0}, + {0xc30463f1ea95f7bd, 0xa7e3e534b99940cd, 0x8a75d416938f4566, 0x0219c645ed8faed8, 0x034eaa3752beae77, 0x1925500fdb997264}}}, + {{{0x9a7dc7efac57d439, 0x0fbae240fa86808b, 0xf6239cc4fc5719b8, 0xc976cbb843d96dc1, 0x3c6a2f936a7f067e, 0x0a10a27fae3b733a}, + {0x6dc70a7b0590ea5c, 0x80532384cbda4110, 0x91b8f05e02e9bfe5, 0x73814e1ef728bba0, 0x6789f2dcfb38b927, 0x1418d64da5c39c3c}}}, + }}, + {{ + {{{0xa50d0e584e3d5491, 0xa3fd0f055ea4677e, 0x7f551ae60b261d71, 0x92a1a6eacc690d33, 0x712ea8fe3f45b63e, 0x0304d1e65eda67ab}, + {0x1834768b75408ea8, 0x07b594955426bfa2, 0x0fed66109e5f1a9b, 0x2a171c0078e9d9bf, 0x35cf634a126aacde, 0x0ceca829a77233bb}}}, + {{{0x330abe4eb7fa41ab, 0xa0b8c9ba2aabe860, 0x748d42ec350ab2d6, 0x6688d65ade29c4ea, 0x5c1f35d59c483b6c, 0x115e7b28d6abbe7e}, + {0xa07d3dad3f998aca, 0x1ed077ae1c1f22ff, 0x0b54cf4c4ddc7db9, 0xdc3d2ebf0f9fe0a9, 0x8c2b6741daa546c4, 0x0fe0809e2954234d}}}, + {{{0xac99f2e0267b6cb2, 0xfde4f1f140eb90b8, 0xa72b272f641c9681, 0xb4c462db1f3b7f17, 0x30a7c2d4b237d284, 0x0ab65d1f6beec163}, + {0xcf82aa6c788c62d2, 0x6b0657dea8ec635d, 0xae872f508e353b51, 0x097de45d4a07fd7f, 0x8af646a99a735e1a, 0x1308f8bc81a875f8}}}, + }}, + {{ + {{{0x78b86ddcd2526d43, 0x8ad84620e76d255c, 0x8ad56cbd57624b1e, 0xd4742d48d3e59d5f, 0xbc551cfbe08827c4, 0x0f6ae2d59a1a3884}, + {0x1db10995c02d8a8b, 0xa59c04d30c86dfc1, 0x11a276664299a14a, 0x276a90db25cab4f1, 0x51dcf5ecc7361efd, 0x082ece1c2673b540}}}, + {{{0xbf917c7815855bde, 0xc22c96e636bb9755, 0x7c36e46122b5f68c, 0xd82ba6008e6023ec, 0xfac461f607d1318c, 0x060193feeb23430b}, + {0x83bdaface4e2fdfc, 0xedc1f32a055ec7ec, 0xc22ceda51488ae9a, 0x6179d480dc6aabea, 0xc45b50d6eebdd9d2, 0x19f6605143d9f857}}}, + {{{0xc10cf26c584e5d20, 0xbedde1c9f75151c3, 0x4e806e8bf40a68e4, 0xe0f731926523dc67, 0x49a81ad405f4bdc3, 0x0525a7c9b119e20b}, + {0x419da160002c1487, 0x3420cd5bdd81800d, 0x3084c0bbe28a851f, 0xc7a7cb5cc9f8883d, 0xfe023ab1f1a4fe7b, 0x11ce2a40070eccaa}}}, + }}, + {{ + {{{0xc2ff09492e9a3653, 0x6426b4841498146d, 0x5aac8d0db338f0d5, 0xb6ba71459593b35a, 0x2e68831694274b55, 0x140a3e1296567d68}, + {0xde14ac1b85d52ef6, 0x1e1fd94318c2ad58, 0x5467f1caacd4a1f2, 0x3d83d9dddfa6a8d7, 0xcc6cf47ceb879787, 0x145cbec0c6fdfec7}}}, + {{{0x1e842b4969676c44, 0x40441e88d8998604, 0x0ba35a2dc03e77c7, 0x71b45b3ed69483a1, 0xd689341219ff8301, 0x157552c2f255464d}, + {0x6f5e8dd3b354798d, 0x4acdb3499c7a3229, 0xaf93110880e6b5bd, 0x52594ab088cea13e, 0x8350483be77b7954, 0x0173a9339ad7f0cd}}}, + {{{0x49ec6e7923184c92, 0xd35fdcecc80ddcad, 0xb94724796bdbafc8, 0x792c8161aa7a7bf9, 0xb08e6499370f6b01, 0x054d4a2c14c65ab6}, + {0xaf0a4cf56d5af736, 0x0ca8bdd654c1841a, 0x4a535af91adb8a14, 0xdd1fef47236efc45, 0x6cc8ad5e2bfdf4b0, 0x0f2f9bd782cedcb6}}}, + }}, + {{ + {{{0xf324a4c5574c95b3, 0xb566e10f0d778ac8, 0xa20f8ee8592f389b, 0xd6847b66d45141bb, 0x561e2bc19c471dc6, 0x10b4772781718590}, + {0x6550125501baaa04, 0x5890afe3ab97255a, 0x8904e2a5c7fe4efa, 0x28a17700d2e76995, 0xbb5b47d35760373c, 0x0efd3dd9489641c1}}}, + {{{0x6b77177f5841a035, 0x76be81278b4d40ac, 0xf9c2cf60bab8af6d, 0xf9c57b08b8e7483c, 0xade1bba14029d1df, 0x172bf56c5d26c392}, + {0xefef7218cdb1b82a, 0x5de5b6564bcba452, 0xf70a0b5f6eee7f5a, 0x2e07984b217aa5db, 0x50d7dce849f73606, 0x0c06a25d6f14fda1}}}, + {{{0xba9915b064300121, 0x0e0c5e35ef4d2574, 0xef433aca307d0aa9, 0x4c62be61110772a6, 0xef649be216c3835d, 0x0d05c5ada3e9b302}, + {0x78241a2efc9029bb, 0xec68f08fd66d8c4e, 0x9fa877f9874e9886, 0x6582d9b661001f0b, 0x22fe25aadd54fccc, 0x041f6597c313593c}}}, + }}, + {{ + {{{0x0c6fa4336071ee47, 0x59a3660e891219d2, 0x9b841725d76d7537, 0x9572a93e74551fcf, 0x103c3f159e6f1c27, 0x0021decccdc4b7ce}, + {0xe5dbcefc4a0f29db, 0x6270886c2f416701, 0xcfb40f3244c360af, 0x0e3b4bbf82fd31c4, 0x34ffef1229867947, 0x0cf931b9978178ee}}}, + {{{0x3ee1003881940b70, 0xee6e1c954d1053f0, 0xcb8ac3b4783d22ee, 0xcc519e3b515a7b2b, 0xe69b0d6341829488, 0x063d116015152a46}, + {0x8f35f3fe7c6af2aa, 0x1b21ac3eb7afd5e8, 0x1e387566b52256c2, 0x2824455e80e0e2a0, 0x1982119be9124e25, 0x0ae50c6da0a89efb}}}, + {{{0xd8b9043cc1230b7d, 0x603f06c654b5f2cc, 0x6ef8d66262eb074e, 0x85595b1242c9b2b2, 0x81d6e84f702b9391, 0x0c57ec922b546a28}, + {0xb8e67510e8cf1643, 0x0a2837662892ad44, 0x42ce94e2cde94fa2, 0x6eb388f8badeb135, 0x6a32c17738aabacd, 0x07de47344be9894e}}}, + }}, + {{ + {{{0xe17c9c312d54b564, 0x4c2ef71978879bb8, 0xe494148ba30e0b97, 0xfaca7bd5743a3cb0, 0x98a40172dcda76ff, 0x05620ae16a78af0c}, + {0x24eaf06a4aed6b41, 0x78e68e8cbd40659e, 0x119195ab353902d4, 0xa93001c9c3382a9b, 0xdea211dba2968cf8, 0x0f0d12ad72eef5e5}}}, + {{{0x3dfbd901476d80f5, 0x77438418c7cef105, 0x45a3fa70dc041011, 0x35cadc7ab158c30b, 0x7df97c1e282e8120, 0x04c060a48631868c}, + {0x9ff7af8f5a035cfc, 0xf484403064bd557a, 0x87eebc1680261261, 0xa89a7eaa0f3ca1bc, 0xe2ddce24f24fa831, 0x0f15b6ff29d6cec6}}}, + {{{0xc45d20d423e5ada2, 0x49a9b125503d5cf0, 0xf602ae8f399c0066, 0xd303b963740b37ad, 0x4e2421b20864b40b, 0x0787f2f5a8306952}, + {0x0a72f4a8f1f984e0, 0xc3e621215463a50c, 0xf9785aa8ea31f6c0, 0xb5329278fb820871, 0x7a89224e4bc910d6, 0x110871eae7a49b80}}}, + }}, + {{ + {{{0xfb5d03e18e1b559b, 0x49a36cd48d90ce85, 0xe6939b2d50eece92, 0x0d770c374b919aa0, 0xd2e30b3969895522, 0x179cf5068c8ba750}, + {0x39fcb25303018f31, 0x26ad3456415e0cc1, 0xc51e87a248a78e4c, 0xea72c5efe41ea15c, 0x4164ecc2f4556beb, 0x146e88d95d7c47e5}}}, + {{{0x5059261a016da1bf, 0x0667ca99e9cdc253, 0x960b625f659219f0, 0x117bff5160736aee, 0x4558ea7ce9276616, 0x0f5db6cf709a0fb9}, + {0x827ceddb11a7de8e, 0x70c3e1d69115281e, 0xe9df1ffdb2ccb225, 0xe574f01e81dc1f73, 0x29f091b21056872f, 0x08474a2d37d28e5c}}}, + {{{0x85bca3888708c7a8, 0x7b19235df7524926, 0xa18e9bfbba01891c, 0x464dba134338e23a, 0x1f3fe23a13dad1e4, 0x0ba6f79677619f1c}, + {0x00121d993174afb4, 0x3d5e052126c1fda4, 0x02626c42237e55d7, 0xc5004fcbff4fa65a, 0x737fc09545593290, 0x0e635418e06bf785}}}, + }}, + {{ + {{{0x83bfc76f06e67710, 0xb9b1efad8f8cf511, 0x5eb529d8152e7378, 0x43e643d3a1053f0f, 0xe8f141b4b35f34b5, 0x15b7322d07a9982c}, + {0x5b114376a7b10e4a, 0xf1b4ee197395a8ca, 0x4c4d85664004389b, 0xba1da23a4cefa957, 0x60817b93ff0af8b6, 0x071c24945047a70f}}}, + {{{0x47e23feabdf0db96, 0x157c786fce5683c7, 0xe335b878dfc09d74, 0xe3c0f147c9dc279f, 0xd855b92e0b67f6d8, 0x0e6e67c01769ebb3}, + {0x90fc9ae548f9b4ee, 0xd90eb07413a0bfd0, 0x59b93622ff46be99, 0xc8cb365186be9e2f, 0xab519f7d33d655af, 0x0c356c1a4c1753a4}}}, + {{{0x45d75896470a0b63, 0x79360ba359262f05, 0xff8d059fce10d202, 0x600ea7fcc5922aa7, 0xb1a60d00ff67edd5, 0x11b9ef21a849bacc}, + {0x5d1cc3835fb01e67, 0x9165541883d4c3fd, 0x4a9526f495c82212, 0x3dd1dac37bf8b827, 0x3abe881ad9084062, 0x06714694f70ec943}}}, + }}, + {{ + {{{0xcf2c3ad387c188e9, 0xf7f0b20aa2f04831, 0x3ee7154e3931df8e, 0x0f712f34e0819b8f, 0x2f9af564ec375db1, 0x17aad06ca5f893ae}, + {0x23fd29dc73f87bbe, 0xf49a3092afa07da0, 0x9622a406cf115994, 0xea9fb6e98959d222, 0x6865d6fee0d86850, 0x00239987555baa17}}}, + {{{0x2f5162245f3230ff, 0x738df4a549e240ec, 0xe413cbe50a0f1ce9, 0x4e7d3aa6912afb37, 0x0852850b73faf48d, 0x08e12f36a38f514c}, + {0xcdb8b21c07d5ea48, 0xcc5b6177546f4f09, 0x5db22a7676f56732, 0xf3a826199e2469af, 0xd4e4014411edda86, 0x193a7bb07d607b71}}}, + {{{0x73f2b6835d893604, 0x3ee0e8a36f23c374, 0x79df0ca4b2c4d5f1, 0x7773e1b5f7876c99, 0x1adcdb7bac4ca399, 0x19298c434892e192}, + {0xdc93f858e60faf91, 0x8785e14f2ed9beeb, 0x6be740b37275e3af, 0x69bb86f034482a37, 0x67f472b951084fb4, 0x19829da0d945324a}}}, + }}, + {{ + {{{0x931c8bafae430278, 0x4aefda2c1a8ba47b, 0xddbfcc30e849f148, 0x904f2afd9a397db8, 0x810d939234df6634, 0x14b8f523fe0b7acd}, + {0x02d7570e8d2666d4, 0x53353e9d3c182484, 0xe012c989934a917d, 0x2d19bf4216aad225, 0x82f5fbab112a2b94, 0x140bcca8deef2092}}}, + {{{0x930c6eebe1198335, 0x4bd2f584cdde5916, 0xad8d28fa826e7e50, 0xac4e66a225799a1f, 0x155203f750a4fcdf, 0x05426b72211207b9}, + {0xa83a6bfab7d2100c, 0x6d35706ac329fbe5, 0x5e715d0e7fa21c80, 0xf37ecd5f5560165e, 0xb2f7a66df168c4e0, 0x0fd7f2bbfe5931b4}}}, + {{{0xee49f98363a5df98, 0x1a3e9d563040f1c8, 0x7d574093568cd870, 0x408436e78ece55f5, 0x502dfd6cb10c2b03, 0x161a94337b771049}, + {0x08842eb71aa179b9, 0x6e853dc8d216bee4, 0x9bb353d956f44d84, 0x1dd1c54c1fb99e0d, 0x98194d289d712e5c, 0x076ea63e300df4c3}}}, + }}, + {{ + {{{0x7abcb71170dc8a40, 0xf2d321ca5c2492b7, 0xabad006413d9f2ca, 0x740c42c2b8ce25e0, 0x2d24f3be9f664531, 0x0aab9b8237be669d}, + {0xf7a7c747ff033df9, 0xee7dccff4ac2fafe, 0xc77829e614abc8b6, 0x78708443879430fb, 0x013279b4fb6651df, 0x118462f985a0871c}}}, + {{{0xf3d494c3776c110a, 0xccf54327891ea0db, 0xb72ca687b2189dc3, 0xbaafd00ee450162c, 0x6a5cef51b6801397, 0x0111df36ca9c1046}, + {0xf8be345cb48db182, 0x324db2d913403384, 0x5ac52bcc3195feaf, 0xf90777e90e217909, 0x9f2eca87f6f2d828, 0x142f49e17bbd0d69}}}, + {{{0x7b21697696696fd8, 0x46942980ad249867, 0xa8d2a4426eff2d98, 0xe986af6b91a664fd, 0x2c5a84b29b153f74, 0x07c84317d502345b}, + {0x82348612e7f1a4ab, 0xef58905a63617bfd, 0x55e9f443de1cb450, 0x35f4d40ffeddce50, 0x2ee81f5454cb33ed, 0x05b0c2abd6ed9ffc}}}, + }}, + {{ + {{{0xb8155717eb398ea7, 0xf5cb9f466e1596d5, 0xaea26a515aef6fb5, 0x7bedf0da5078d9ab, 0xb649a31eeb13b293, 0x0fcc4f7d258604b8}, + {0xd30d382074c1e2bc, 0x39ed6dec4f8bf01f, 0xf2f23cfe2aea42e6, 0xd9bcd48b739a05e3, 0x8478fe0fa65505f0, 0x00009753b9fbd789}}}, + {{{0x71ff4f7da4a6e22c, 0x5dc28a58702448af, 0xa043e6be8cc4c1bb, 0x4bda5a550b471070, 0x8266247a998b900d, 0x10b40f0312e33404}, + {0x5461a25e1d5c1680, 0x40d6bd2ab685004a, 0xb236bb3184f335a5, 0xb090f2fbe8f4af9b, 0x3b421e1e259dd88d, 0x0fabba183205b033}}}, + {{{0x0893ac1c625775d9, 0xe555618e085cd0eb, 0xb7f4c59e4c350fc5, 0xd21654c2ba93beb0, 0x32bf4ffcef1bd374, 0x02f76d183705407d}, + {0xe60a0e9ce492be26, 0x0f84fb943fbc0770, 0x778127309cb4db1f, 0x0896e4863ed9290e, 0x48a490414e6e4228, 0x100f93ebba6d6eed}}}, + }}, + {{ + {{{0xba996a5724251388, 0xbe50304500ce7eaa, 0x45955e509a1ab18a, 0x0cc5b4f160dd14e5, 0x81f12ee0ada8e532, 0x0537d1a0ba4e90b3}, + {0xa9a6b2fc297a2140, 0x1c153c44ea304d5c, 0xcc17c9cb62d6a8e3, 0x87e153357bac8875, 0x77b12a8147d145a0, 0x1458fcf558109604}}}, + {{{0x98f212bd318e28eb, 0xc21efc8c36e0cb36, 0x1fa860e88518bf64, 0xecc5375ca1a97259, 0x60a7b6afa2c21b3a, 0x0dd673f81474eb9e}, + {0x2a746b9bcf136cfc, 0xc36459a8c39c84d8, 0x9acae76fff2cbd52, 0xa315cca2689ffc29, 0xa986c8ed3511b3dc, 0x17b5ee023cff616e}}}, + {{{0xd66c8ee6c265bb89, 0x549a679c4ff1f292, 0x077f927300e04ed8, 0xc0532961165162ca, 0x50db4158edfe2796, 0x1496c2129cf6b8f4}, + {0xbeaf70da911528e9, 0xd179ebd98d1bf84d, 0x3705d39b59f303d9, 0x6bef189f854869e9, 0xfb91dfb62f91ffb9, 0x0c9bdcc7d7863f51}}}, + }}, + {{ + {{{0xc5513e17140dda36, 0xb1ae9ed7177e5b3a, 0x52123afcdc91f55f, 0x5f4dcf95285c4a74, 0x639642e43a30565a, 0x00e069c99bba8cee}, + {0x5cab623f2f298217, 0xb86a9fd3678a6f57, 0xc71ab80c7272221a, 0x1c30bc7d72e48063, 0x85f590ce2061e757, 0x01c229c2e04c99df}}}, + {{{0xee45114b835d0d54, 0xf3ed1173febf5e97, 0xaef0f04f749942b5, 0x7e9c9fcb321501df, 0x4423f86518660118, 0x0809dbc71a15dc8a}, + {0xd8a43ea8eec682ce, 0x27fef5201fbad620, 0xdef5470858eed2f7, 0x6f8dd6da0fa5e0ae, 0x14e2afe395d58b87, 0x0fe7f4a82dafd5ec}}}, + {{{0xcd758e953f0576a2, 0xbe95aa7ba14347a8, 0x9eebbbb81afbce65, 0x584baebeb947ba47, 0xf9d1f674f37f8a61, 0x0833b4b821a1f075}, + {0xe7ec8795fe5f388d, 0xd5477a900ca8e4bf, 0xf83166ae72407617, 0x9ea7028d1e42c139, 0x76b3807bcbc2af80, 0x19c2260adbac881c}}}, + }}, + {{ + {{{0xfd816930e9fcf4aa, 0x6fba4041f5bc912b, 0x7b9ad5f5c988b0e1, 0x245bae6238db243e, 0xc066a3290a568476, 0x12cd5c94752227e0}, + {0xd091bf1e245fd993, 0x27b6575dbeb76bcc, 0xab2a9b1df91a12f1, 0xf1c4b0790b5ab4c8, 0x672280b13fb5268f, 0x189ea13fcadef682}}}, + {{{0x2745864313a29000, 0x2ad2195b2ba7a73f, 0x4a5b83fc2a18b0b1, 0x8204fe8e77926901, 0xda549537358eec58, 0x0f1411487ce97d76}, + {0x39f7504bc13d3dea, 0x66fd6962500f28a3, 0xaeb6f695d0af3820, 0x2de270f6b80c59f1, 0x1b0b8fc85b6846c6, 0x05bc3fa735072054}}}, + {{{0x2513f0dc6a79af0b, 0xf8aa753392e507df, 0x2dd980fcd2c6f7de, 0xd29753ac9b012efe, 0x517a5601612b4b3e, 0x188a6e627ca70f4e}, + {0xcdfecffa053a1f7c, 0xbc807e9acad84bc5, 0x7533c1ee5e2a5d65, 0xbed97fe03b27c89b, 0x69c7bdee723af99c, 0x0953ea392f6ddf0b}}}, + }}, + {{ + {{{0x22acaac48cb88b36, 0xd4ac4c60d020bbe4, 0x2ab63e87bd64ea3c, 0x2d4f2546193e9fe0, 0xa41cbcc65335598f, 0x0f6eea0310228633}, + {0xb48398798f323f9b, 0x4186ec8507fce3b4, 0x74ffb9b5765a8dc8, 0xdb3e4f60b9fb860a, 0xe520aa8bfb771bd6, 0x028679367f389d90}}}, + {{{0x348d57905874912d, 0xfda2239d13ef9347, 0xa8064cfc9ca9ba7c, 0xdb42c82240988f0b, 0xfbde4b4e0fb95ac4, 0x13102424f967c22a}, + {0x9174367b6856398a, 0x4f08d71e3073f080, 0xbad9994279f6f438, 0xa57e4bae2cb292ce, 0xc8077f750bf719c4, 0x01c1025a5ad768e9}}}, + {{{0xc160ef92ebb42bda, 0x635d658ffb2fc186, 0x61fb9d4d6ac305b0, 0x4812a6cbc73e4519, 0x73ad6063821abf52, 0x01140c2d1d2aa3bd}, + {0xe6e29c6e55ebe36f, 0x9985b53210574e5e, 0x5b07a15324a14323, 0x8df677a6c3464ecb, 0xd15591fbd3838efd, 0x011da244ca43788f}}}, + }}, +}; + /// Precomputed Miller-loop lines for KZG_SETUP_G2_1. /// /// To regenerate the line table: call blst_precompute_lines() on KZG_SETUP_G2_1 /// and serialize the resulting blst_fp6[68] as hex-limb literals. /// /// TODO: This can be done in constexpr, but with current code this takes ~30s and ~4GB of memory. -// clang-format off constexpr blst_fp6 KZG_SETUP_G2_1_LINES[68]{ {{ {{{0x6efed23c7d0a5bdb, 0x5949d950468ec242, 0xfc60ff8d82b55e1a, 0xdfb2e092c2026d95, 0x490be84d7fc955ac, 0x03d9c9b547a629f9}, @@ -566,6 +1118,11 @@ constexpr blst_fp6 KZG_SETUP_G2_1_LINES[68]{ } // namespace +const blst_fp6* g2_gen_lines() noexcept +{ + return G2_GEN_LINES; +} + const blst_fp6* kzg_setup_g2_1_lines() noexcept { return KZG_SETUP_G2_1_LINES; diff --git a/lib/evmone_precompiles/kzg_setup_g2_1_lines.hpp b/lib/evmone_precompiles/kzg_precomputed_lines.hpp similarity index 75% rename from lib/evmone_precompiles/kzg_setup_g2_1_lines.hpp rename to lib/evmone_precompiles/kzg_precomputed_lines.hpp index b7414fb744..3680141331 100644 --- a/lib/evmone_precompiles/kzg_setup_g2_1_lines.hpp +++ b/lib/evmone_precompiles/kzg_precomputed_lines.hpp @@ -7,6 +7,9 @@ namespace evmone::crypto { +/// Returns precomputed Miller-loop lines for the BLS12-381 G2 generator [1]₂. +const blst_fp6* g2_gen_lines() noexcept; + /// Returns precomputed Miller-loop lines for KZG_SETUP_G2_1 ([s]₂ from the /// Ethereum mainnet trusted setup). const blst_fp6* kzg_setup_g2_1_lines() noexcept; diff --git a/test/unittests/precompiles_kzg_test.cpp b/test/unittests/precompiles_kzg_test.cpp index 484b051a93..e189920d18 100644 --- a/test/unittests/precompiles_kzg_test.cpp +++ b/test/unittests/precompiles_kzg_test.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include #include @@ -45,6 +45,14 @@ TEST(kzg, verify_proof_zero) EXPECT_TRUE(r); } +TEST(kzg, verify_g2_gen_lines) +{ + blst_fp6 expected[68]; + blst_precompute_lines(expected, blst_p2_affine_generator()); + const auto precomputed = g2_gen_lines(); + EXPECT_TRUE(std::memcmp(precomputed, expected, sizeof(expected)) == 0); +} + TEST(kzg, verify_kzg_setup_g2_1_lines) { /// The point [s]₂ at index 1 of the G2 series of the Ethereum mainnet KZG