use core::slice;

use super::{Felt, Word, smt::InnerNode};

// EMPTY NODES SUBTREES
// ================================================================================================

/// Contains precomputed roots of empty subtrees in a Merkle tree.
pub struct EmptySubtreeRoots;

impl EmptySubtreeRoots {
    /// Returns a static slice with roots of empty subtrees of a Merkle tree starting at the
    /// specified depth.
    pub const fn empty_hashes(tree_depth: u8) -> &'static [Word] {
        let ptr = &EMPTY_SUBTREES[255 - tree_depth as usize] as *const Word;
        // SAFETY:
        // 1. Lifetime: EMPTY_SUBTREES is a static array with 256 elements, so it outlives any
        //    returned reference.
        // 2. Bounds: tree_depth is a u8 (0-255). The starting index is 255 - tree_depth, which is
        //    always in [0, 255]. The slice length is tree_depth + 1, so the end index is (255 -
        //    tree_depth) + (tree_depth + 1) = 256, which is exactly the array length.
        // 3. Alignment: ptr points to a valid Word in the array, satisfying slice::from_raw_parts
        //    requirements.
        // This would not be possible as a const fn with safe slice indexing, which is not stable.
        unsafe { slice::from_raw_parts(ptr, tree_depth as usize + 1) }
    }

    /// Returns the node's digest for a sub-tree with all its leaves set to the empty word.
    pub const fn entry(tree_depth: u8, node_depth: u8) -> &'static Word {
        assert!(node_depth <= tree_depth);
        let pos = 255 - tree_depth + node_depth;
        &EMPTY_SUBTREES[pos as usize]
    }

    /// Returns a sparse Merkle tree [`InnerNode`] with two empty children.
    ///
    /// # Note
    /// `node_depth` is the depth of the **parent** to have empty children. That is, `node_depth`
    /// and the depth of the returned [`InnerNode`] are the same, and thus the empty hashes are for
    /// subtrees of depth `node_depth + 1`.
    pub(crate) const fn get_inner_node(tree_depth: u8, node_depth: u8) -> InnerNode {
        let &child = Self::entry(tree_depth, node_depth + 1);
        InnerNode { left: child, right: child }
    }
}

// Poseidon2 empty subtree hashes for depths 0..255 (root at index 0). Generated by repeatedly
// merging the empty word upward.
const EMPTY_SUBTREES: [Word; 256] = [
    Word::new([
        Felt::new_unchecked(0x4c4f25c381e6b418),
        Felt::new_unchecked(0x4efaef9f33cf00b3),
        Felt::new_unchecked(0x9b4ccd92de23bca0),
        Felt::new_unchecked(0x5cbbdf50c70326fb),
    ]),
    Word::new([
        Felt::new_unchecked(0x6f4f58b1fd683ac0),
        Felt::new_unchecked(0x98b0d7cc08c74f3a),
        Felt::new_unchecked(0x0ec6e4033bd6571f),
        Felt::new_unchecked(0x5d8262a48141ef78),
    ]),
    Word::new([
        Felt::new_unchecked(0x6a63aa718072ee71),
        Felt::new_unchecked(0xea6da6a9d34039b0),
        Felt::new_unchecked(0x12b3466ee1dea119),
        Felt::new_unchecked(0x554a18ea9e8eb63f),
    ]),
    Word::new([
        Felt::new_unchecked(0x8c9f6f0a5a929353),
        Felt::new_unchecked(0xd77fdb28292001c6),
        Felt::new_unchecked(0x915a07da255563e5),
        Felt::new_unchecked(0x18e8401cfda4dc43),
    ]),
    Word::new([
        Felt::new_unchecked(0x85ba2b42cd9f245b),
        Felt::new_unchecked(0xc115f22e9485e488),
        Felt::new_unchecked(0xf3048ff1fc10cb7b),
        Felt::new_unchecked(0xbb0dd42baec71f4f),
    ]),
    Word::new([
        Felt::new_unchecked(0x58d2b955c592a555),
        Felt::new_unchecked(0x059bab14b5e84168),
        Felt::new_unchecked(0xb8bd990c0af52b1d),
        Felt::new_unchecked(0x6914c44744a57a2b),
    ]),
    Word::new([
        Felt::new_unchecked(0x91baf2cf95412a72),
        Felt::new_unchecked(0xc72a7b4e3ef1d622),
        Felt::new_unchecked(0x9a99975e5ab63e0b),
        Felt::new_unchecked(0x9b16c5c66c7586ee),
    ]),
    Word::new([
        Felt::new_unchecked(0x426b357fabf42949),
        Felt::new_unchecked(0x8709ad884a7ddb13),
        Felt::new_unchecked(0x5c7bee1ee2f68a87),
        Felt::new_unchecked(0xa7da1212f0218184),
    ]),
    Word::new([
        Felt::new_unchecked(0xdb29c8aa1f19bce8),
        Felt::new_unchecked(0x272ddbb96bb8a008),
        Felt::new_unchecked(0x3e390b4c8d4bcb80),
        Felt::new_unchecked(0xaf37f1594a9038a8),
    ]),
    Word::new([
        Felt::new_unchecked(0x085a13128e900c0c),
        Felt::new_unchecked(0x5784c3e83c6c2355),
        Felt::new_unchecked(0x980aedea6a7e9fcd),
        Felt::new_unchecked(0x7acc863dfba2ed8e),
    ]),
    Word::new([
        Felt::new_unchecked(0x5ea58f1598470e6d),
        Felt::new_unchecked(0x400c8c0f92222b7d),
        Felt::new_unchecked(0x0fbcbed8e27387f8),
        Felt::new_unchecked(0x82bc62efd05c114c),
    ]),
    Word::new([
        Felt::new_unchecked(0x5b44914d0bf7b2c5),
        Felt::new_unchecked(0xda1a4ff72d0d1e9a),
        Felt::new_unchecked(0xc1ce4f8428eb0d50),
        Felt::new_unchecked(0xf5ff337bc642e2e3),
    ]),
    Word::new([
        Felt::new_unchecked(0x8359bfcbca34cb46),
        Felt::new_unchecked(0xe82f32b88c5666c2),
        Felt::new_unchecked(0x66423a5bb08de622),
        Felt::new_unchecked(0xc9652d509826e5f6),
    ]),
    Word::new([
        Felt::new_unchecked(0x6e68f94374d4bc14),
        Felt::new_unchecked(0x6e793711d79b0cfb),
        Felt::new_unchecked(0x2f7b445e1dd0100b),
        Felt::new_unchecked(0x723e3e45f2825c2f),
    ]),
    Word::new([
        Felt::new_unchecked(0x77feeb0c5f52033c),
        Felt::new_unchecked(0xf585a9f40bc6379c),
        Felt::new_unchecked(0x761d43ca6808af7f),
        Felt::new_unchecked(0x5bd50d39bf707d3b),
    ]),
    Word::new([
        Felt::new_unchecked(0xd517236676f152ce),
        Felt::new_unchecked(0x0c8763bedf2d0a12),
        Felt::new_unchecked(0xe8c118f6922937bd),
        Felt::new_unchecked(0x4fe8bd8ef1acfa95),
    ]),
    Word::new([
        Felt::new_unchecked(0x96d944f4048b971e),
        Felt::new_unchecked(0x60470c914ff5b86e),
        Felt::new_unchecked(0x1d1b2780ccf538a7),
        Felt::new_unchecked(0x79cca49fd17f1ea6),
    ]),
    Word::new([
        Felt::new_unchecked(0x4db6c0e245289509),
        Felt::new_unchecked(0x7e23e1237bb3b42b),
        Felt::new_unchecked(0x26ed2be12edb3df8),
        Felt::new_unchecked(0xc73fc0c321466ba0),
    ]),
    Word::new([
        Felt::new_unchecked(0xf4d102ff48eb8faf),
        Felt::new_unchecked(0x8003b9d941b4a022),
        Felt::new_unchecked(0x9e17f1edd40819a8),
        Felt::new_unchecked(0x3b0f05835eeb4d7a),
    ]),
    Word::new([
        Felt::new_unchecked(0x3d1b8bd3071b2b98),
        Felt::new_unchecked(0xa794c8cded26a3a9),
        Felt::new_unchecked(0xd0173a1c4483a95b),
        Felt::new_unchecked(0xf4cb877e2c41e10b),
    ]),
    Word::new([
        Felt::new_unchecked(0xfac0e64c6f5a183e),
        Felt::new_unchecked(0x1ce5a42204919c27),
        Felt::new_unchecked(0xcc3e93ee7f5f5b68),
        Felt::new_unchecked(0x40890d85ab73dbed),
    ]),
    Word::new([
        Felt::new_unchecked(0xe4a5839f68d1428c),
        Felt::new_unchecked(0xb04141af0bcd7c6e),
        Felt::new_unchecked(0x15876f1a5c40d606),
        Felt::new_unchecked(0x5e7e0f1546b8f66d),
    ]),
    Word::new([
        Felt::new_unchecked(0x8440ee0558f7750e),
        Felt::new_unchecked(0x8ab26896d8c22617),
        Felt::new_unchecked(0x3301c974c37fc64a),
        Felt::new_unchecked(0x39e8f07f3739d84b),
    ]),
    Word::new([
        Felt::new_unchecked(0xdea9bc5832fd621d),
        Felt::new_unchecked(0x3cd34508a2a4aff5),
        Felt::new_unchecked(0xfb0986c303d559f0),
        Felt::new_unchecked(0xb3622c645327f880),
    ]),
    Word::new([
        Felt::new_unchecked(0xd6c5f7a1531cf087),
        Felt::new_unchecked(0x114cf2ac95e0cee3),
        Felt::new_unchecked(0xd8835c2c0ff1dfe8),
        Felt::new_unchecked(0x62ae27c77404a384),
    ]),
    Word::new([
        Felt::new_unchecked(0xe29f14d09f47b04b),
        Felt::new_unchecked(0x533ea3fa6b298a76),
        Felt::new_unchecked(0xb78b67033c9064de),
        Felt::new_unchecked(0xd7c87b4821cbbfa0),
    ]),
    Word::new([
        Felt::new_unchecked(0x93c7a74d0def216d),
        Felt::new_unchecked(0xddb3170d3cbf7553),
        Felt::new_unchecked(0x8c5470c0a538c7a8),
        Felt::new_unchecked(0xae95587051aa3371),
    ]),
    Word::new([
        Felt::new_unchecked(0x51fef34c69193b93),
        Felt::new_unchecked(0xe10207f668aaabec),
        Felt::new_unchecked(0xbf04a03680bd70ea),
        Felt::new_unchecked(0x6ffd5e8ac06ab267),
    ]),
    Word::new([
        Felt::new_unchecked(0x36c0cc1726d5f776),
        Felt::new_unchecked(0xda699e36a057bf54),
        Felt::new_unchecked(0xe50e1a16719ce9d7),
        Felt::new_unchecked(0x0362ffdcd7166b33),
    ]),
    Word::new([
        Felt::new_unchecked(0xbda2e0822ceca3be),
        Felt::new_unchecked(0x18d920168dd7cfd3),
        Felt::new_unchecked(0xc9af295181c108f0),
        Felt::new_unchecked(0x6f43459ca6286f64),
    ]),
    Word::new([
        Felt::new_unchecked(0x6bcbded8665027ff),
        Felt::new_unchecked(0x52c89ea7e2b2824c),
        Felt::new_unchecked(0xef14967767d21f83),
        Felt::new_unchecked(0x87f520ca8640f685),
    ]),
    Word::new([
        Felt::new_unchecked(0x94e18c15e22f8a24),
        Felt::new_unchecked(0x745f09ab5e3eeca5),
        Felt::new_unchecked(0x6fc2fec9f65bc60b),
        Felt::new_unchecked(0xd4e4aca63a43a809),
    ]),
    Word::new([
        Felt::new_unchecked(0xa72cd5e0a9dbd78a),
        Felt::new_unchecked(0x1bd859442151023b),
        Felt::new_unchecked(0xe93168e5153a73d3),
        Felt::new_unchecked(0x1944bf967eaea104),
    ]),
    Word::new([
        Felt::new_unchecked(0xc094c3946c426b72),
        Felt::new_unchecked(0xe2b3d4652ec373f2),
        Felt::new_unchecked(0x1627f44f3c70ba62),
        Felt::new_unchecked(0xdd7ec3f1746bcb77),
    ]),
    Word::new([
        Felt::new_unchecked(0x8335704932578d63),
        Felt::new_unchecked(0x0a73e42cc7c17d84),
        Felt::new_unchecked(0xf0d977e0b870de98),
        Felt::new_unchecked(0xc3931cc44c9e9225),
    ]),
    Word::new([
        Felt::new_unchecked(0x3dab0e77122f9016),
        Felt::new_unchecked(0x931cf6c3711bf31f),
        Felt::new_unchecked(0x3b007a30619f3df3),
        Felt::new_unchecked(0x12892b2d3a64dbda),
    ]),
    Word::new([
        Felt::new_unchecked(0x00eb98933ba2f6bb),
        Felt::new_unchecked(0xb7002750b3367b93),
        Felt::new_unchecked(0xda039ebdad7cb2fc),
        Felt::new_unchecked(0x172ae08e17d4e8d4),
    ]),
    Word::new([
        Felt::new_unchecked(0xf2cb4906b28f35c2),
        Felt::new_unchecked(0x4bb30dca93339b8f),
        Felt::new_unchecked(0x89205b67d713298d),
        Felt::new_unchecked(0x977eb680b5770040),
    ]),
    Word::new([
        Felt::new_unchecked(0x1c8bf29ccba294fe),
        Felt::new_unchecked(0xfecaead56c11576c),
        Felt::new_unchecked(0x189f3b1165497858),
        Felt::new_unchecked(0xdf1b25359471086f),
    ]),
    Word::new([
        Felt::new_unchecked(0x358ee429251b0900),
        Felt::new_unchecked(0xa18acdc332bf723a),
        Felt::new_unchecked(0x38ac0b7c9ca73880),
        Felt::new_unchecked(0x34d4eaad1b5f0496),
    ]),
    Word::new([
        Felt::new_unchecked(0xe9023a1544703b89),
        Felt::new_unchecked(0x6db0aa42d2e16023),
        Felt::new_unchecked(0x8122a04db9523900),
        Felt::new_unchecked(0x9d01f08dc8a514e1),
    ]),
    Word::new([
        Felt::new_unchecked(0x274f6fc77438bb26),
        Felt::new_unchecked(0xc25ff1046af9c4cd),
        Felt::new_unchecked(0x82a69843472e69d3),
        Felt::new_unchecked(0xe5a626ddfec0d5ec),
    ]),
    Word::new([
        Felt::new_unchecked(0xc7bc0974d4d1ebdc),
        Felt::new_unchecked(0xa63ee049dbc1346a),
        Felt::new_unchecked(0x59cce9fbd6216ecb),
        Felt::new_unchecked(0x1506f9b3a667fc21),
    ]),
    Word::new([
        Felt::new_unchecked(0x740975d66980e9b3),
        Felt::new_unchecked(0x491071fde38ebcbc),
        Felt::new_unchecked(0x51d27f9782b7aa71),
        Felt::new_unchecked(0xe2cccee6a3058f81),
    ]),
    Word::new([
        Felt::new_unchecked(0xefafa0d1cca18f6b),
        Felt::new_unchecked(0x21d01e1f4d3200fd),
        Felt::new_unchecked(0x32543fb5cb1f1330),
        Felt::new_unchecked(0x574e659ac1bd470a),
    ]),
    Word::new([
        Felt::new_unchecked(0xb8be198c6b934315),
        Felt::new_unchecked(0x032729d41beabbd2),
        Felt::new_unchecked(0xe8ae241489f2f7be),
        Felt::new_unchecked(0x2f6be58f340ce431),
    ]),
    Word::new([
        Felt::new_unchecked(0x61192457c61235d5),
        Felt::new_unchecked(0x12a955ce18e6c305),
        Felt::new_unchecked(0xcdd90649a2bbe9ab),
        Felt::new_unchecked(0x91b25426cf074b2e),
    ]),
    Word::new([
        Felt::new_unchecked(0x28179dce83b0d50e),
        Felt::new_unchecked(0x93a7870c5eb916ed),
        Felt::new_unchecked(0xdfe027afc4f5480a),
        Felt::new_unchecked(0x9ab5b0ae17c54ace),
    ]),
    Word::new([
        Felt::new_unchecked(0xcb3bbd3a71dab53e),
        Felt::new_unchecked(0x4304ceec93bfb5ea),
        Felt::new_unchecked(0x2f2e6eccc76b435e),
        Felt::new_unchecked(0xef13f7ce5fc20766),
    ]),
    Word::new([
        Felt::new_unchecked(0xf1cab7b14b2b4886),
        Felt::new_unchecked(0x5c8a8f437fde7974),
        Felt::new_unchecked(0x25caa4ead5c6f47f),
        Felt::new_unchecked(0x968d3e942a727813),
    ]),
    Word::new([
        Felt::new_unchecked(0xc8ca564e1fa15e70),
        Felt::new_unchecked(0x3541a4393cced221),
        Felt::new_unchecked(0x8e3e6294a5a3e70a),
        Felt::new_unchecked(0x41fd4afd00ba830c),
    ]),
    Word::new([
        Felt::new_unchecked(0xc2cabf38295ecfc6),
        Felt::new_unchecked(0xcd115741a673fa37),
        Felt::new_unchecked(0xacb77a4ab17f55d7),
        Felt::new_unchecked(0x7e1840e35c545330),
    ]),
    Word::new([
        Felt::new_unchecked(0x750c303c0e6d0dab),
        Felt::new_unchecked(0xcb66103f5bb48380),
        Felt::new_unchecked(0x9eec24d54e17f633),
        Felt::new_unchecked(0x4e553d6e7f94254c),
    ]),
    Word::new([
        Felt::new_unchecked(0xfb1bc99cffe0024b),
        Felt::new_unchecked(0xd0fa793ff9b9ec3f),
        Felt::new_unchecked(0x6923727eedaf58ed),
        Felt::new_unchecked(0x503b9a6dec12cb30),
    ]),
    Word::new([
        Felt::new_unchecked(0x77fe721f644abb71),
        Felt::new_unchecked(0x4d7856e2d36a578e),
        Felt::new_unchecked(0x02bf228c6daa5349),
        Felt::new_unchecked(0xad735e6136044c50),
    ]),
    Word::new([
        Felt::new_unchecked(0x1552e98b8399fee0),
        Felt::new_unchecked(0x660aa729b5cef551),
        Felt::new_unchecked(0xb00bcdaae79cbf64),
        Felt::new_unchecked(0x0837b92aa8d6c16b),
    ]),
    Word::new([
        Felt::new_unchecked(0x288a230cf0ae5b21),
        Felt::new_unchecked(0xa47da6db58a203f0),
        Felt::new_unchecked(0x127ccfa9e3e7ea72),
        Felt::new_unchecked(0xd0a6ca2919ff6f3a),
    ]),
    Word::new([
        Felt::new_unchecked(0x7927c07d0e07ee1e),
        Felt::new_unchecked(0x101f4053bd001276),
        Felt::new_unchecked(0xccdfcc6d0a9a2582),
        Felt::new_unchecked(0x33a309ccc919a439),
    ]),
    Word::new([
        Felt::new_unchecked(0x571070fa8529b634),
        Felt::new_unchecked(0x6f9d97f1091906cc),
        Felt::new_unchecked(0x2524aeca304cb9e4),
        Felt::new_unchecked(0x4088d46b157038b8),
    ]),
    Word::new([
        Felt::new_unchecked(0x8624643f3c389919),
        Felt::new_unchecked(0x17d782b4204db31c),
        Felt::new_unchecked(0xe75a4060068ba11a),
        Felt::new_unchecked(0x4fad0d4319891940),
    ]),
    Word::new([
        Felt::new_unchecked(0x574cb69ffca04275),
        Felt::new_unchecked(0x493938a8bccb44db),
        Felt::new_unchecked(0xfb7ffc6b92f6a3e2),
        Felt::new_unchecked(0x534c9d53b229d295),
    ]),
    Word::new([
        Felt::new_unchecked(0x31ae7423925ed97b),
        Felt::new_unchecked(0xd38e2640229f51d7),
        Felt::new_unchecked(0xdf41da363b58b070),
        Felt::new_unchecked(0x43fe9fc24daf4a62),
    ]),
    Word::new([
        Felt::new_unchecked(0x5ab7380fbcc148fd),
        Felt::new_unchecked(0x8ce336f0167b134c),
        Felt::new_unchecked(0x435f4ecdd3ba555e),
        Felt::new_unchecked(0xbea93960c5fa8d26),
    ]),
    Word::new([
        Felt::new_unchecked(0x45f7ea2a8fcd752f),
        Felt::new_unchecked(0x19735515777c9278),
        Felt::new_unchecked(0x2f70d26769c7c5e4),
        Felt::new_unchecked(0xdcdd31f5d5336d5b),
    ]),
    Word::new([
        Felt::new_unchecked(0x8105568c603d0a4f),
        Felt::new_unchecked(0xf11521a9400f2d43),
        Felt::new_unchecked(0x0343856906a3b205),
        Felt::new_unchecked(0x658b1805b9e5a6b0),
    ]),
    Word::new([
        Felt::new_unchecked(0xb8235afd656e68d1),
        Felt::new_unchecked(0x8e9325b28c9db5b8),
        Felt::new_unchecked(0xb8e9b84eafe92bf1),
        Felt::new_unchecked(0xaaab7303aec7b932),
    ]),
    Word::new([
        Felt::new_unchecked(0x522be39d1d039336),
        Felt::new_unchecked(0x54778cf95a13a4b7),
        Felt::new_unchecked(0xf686afe997af8e76),
        Felt::new_unchecked(0x49d00abd183e9577),
    ]),
    Word::new([
        Felt::new_unchecked(0x7a87110967de6216),
        Felt::new_unchecked(0x4e6a5094cbcd350a),
        Felt::new_unchecked(0x4d21aca4636aa2af),
        Felt::new_unchecked(0x9baefa59ca318945),
    ]),
    Word::new([
        Felt::new_unchecked(0xce4215291a0ee341),
        Felt::new_unchecked(0x681e92bc5d92c35f),
        Felt::new_unchecked(0x9ab62118bae03dbd),
        Felt::new_unchecked(0xd662cdec48a1cb55),
    ]),
    Word::new([
        Felt::new_unchecked(0x444bff5dd5d99841),
        Felt::new_unchecked(0xcbc0bad4128802a7),
        Felt::new_unchecked(0x7dc627dd675321a9),
        Felt::new_unchecked(0x12ab3cc573078686),
    ]),
    Word::new([
        Felt::new_unchecked(0x8743c664828e6b76),
        Felt::new_unchecked(0xfe5d9306c95b1713),
        Felt::new_unchecked(0x73de4560e75e8062),
        Felt::new_unchecked(0x25536f84dd8fa10e),
    ]),
    Word::new([
        Felt::new_unchecked(0x0eb224b91daef640),
        Felt::new_unchecked(0xbe21b47657f5137f),
        Felt::new_unchecked(0xcdc4e271cd9d455b),
        Felt::new_unchecked(0xf91afc1c595493db),
    ]),
    Word::new([
        Felt::new_unchecked(0x0fef850ea1af29ee),
        Felt::new_unchecked(0xf391f562226b0ced),
        Felt::new_unchecked(0x7710b9c25a70cdc0),
        Felt::new_unchecked(0x1aa67e3c7783e360),
    ]),
    Word::new([
        Felt::new_unchecked(0x9728bb0dc4399b39),
        Felt::new_unchecked(0x6b4967135b05596b),
        Felt::new_unchecked(0x98d77568369f548e),
        Felt::new_unchecked(0x1003df8f565f3e5b),
    ]),
    Word::new([
        Felt::new_unchecked(0x562424e7c70bfeb6),
        Felt::new_unchecked(0x701766ac2bcb299c),
        Felt::new_unchecked(0xea733a7d64bf2c86),
        Felt::new_unchecked(0x9010902157097cfa),
    ]),
    Word::new([
        Felt::new_unchecked(0x821b070d6522c246),
        Felt::new_unchecked(0x92c01259b7e9b96b),
        Felt::new_unchecked(0x49202f5a484e8b28),
        Felt::new_unchecked(0x72928828b97dd37c),
    ]),
    Word::new([
        Felt::new_unchecked(0x06eb0da16018d870),
        Felt::new_unchecked(0x1e56486cd6353a5b),
        Felt::new_unchecked(0x5ce12d3f3dc19b05),
        Felt::new_unchecked(0x9b80ef76e5fa3575),
    ]),
    Word::new([
        Felt::new_unchecked(0xc35eee558722b546),
        Felt::new_unchecked(0xdb166a796f0a02c2),
        Felt::new_unchecked(0xf69e31d05695c58d),
        Felt::new_unchecked(0x289bc5bc90544fcc),
    ]),
    Word::new([
        Felt::new_unchecked(0x25b0e88c7012e834),
        Felt::new_unchecked(0xa7224182373a6440),
        Felt::new_unchecked(0x173777468abc3d44),
        Felt::new_unchecked(0xe54cf20cffcf86ca),
    ]),
    Word::new([
        Felt::new_unchecked(0xc02e6a573c7ed292),
        Felt::new_unchecked(0x35b6402d71d0adb9),
        Felt::new_unchecked(0x5cd2c8a6ac3e7083),
        Felt::new_unchecked(0x2388eda39acb5336),
    ]),
    Word::new([
        Felt::new_unchecked(0x78c00bf96ea42bbf),
        Felt::new_unchecked(0x1ec02d8b1dbc38ff),
        Felt::new_unchecked(0xe7de2bfb53624b36),
        Felt::new_unchecked(0x022aedad8ef3616b),
    ]),
    Word::new([
        Felt::new_unchecked(0x3ad714ca78bbe472),
        Felt::new_unchecked(0x2a6ad98c25e3a428),
        Felt::new_unchecked(0x75524799f1ce7b8c),
        Felt::new_unchecked(0x7ee22afe3881d875),
    ]),
    Word::new([
        Felt::new_unchecked(0x9b1d77b5f98a118a),
        Felt::new_unchecked(0x5db8bc2ce3f61e6d),
        Felt::new_unchecked(0xa683c9daa18110d8),
        Felt::new_unchecked(0x753272e15a587968),
    ]),
    Word::new([
        Felt::new_unchecked(0x060ca6e344060800),
        Felt::new_unchecked(0xfae2f90213b86ff0),
        Felt::new_unchecked(0x0606ac5f147b803d),
        Felt::new_unchecked(0x434de966bd04f765),
    ]),
    Word::new([
        Felt::new_unchecked(0x8ef48ccfce07f406),
        Felt::new_unchecked(0xf5a41d2111325bfe),
        Felt::new_unchecked(0x17264f6eb5b4cdaa),
        Felt::new_unchecked(0xec2310908b7b83d8),
    ]),
    Word::new([
        Felt::new_unchecked(0xdb1b803fe8febe93),
        Felt::new_unchecked(0xd9dfce0805d65336),
        Felt::new_unchecked(0x6bb502b32f767b27),
        Felt::new_unchecked(0xde85ac18157d6386),
    ]),
    Word::new([
        Felt::new_unchecked(0xf65dac4e4a996af3),
        Felt::new_unchecked(0xfde7682301ddddd9),
        Felt::new_unchecked(0xf3115bf873b0358c),
        Felt::new_unchecked(0x6a8f813a7a583575),
    ]),
    Word::new([
        Felt::new_unchecked(0xe8cb62a3817385f0),
        Felt::new_unchecked(0xb183563b68457034),
        Felt::new_unchecked(0x0504d9e6b8e8bb6b),
        Felt::new_unchecked(0x36b2fafe5f506100),
    ]),
    Word::new([
        Felt::new_unchecked(0xf41e8ab106786bd4),
        Felt::new_unchecked(0x1b2f564e57db0f66),
        Felt::new_unchecked(0xc920d858114aed61),
        Felt::new_unchecked(0xba4618226512e159),
    ]),
    Word::new([
        Felt::new_unchecked(0x01befb99c9341601),
        Felt::new_unchecked(0x900b096476ccc620),
        Felt::new_unchecked(0xbb57d9835686b4bc),
        Felt::new_unchecked(0x4c17d0a1558ae848),
    ]),
    Word::new([
        Felt::new_unchecked(0xff222f8e8701f045),
        Felt::new_unchecked(0x217dd307fededabf),
        Felt::new_unchecked(0xfcf0c23bb1384f18),
        Felt::new_unchecked(0x51f60bd42142dfd0),
    ]),
    Word::new([
        Felt::new_unchecked(0x452212d261e584c4),
        Felt::new_unchecked(0xeebdb4a2ccebd4a9),
        Felt::new_unchecked(0x79cb25167abd229d),
        Felt::new_unchecked(0x36a3793c743e1e30),
    ]),
    Word::new([
        Felt::new_unchecked(0x01caf9bb188b2f2f),
        Felt::new_unchecked(0xaebb85879b3f6d6f),
        Felt::new_unchecked(0x3d1e118a45ecaf5d),
        Felt::new_unchecked(0xc8d325d158fb1d76),
    ]),
    Word::new([
        Felt::new_unchecked(0x459c4c9f4ef519ce),
        Felt::new_unchecked(0xc91a01bd97fc5938),
        Felt::new_unchecked(0x091183436933fcc3),
        Felt::new_unchecked(0xd4824d71e41c687a),
    ]),
    Word::new([
        Felt::new_unchecked(0x5bea80fe6b9eccad),
        Felt::new_unchecked(0x0094dc3df67db3c7),
        Felt::new_unchecked(0x41df3c2193134951),
        Felt::new_unchecked(0x4433faaebeedafdb),
    ]),
    Word::new([
        Felt::new_unchecked(0xd846b8d025899bbf),
        Felt::new_unchecked(0xc88b0d0f914359be),
        Felt::new_unchecked(0x1aa4242a605cec57),
        Felt::new_unchecked(0x54a4c144cb6138ac),
    ]),
    Word::new([
        Felt::new_unchecked(0xe78e15f937e23f9f),
        Felt::new_unchecked(0xa2dd1699cda36767),
        Felt::new_unchecked(0x0f72e41266047f3d),
        Felt::new_unchecked(0x975be883eb3c1b59),
    ]),
    Word::new([
        Felt::new_unchecked(0x35c61b05315ee566),
        Felt::new_unchecked(0x431031de15b6bd94),
        Felt::new_unchecked(0xac3cdcc29b203e9c),
        Felt::new_unchecked(0x4ea89420b63a861b),
    ]),
    Word::new([
        Felt::new_unchecked(0x6e30a3f2468a73e8),
        Felt::new_unchecked(0x13378272d987ee1b),
        Felt::new_unchecked(0xb76724d0f023d9c5),
        Felt::new_unchecked(0x01ece73b5f000a3b),
    ]),
    Word::new([
        Felt::new_unchecked(0x0b1d5556f721b3fa),
        Felt::new_unchecked(0x1e4eb49b7d09cdfa),
        Felt::new_unchecked(0x25c8fbf2bbfa4037),
        Felt::new_unchecked(0xdf4c7b917fad54d7),
    ]),
    Word::new([
        Felt::new_unchecked(0xafb7411d2986278d),
        Felt::new_unchecked(0x52aff0e894aa5a93),
        Felt::new_unchecked(0xb5ea358f35b12b1e),
        Felt::new_unchecked(0xd935ee5912b2e915),
    ]),
    Word::new([
        Felt::new_unchecked(0x7d2fd3ca225e5354),
        Felt::new_unchecked(0x7237154354e48d89),
        Felt::new_unchecked(0xc333dd09608804ad),
        Felt::new_unchecked(0xe9097f0416711084),
    ]),
    Word::new([
        Felt::new_unchecked(0xa1d950c36fd9f939),
        Felt::new_unchecked(0xad28b64388bf93e1),
        Felt::new_unchecked(0xc43be9724ea1d9d2),
        Felt::new_unchecked(0x727307c17f2e1bfe),
    ]),
    Word::new([
        Felt::new_unchecked(0xb4c89f66d142e19b),
        Felt::new_unchecked(0xf608ec08b6165621),
        Felt::new_unchecked(0x10ece5bbbc02e0fd),
        Felt::new_unchecked(0x8c9f28a65cf173e9),
    ]),
    Word::new([
        Felt::new_unchecked(0x1f631999cd61b4c3),
        Felt::new_unchecked(0xe3c5a6cf71f4bae1),
        Felt::new_unchecked(0x5c34e905be52ab53),
        Felt::new_unchecked(0x653a911dd9c1d7dc),
    ]),
    Word::new([
        Felt::new_unchecked(0xa272f052fe6234ef),
        Felt::new_unchecked(0x3a7a2b3f32c38206),
        Felt::new_unchecked(0x2ecdfb73c120cc73),
        Felt::new_unchecked(0xaa2fd92278513ebc),
    ]),
    Word::new([
        Felt::new_unchecked(0xf467afb92e2d6795),
        Felt::new_unchecked(0xef30265ea67632c7),
        Felt::new_unchecked(0x64ad8acfd6375081),
        Felt::new_unchecked(0xadc4c536cb9bd2ab),
    ]),
    Word::new([
        Felt::new_unchecked(0x482ce2a7e663c83b),
        Felt::new_unchecked(0x48e05f89c4d5be26),
        Felt::new_unchecked(0x604eb9b913153b9d),
        Felt::new_unchecked(0xfa9986b504865cc5),
    ]),
    Word::new([
        Felt::new_unchecked(0xaeb76174b9cdc11d),
        Felt::new_unchecked(0xd3c91d07fabaf276),
        Felt::new_unchecked(0x4582555f33ef461f),
        Felt::new_unchecked(0xd744b889d614cc9f),
    ]),
    Word::new([
        Felt::new_unchecked(0x9b3f64333c21296a),
        Felt::new_unchecked(0x6fb3c324efd10a40),
        Felt::new_unchecked(0x8c8cf62b454f4efb),
        Felt::new_unchecked(0xacef39f5726e16d6),
    ]),
    Word::new([
        Felt::new_unchecked(0x4e3b7bffad47bce6),
        Felt::new_unchecked(0x6b56fb3ca25e2094),
        Felt::new_unchecked(0xbc323b5db596de2f),
        Felt::new_unchecked(0x6430b549346296f6),
    ]),
    Word::new([
        Felt::new_unchecked(0xeef784d4e8af60cc),
        Felt::new_unchecked(0x62392952cf05b74d),
        Felt::new_unchecked(0x4c70721202e81f91),
        Felt::new_unchecked(0xc87f494c6dc691ee),
    ]),
    Word::new([
        Felt::new_unchecked(0x14cdbb3645c32ac1),
        Felt::new_unchecked(0x63854ea3b584025f),
        Felt::new_unchecked(0xb3d88642bc0171f4),
        Felt::new_unchecked(0xd868c6895bb01153),
    ]),
    Word::new([
        Felt::new_unchecked(0x88a590242df9557d),
        Felt::new_unchecked(0x64b807bf410bfde2),
        Felt::new_unchecked(0x65b47f4e180efc80),
        Felt::new_unchecked(0x0246f8de53fdd07e),
    ]),
    Word::new([
        Felt::new_unchecked(0x202e98bf1e19ce05),
        Felt::new_unchecked(0xd5f063d66ef11d6c),
        Felt::new_unchecked(0x0aed03a3854e1a13),
        Felt::new_unchecked(0xc74d8a8797926799),
    ]),
    Word::new([
        Felt::new_unchecked(0x9b5fa4970f8e5aa5),
        Felt::new_unchecked(0xdd35b0607ccf18e3),
        Felt::new_unchecked(0x05e89c2cf1e443c8),
        Felt::new_unchecked(0x5cebc8ae5a9d3646),
    ]),
    Word::new([
        Felt::new_unchecked(0xf4ae5469926b2191),
        Felt::new_unchecked(0xd7ffd83acb02c8ba),
        Felt::new_unchecked(0xcc4f40c6c36bb791),
        Felt::new_unchecked(0x9f698d2a6fc0d9bf),
    ]),
    Word::new([
        Felt::new_unchecked(0x99b27009934262e2),
        Felt::new_unchecked(0x393667c95ea35de8),
        Felt::new_unchecked(0xf1cbf6b3ee65bc73),
        Felt::new_unchecked(0xdf500c8e4c4e2dcf),
    ]),
    Word::new([
        Felt::new_unchecked(0x20f52c072ad4a580),
        Felt::new_unchecked(0xfd022f5d7a6ac0d2),
        Felt::new_unchecked(0x9c389855acb74ab0),
        Felt::new_unchecked(0xbabb009925c8b3fd),
    ]),
    Word::new([
        Felt::new_unchecked(0x323b431386ba76d1),
        Felt::new_unchecked(0x5dd6911ae570e2ee),
        Felt::new_unchecked(0x08c231b8ff9f4a73),
        Felt::new_unchecked(0x8bd6f86c6c291580),
    ]),
    Word::new([
        Felt::new_unchecked(0x4a3ba00112507849),
        Felt::new_unchecked(0xb1028b1610d6eed2),
        Felt::new_unchecked(0xf039a251eb8f3690),
        Felt::new_unchecked(0x269123f91b0cd017),
    ]),
    Word::new([
        Felt::new_unchecked(0x24dc3153d23be189),
        Felt::new_unchecked(0x61d889575042bf98),
        Felt::new_unchecked(0x502059e5d751cf8a),
        Felt::new_unchecked(0x5a1ac378f44c8063),
    ]),
    Word::new([
        Felt::new_unchecked(0x9b0975a9c1efb2ce),
        Felt::new_unchecked(0xa26cd01acb659cf2),
        Felt::new_unchecked(0x2a7929ca8686292b),
        Felt::new_unchecked(0xea2b392841ecc63e),
    ]),
    Word::new([
        Felt::new_unchecked(0xe791c55d25a490c4),
        Felt::new_unchecked(0xeecf48698a684036),
        Felt::new_unchecked(0x5d3540063eb35547),
        Felt::new_unchecked(0xb2e9037e6b8aa5d1),
    ]),
    Word::new([
        Felt::new_unchecked(0xa9127c67712cdb2b),
        Felt::new_unchecked(0xd8e0c828f48e52db),
        Felt::new_unchecked(0x1633d413bcc7af58),
        Felt::new_unchecked(0x0809fc9b1368c0d4),
    ]),
    Word::new([
        Felt::new_unchecked(0x543d5e5a9a354cdb),
        Felt::new_unchecked(0x8efe9432a3bff23f),
        Felt::new_unchecked(0x9c71988c5e808465),
        Felt::new_unchecked(0xde3133d276c4154c),
    ]),
    Word::new([
        Felt::new_unchecked(0xd0292ad96a0420cf),
        Felt::new_unchecked(0xb5598209c1f1c840),
        Felt::new_unchecked(0x0aad93f39bb6aad5),
        Felt::new_unchecked(0xfa2731146eb5ec8e),
    ]),
    Word::new([
        Felt::new_unchecked(0x4db14fa9d981dbbd),
        Felt::new_unchecked(0x22fd5e0be0a72322),
        Felt::new_unchecked(0x962aef99d2b73f36),
        Felt::new_unchecked(0x5cdd78b8c75ae55b),
    ]),
    Word::new([
        Felt::new_unchecked(0x84b235264584bd50),
        Felt::new_unchecked(0x112dd2d6f48ec693),
        Felt::new_unchecked(0x1f0c9d23e85f4fc9),
        Felt::new_unchecked(0x9d04f0c90a1171a5),
    ]),
    Word::new([
        Felt::new_unchecked(0x16f07a5ae66351fd),
        Felt::new_unchecked(0xada478edb194ba48),
        Felt::new_unchecked(0xa01d9a0643361e47),
        Felt::new_unchecked(0xc2783e0dcf7f5d17),
    ]),
    Word::new([
        Felt::new_unchecked(0x5110b3efad0c529e),
        Felt::new_unchecked(0x48b791b96bf4ea5c),
        Felt::new_unchecked(0xabdf56400d294f79),
        Felt::new_unchecked(0x724043dce50148bb),
    ]),
    Word::new([
        Felt::new_unchecked(0x03e8bffe1e1140ef),
        Felt::new_unchecked(0xdc13aa83b5aae1a3),
        Felt::new_unchecked(0x778a7c5dc01067b4),
        Felt::new_unchecked(0x143d90ce1cde2b69),
    ]),
    Word::new([
        Felt::new_unchecked(0xffa1b474293b1e6e),
        Felt::new_unchecked(0xb6229a9c4d92e06f),
        Felt::new_unchecked(0x49d61074cb93984e),
        Felt::new_unchecked(0xd8f2e27fa43903fe),
    ]),
    Word::new([
        Felt::new_unchecked(0xf1c88b3c6963e9c9),
        Felt::new_unchecked(0x79b01206f4228f67),
        Felt::new_unchecked(0x785331aed09e6417),
        Felt::new_unchecked(0x14ebf0052c629ce4),
    ]),
    Word::new([
        Felt::new_unchecked(0x9e711763920a39ec),
        Felt::new_unchecked(0x811261ad01af5ecc),
        Felt::new_unchecked(0xe3b9780ef2bc32ef),
        Felt::new_unchecked(0x6d8607b24c9a0fe1),
    ]),
    Word::new([
        Felt::new_unchecked(0x4627a6abb9778b76),
        Felt::new_unchecked(0xbb8f08e059cd41ae),
        Felt::new_unchecked(0x8c7714f9a4607cf6),
        Felt::new_unchecked(0xf0cff546e3ef1715),
    ]),
    Word::new([
        Felt::new_unchecked(0xff3f03af9dc9b872),
        Felt::new_unchecked(0xb97da931b2f5699e),
        Felt::new_unchecked(0xc7fde13a1dacb964),
        Felt::new_unchecked(0x36921c1f64e0be45),
    ]),
    Word::new([
        Felt::new_unchecked(0x2215a5523302825b),
        Felt::new_unchecked(0xff666312178e368d),
        Felt::new_unchecked(0x90d132b0e5eeb0c8),
        Felt::new_unchecked(0xfc4f22d00d823840),
    ]),
    Word::new([
        Felt::new_unchecked(0x7fe036297012e736),
        Felt::new_unchecked(0x3b6c20423571b6f9),
        Felt::new_unchecked(0x9df39bfa1dddd86d),
        Felt::new_unchecked(0xd1f22c6f91ffd626),
    ]),
    Word::new([
        Felt::new_unchecked(0xe4ce0c7900d5c400),
        Felt::new_unchecked(0xdb50cd5902dbc524),
        Felt::new_unchecked(0x19c5108d705b5d6e),
        Felt::new_unchecked(0x0a5edbcf5f072095),
    ]),
    Word::new([
        Felt::new_unchecked(0xa8635e8441c074d9),
        Felt::new_unchecked(0x4d4a382fc9e24e90),
        Felt::new_unchecked(0xa3a4f1e2d230e956),
        Felt::new_unchecked(0xea9550e2f96b025c),
    ]),
    Word::new([
        Felt::new_unchecked(0x85186edcf25307d3),
        Felt::new_unchecked(0xdc41a7269053ae80),
        Felt::new_unchecked(0x93af4e65c4adf29e),
        Felt::new_unchecked(0x78ea5f3bd2b45729),
    ]),
    Word::new([
        Felt::new_unchecked(0x26e561b2419831eb),
        Felt::new_unchecked(0x7f135d5f29089733),
        Felt::new_unchecked(0x3850c48388c33f2d),
        Felt::new_unchecked(0x72ac40cb157ae2fc),
    ]),
    Word::new([
        Felt::new_unchecked(0xaf0446459af542b6),
        Felt::new_unchecked(0x8b80ece90ad8d3d9),
        Felt::new_unchecked(0x06dd02781b0fcb5c),
        Felt::new_unchecked(0x241b136a83ec8e36),
    ]),
    Word::new([
        Felt::new_unchecked(0x7360e118d7c4c44b),
        Felt::new_unchecked(0x85e005756a549eaa),
        Felt::new_unchecked(0x94366e7d3ee2ca48),
        Felt::new_unchecked(0x24a184b27fa785c6),
    ]),
    Word::new([
        Felt::new_unchecked(0x9cb5db6f8ba877f4),
        Felt::new_unchecked(0x432d1947a9c888d0),
        Felt::new_unchecked(0x6d27e4d577889f05),
        Felt::new_unchecked(0x25dc7800934ef1ae),
    ]),
    Word::new([
        Felt::new_unchecked(0x79100c8b724fb432),
        Felt::new_unchecked(0xbff994b931dfe75b),
        Felt::new_unchecked(0x27953506d29f90f9),
        Felt::new_unchecked(0x90cc228b50167ce1),
    ]),
    Word::new([
        Felt::new_unchecked(0xf0a48a5fc2e1d9db),
        Felt::new_unchecked(0x5c54aad80cc50dd9),
        Felt::new_unchecked(0x13cad4ffa16a608c),
        Felt::new_unchecked(0x7159e79c02364b4d),
    ]),
    Word::new([
        Felt::new_unchecked(0x2f1fa97d85531c87),
        Felt::new_unchecked(0x5c0ec79fe63e1fb1),
        Felt::new_unchecked(0x767e71a7fe617d25),
        Felt::new_unchecked(0xa460b484a64a72d6),
    ]),
    Word::new([
        Felt::new_unchecked(0xd095e4e7ddbe11d9),
        Felt::new_unchecked(0x453d9ac44b09a471),
        Felt::new_unchecked(0x182494a14d004713),
        Felt::new_unchecked(0xbc44a57e6559a878),
    ]),
    Word::new([
        Felt::new_unchecked(0xaff03a0d76dbf96e),
        Felt::new_unchecked(0x47f6ce8ec92e94d5),
        Felt::new_unchecked(0xf798359c1c4a03af),
        Felt::new_unchecked(0x452903ccd4a9491c),
    ]),
    Word::new([
        Felt::new_unchecked(0x732e5861313fb854),
        Felt::new_unchecked(0x272125f78566ed70),
        Felt::new_unchecked(0xae9292d495ebd45a),
        Felt::new_unchecked(0x86bdeb0a07d26c1d),
    ]),
    Word::new([
        Felt::new_unchecked(0x85204c664906b68a),
        Felt::new_unchecked(0x9ad6a41ac55c8ca6),
        Felt::new_unchecked(0x78ed8975fc245b38),
        Felt::new_unchecked(0x04abc3716c66d8c7),
    ]),
    Word::new([
        Felt::new_unchecked(0x9147153b745abe81),
        Felt::new_unchecked(0x335727d370b2952c),
        Felt::new_unchecked(0xb998783bb0e788d4),
        Felt::new_unchecked(0xd0b2538a8693485c),
    ]),
    Word::new([
        Felt::new_unchecked(0x293bf549fe01832a),
        Felt::new_unchecked(0x3c2fcbf24b3df870),
        Felt::new_unchecked(0xd89e2f0981e50703),
        Felt::new_unchecked(0x923c1c2a5c86b530),
    ]),
    Word::new([
        Felt::new_unchecked(0x420f112e6e401f4c),
        Felt::new_unchecked(0x56253ed049ca9ffc),
        Felt::new_unchecked(0x23de3e2ac1d7c0f0),
        Felt::new_unchecked(0xd915d95eebde33ad),
    ]),
    Word::new([
        Felt::new_unchecked(0x0ce48bc6b7f60997),
        Felt::new_unchecked(0x14c1f28114ed20dc),
        Felt::new_unchecked(0xc9b631257e9360f2),
        Felt::new_unchecked(0x0dbb92b86a787d22),
    ]),
    Word::new([
        Felt::new_unchecked(0xa6090168b2137a1d),
        Felt::new_unchecked(0x1704a3d034139f9a),
        Felt::new_unchecked(0x59e95cc0e9d888e5),
        Felt::new_unchecked(0x9d3399e08765af8d),
    ]),
    Word::new([
        Felt::new_unchecked(0xffdee1cf2986e9f7),
        Felt::new_unchecked(0x5397b903c6b5ebda),
        Felt::new_unchecked(0x1e43c3fcd46bc842),
        Felt::new_unchecked(0x7ce3b02f30ce57fa),
    ]),
    Word::new([
        Felt::new_unchecked(0x47b832abef714aee),
        Felt::new_unchecked(0xfffb987574d18093),
        Felt::new_unchecked(0xe179cd82ceda459d),
        Felt::new_unchecked(0xd8ab8964cbb76761),
    ]),
    Word::new([
        Felt::new_unchecked(0x5f262e1313906e57),
        Felt::new_unchecked(0xead7d293a5ec34f7),
        Felt::new_unchecked(0x71f00b646fe16b05),
        Felt::new_unchecked(0x369383554b95ccff),
    ]),
    Word::new([
        Felt::new_unchecked(0x33afc010464d552c),
        Felt::new_unchecked(0xbb3668a62b613767),
        Felt::new_unchecked(0xe2f75b19d35b5ba5),
        Felt::new_unchecked(0xc12ec8ce30145a34),
    ]),
    Word::new([
        Felt::new_unchecked(0xd9a77ee302a7ef62),
        Felt::new_unchecked(0xd430d0b64b15a046),
        Felt::new_unchecked(0x3c703c28c36b480b),
        Felt::new_unchecked(0xbbf1835b1712cf20),
    ]),
    Word::new([
        Felt::new_unchecked(0x8fd394d77b23871f),
        Felt::new_unchecked(0x6d5f95be96bb7250),
        Felt::new_unchecked(0x2e0fbd527f36cb80),
        Felt::new_unchecked(0xc93f3d342bf426a2),
    ]),
    Word::new([
        Felt::new_unchecked(0x7e5bf5ee62826fa9),
        Felt::new_unchecked(0x20e6c3a52f775fae),
        Felt::new_unchecked(0x4eb2d1abb33e904d),
        Felt::new_unchecked(0x72e1209fa99f708f),
    ]),
    Word::new([
        Felt::new_unchecked(0xd86e6262761401e3),
        Felt::new_unchecked(0x44e2113d07886377),
        Felt::new_unchecked(0x3da5d19b1351a070),
        Felt::new_unchecked(0xfd145bfce40317cf),
    ]),
    Word::new([
        Felt::new_unchecked(0xf1de7bc452f8a5e4),
        Felt::new_unchecked(0xdfe809b30c00a82f),
        Felt::new_unchecked(0x5401374848fa780c),
        Felt::new_unchecked(0xb7772cc983cd0f1c),
    ]),
    Word::new([
        Felt::new_unchecked(0x842bed45416a5375),
        Felt::new_unchecked(0x5178af9038c0d528),
        Felt::new_unchecked(0x00b52dad36b57a36),
        Felt::new_unchecked(0xb182d8bcd3f318aa),
    ]),
    Word::new([
        Felt::new_unchecked(0xdffaab3f6934e1b4),
        Felt::new_unchecked(0xddd03d1890a3b637),
        Felt::new_unchecked(0xc9aa99613dce13af),
        Felt::new_unchecked(0x70a96801d20b9bbf),
    ]),
    Word::new([
        Felt::new_unchecked(0xa1800d8a2337584f),
        Felt::new_unchecked(0x1fd72730d2609dbb),
        Felt::new_unchecked(0x01a2a4b509765b2a),
        Felt::new_unchecked(0x6e99776f568dfe7c),
    ]),
    Word::new([
        Felt::new_unchecked(0x05ad4de4955a46eb),
        Felt::new_unchecked(0xdbdd6949031e33c7),
        Felt::new_unchecked(0x8a7df981d720ff61),
        Felt::new_unchecked(0x447325552a7235e7),
    ]),
    Word::new([
        Felt::new_unchecked(0x5322892e1842df01),
        Felt::new_unchecked(0x3841a93cfac9660e),
        Felt::new_unchecked(0x5e26b5de4a4e3d37),
        Felt::new_unchecked(0x388836b50d100120),
    ]),
    Word::new([
        Felt::new_unchecked(0xcce89e91d179eaec),
        Felt::new_unchecked(0xe68ce121dcab4d44),
        Felt::new_unchecked(0x0d56cbe0ace2d4ec),
        Felt::new_unchecked(0x2329986c74293ce5),
    ]),
    Word::new([
        Felt::new_unchecked(0x12358aee10ffa5fc),
        Felt::new_unchecked(0xbe7a6293921468e6),
        Felt::new_unchecked(0xe15970cc955d864b),
        Felt::new_unchecked(0xbf37f6ae3e331aab),
    ]),
    Word::new([
        Felt::new_unchecked(0xb5f111968b241e6e),
        Felt::new_unchecked(0x7cc928c1c338b4ad),
        Felt::new_unchecked(0x26dde0cdcb31d42c),
        Felt::new_unchecked(0xd0c319d0f0aa9512),
    ]),
    Word::new([
        Felt::new_unchecked(0x87077ff16b8f3d8e),
        Felt::new_unchecked(0x4e6be6654ec08848),
        Felt::new_unchecked(0x71a9d5e1e3ab9085),
        Felt::new_unchecked(0xf6bd087b7508d595),
    ]),
    Word::new([
        Felt::new_unchecked(0x53dc74b301a7036e),
        Felt::new_unchecked(0x4a431b1485944c51),
        Felt::new_unchecked(0x50b33f4d61724832),
        Felt::new_unchecked(0xda5f40612948fb0b),
    ]),
    Word::new([
        Felt::new_unchecked(0x95c6101469bf6744),
        Felt::new_unchecked(0x1a9980d26ef6569f),
        Felt::new_unchecked(0x4613db415a103854),
        Felt::new_unchecked(0x4107edef06f4b2e2),
    ]),
    Word::new([
        Felt::new_unchecked(0xdd4af77853f150b5),
        Felt::new_unchecked(0x08eecf1e24bdeb59),
        Felt::new_unchecked(0x32aef82f2bffd372),
        Felt::new_unchecked(0x9b05edc6cca613c6),
    ]),
    Word::new([
        Felt::new_unchecked(0xc9925f2d3619d2f4),
        Felt::new_unchecked(0x4facfbe75c1407ff),
        Felt::new_unchecked(0x9862025a201309e9),
        Felt::new_unchecked(0x71c2179aa2551d12),
    ]),
    Word::new([
        Felt::new_unchecked(0xa0e3480ba8ac4ccb),
        Felt::new_unchecked(0x2dad4a92bf7c2476),
        Felt::new_unchecked(0xbb5c9dbd61176a1a),
        Felt::new_unchecked(0xabfd55e2a7e15949),
    ]),
    Word::new([
        Felt::new_unchecked(0x4553b43fba664b10),
        Felt::new_unchecked(0xbdbd5f8d304338ad),
        Felt::new_unchecked(0xa877020ae3ba30dd),
        Felt::new_unchecked(0x7705853732414d3e),
    ]),
    Word::new([
        Felt::new_unchecked(0x1af7a763a925fb31),
        Felt::new_unchecked(0xabd019c3cd9cef0a),
        Felt::new_unchecked(0x9798360eb35e9915),
        Felt::new_unchecked(0xfa854bee8e192cc6),
    ]),
    Word::new([
        Felt::new_unchecked(0x1c0219a536aa2654),
        Felt::new_unchecked(0xab431a3352c51fff),
        Felt::new_unchecked(0x64c431d78d5e7bf4),
        Felt::new_unchecked(0xafb35aa8b2696229),
    ]),
    Word::new([
        Felt::new_unchecked(0x947321f3ed487702),
        Felt::new_unchecked(0xf7887258489ec613),
        Felt::new_unchecked(0xbcfef077528b8ee1),
        Felt::new_unchecked(0xa2d7cf3ec671bd26),
    ]),
    Word::new([
        Felt::new_unchecked(0xb71476ee7dfbf7be),
        Felt::new_unchecked(0x159c699add5d8b81),
        Felt::new_unchecked(0x3aa0817318acd24f),
        Felt::new_unchecked(0x0002ba5068fbf7b7),
    ]),
    Word::new([
        Felt::new_unchecked(0xd687e4208f4c1da8),
        Felt::new_unchecked(0x616d2ae62f438ddb),
        Felt::new_unchecked(0x19afddf13d62ab5a),
        Felt::new_unchecked(0xedb19ff512b83f28),
    ]),
    Word::new([
        Felt::new_unchecked(0x7b016fcc9c1e70ba),
        Felt::new_unchecked(0x2c7b452f73a3bffc),
        Felt::new_unchecked(0xec5a0392306813d7),
        Felt::new_unchecked(0xae99a69220be5139),
    ]),
    Word::new([
        Felt::new_unchecked(0x0b197925db766537),
        Felt::new_unchecked(0xfe666f05cdcf50e0),
        Felt::new_unchecked(0xec34f13b232d627e),
        Felt::new_unchecked(0xf41f55a319b54d35),
    ]),
    Word::new([
        Felt::new_unchecked(0x0e73225571eb96e2),
        Felt::new_unchecked(0x8df169b862333236),
        Felt::new_unchecked(0x3f66b218ba56d6a7),
        Felt::new_unchecked(0x21b48323f2629c74),
    ]),
    Word::new([
        Felt::new_unchecked(0x2dab8971e1f636ea),
        Felt::new_unchecked(0xf1a61cb7873dd513),
        Felt::new_unchecked(0x24ce44bee61d79b4),
        Felt::new_unchecked(0xe85ec3af93cfd356),
    ]),
    Word::new([
        Felt::new_unchecked(0x372b613b73452a2d),
        Felt::new_unchecked(0x2326929e7c83670c),
        Felt::new_unchecked(0x24a6024d88efd716),
        Felt::new_unchecked(0x9ada032226ee8f41),
    ]),
    Word::new([
        Felt::new_unchecked(0x70e5fa8e228fe225),
        Felt::new_unchecked(0x3fb83ff7de835a4c),
        Felt::new_unchecked(0xba460412906dd260),
        Felt::new_unchecked(0xb9af693a54538497),
    ]),
    Word::new([
        Felt::new_unchecked(0x8b4c559f5a1d954d),
        Felt::new_unchecked(0x609f0803e2108430),
        Felt::new_unchecked(0xc2bc9c612459417a),
        Felt::new_unchecked(0x20c0c2fb3c4d3adc),
    ]),
    Word::new([
        Felt::new_unchecked(0x4480f11ea7c0eff0),
        Felt::new_unchecked(0xfb5f2a5816b0b191),
        Felt::new_unchecked(0x741a8e48d77b5c1f),
        Felt::new_unchecked(0xee4de2c193b44fbc),
    ]),
    Word::new([
        Felt::new_unchecked(0x77fc4d4d2f5c78bd),
        Felt::new_unchecked(0xb73c33d13ae1a81f),
        Felt::new_unchecked(0xb77676f6190217ad),
        Felt::new_unchecked(0x4a6e3dce800ea807),
    ]),
    Word::new([
        Felt::new_unchecked(0x4d0c2f131ed8fdcb),
        Felt::new_unchecked(0xa93c45c839d9d744),
        Felt::new_unchecked(0x02099f58db023eb2),
        Felt::new_unchecked(0x51f830a886d83c68),
    ]),
    Word::new([
        Felt::new_unchecked(0x49969ad712828350),
        Felt::new_unchecked(0x43fbaea306d8503a),
        Felt::new_unchecked(0xb29e4a5c3b708c23),
        Felt::new_unchecked(0x996982a21d90c3a8),
    ]),
    Word::new([
        Felt::new_unchecked(0x459ee8bb2709673f),
        Felt::new_unchecked(0xa65a9f6a0774863d),
        Felt::new_unchecked(0x35069377f2cd8aa6),
        Felt::new_unchecked(0xdade69a1b1f0ed54),
    ]),
    Word::new([
        Felt::new_unchecked(0xba6232a69b2193e8),
        Felt::new_unchecked(0xacb491cbe92045f3),
        Felt::new_unchecked(0xb62f47a82bddccb0),
        Felt::new_unchecked(0xf7eb0e2318aa52ef),
    ]),
    Word::new([
        Felt::new_unchecked(0x8816f48f1e32ea78),
        Felt::new_unchecked(0xf8be81a5ff3885fd),
        Felt::new_unchecked(0x78c2ebe575085888),
        Felt::new_unchecked(0xf40367a41cc0f59f),
    ]),
    Word::new([
        Felt::new_unchecked(0xfb488e200bf9ca63),
        Felt::new_unchecked(0x8f8f4d7278d0e78c),
        Felt::new_unchecked(0x09b208e717282c66),
        Felt::new_unchecked(0xc876de43c913a66c),
    ]),
    Word::new([
        Felt::new_unchecked(0x877130417c2e5f36),
        Felt::new_unchecked(0xd50485c08bd277e7),
        Felt::new_unchecked(0xd0945268a2883728),
        Felt::new_unchecked(0x718d24bc8c73f8f7),
    ]),
    Word::new([
        Felt::new_unchecked(0x2505d387c8fdb218),
        Felt::new_unchecked(0x92233caaab007401),
        Felt::new_unchecked(0x11e6575e5cc339ed),
        Felt::new_unchecked(0xf43bcccacfb04389),
    ]),
    Word::new([
        Felt::new_unchecked(0x3e60e99a73b1614d),
        Felt::new_unchecked(0xd964d5b908f4d69c),
        Felt::new_unchecked(0x435ce6a2a2a1b505),
        Felt::new_unchecked(0x5e99c0a0a9499af4),
    ]),
    Word::new([
        Felt::new_unchecked(0x2f6395587ab70784),
        Felt::new_unchecked(0xcc979c15c9b0f084),
        Felt::new_unchecked(0x51af7bedd42eea2d),
        Felt::new_unchecked(0x36a4868b22b43bc3),
    ]),
    Word::new([
        Felt::new_unchecked(0x6a86ad5c47406d72),
        Felt::new_unchecked(0xbb2ed4c37164785a),
        Felt::new_unchecked(0x2381850a1cac59bd),
        Felt::new_unchecked(0x080ccb801113a2ac),
    ]),
    Word::new([
        Felt::new_unchecked(0x2d18d649a43a5732),
        Felt::new_unchecked(0xd110805fc5adda4b),
        Felt::new_unchecked(0xae9472d633a0a594),
        Felt::new_unchecked(0xa2eea0294cd6000c),
    ]),
    Word::new([
        Felt::new_unchecked(0x8d19318f37b7ada1),
        Felt::new_unchecked(0xd6086bb2699993a2),
        Felt::new_unchecked(0xc9f0ea948bd6fb17),
        Felt::new_unchecked(0x6a4b12267d002adb),
    ]),
    Word::new([
        Felt::new_unchecked(0x58e4e9ced3ba344f),
        Felt::new_unchecked(0x4b764faa2ffb83d5),
        Felt::new_unchecked(0xadd9ea03fd82865e),
        Felt::new_unchecked(0x36a7d0fd5ce7128b),
    ]),
    Word::new([
        Felt::new_unchecked(0xb9e425390904a962),
        Felt::new_unchecked(0x6248e00cf596f6ad),
        Felt::new_unchecked(0x5bf008948a2a3a8c),
        Felt::new_unchecked(0xd0a2993b00962d0d),
    ]),
    Word::new([
        Felt::new_unchecked(0x85eeb4a3202d1865),
        Felt::new_unchecked(0xd16cf9ef8b96ef19),
        Felt::new_unchecked(0x24bda888285c7727),
        Felt::new_unchecked(0x4f3196ef8aa475cf),
    ]),
    Word::new([
        Felt::new_unchecked(0x2e3905a28ab152c3),
        Felt::new_unchecked(0x3d65c64fc03e1154),
        Felt::new_unchecked(0x463924157589e96a),
        Felt::new_unchecked(0xc35e18d4a80c7857),
    ]),
    Word::new([
        Felt::new_unchecked(0x0e0dd8d6d834bfb0),
        Felt::new_unchecked(0x258cea707ab121ae),
        Felt::new_unchecked(0x8a3fe0de0f960a8a),
        Felt::new_unchecked(0x5effb1253cd26baf),
    ]),
    Word::new([
        Felt::new_unchecked(0xb8ed0f83a58af02d),
        Felt::new_unchecked(0x57ada4648830369e),
        Felt::new_unchecked(0x2705908277842e7d),
        Felt::new_unchecked(0x2de8c38841905254),
    ]),
    Word::new([
        Felt::new_unchecked(0x01024b6c34916d38),
        Felt::new_unchecked(0xc5d13622ac399a0f),
        Felt::new_unchecked(0x1f7ec2453e58755d),
        Felt::new_unchecked(0x914696bdc2f6337b),
    ]),
    Word::new([
        Felt::new_unchecked(0x302bc4cbe410549f),
        Felt::new_unchecked(0x0687682a5bfb498b),
        Felt::new_unchecked(0x17f9642a6e1db393),
        Felt::new_unchecked(0x7e121da3e183cbbf),
    ]),
    Word::new([
        Felt::new_unchecked(0x301a5478e91a76ae),
        Felt::new_unchecked(0x4de2b12e5e088b92),
        Felt::new_unchecked(0x51273b62ecd5a68f),
        Felt::new_unchecked(0x40279ae1e9935d83),
    ]),
    Word::new([
        Felt::new_unchecked(0x481559529cca1ff6),
        Felt::new_unchecked(0x8996fd99e0263131),
        Felt::new_unchecked(0xb51d6c798e0a9618),
        Felt::new_unchecked(0x02f201e4b0d84be5),
    ]),
    Word::new([
        Felt::new_unchecked(0x261df526ace9314b),
        Felt::new_unchecked(0x49a2b33ae0558f78),
        Felt::new_unchecked(0x3e937ac29f1cb809),
        Felt::new_unchecked(0xd4e69b8d954d1b83),
    ]),
    Word::new([
        Felt::new_unchecked(0x087aa9955e4d4a36),
        Felt::new_unchecked(0x838e53729e90910b),
        Felt::new_unchecked(0x779677482e323c3e),
        Felt::new_unchecked(0xce7bdd3aa6fdc27c),
    ]),
    Word::new([
        Felt::new_unchecked(0x0ad2740bdeede05c),
        Felt::new_unchecked(0x4ddeb7bcb67cc62e),
        Felt::new_unchecked(0x60ed83e6dac9a793),
        Felt::new_unchecked(0xd80bb6bf2da311b4),
    ]),
    Word::new([
        Felt::new_unchecked(0xc04a9481f0b29e1e),
        Felt::new_unchecked(0x9a481b8ed93d1b77),
        Felt::new_unchecked(0xd7e49f5922c9ead3),
        Felt::new_unchecked(0x6953a58c463a59d0),
    ]),
    Word::new([
        Felt::new_unchecked(0x67ee9f3c62f968c4),
        Felt::new_unchecked(0xf00c80b729593732),
        Felt::new_unchecked(0x7fe66eb7c570a24f),
        Felt::new_unchecked(0x7ea3069a9803d86c),
    ]),
    Word::new([
        Felt::new_unchecked(0x428450f886f972d0),
        Felt::new_unchecked(0x4328af23a159c7a3),
        Felt::new_unchecked(0x63071f75da7753cc),
        Felt::new_unchecked(0x950419829efc0e10),
    ]),
    Word::new([
        Felt::new_unchecked(0x1ba95e067e6c0008),
        Felt::new_unchecked(0x4a77f23e46b4cddf),
        Felt::new_unchecked(0xeb0e31fee924bfb5),
        Felt::new_unchecked(0x0c85ab57bd415e0a),
    ]),
    Word::new([
        Felt::new_unchecked(0xcffc94c55d0d6e56),
        Felt::new_unchecked(0xe9d3712ac7b68613),
        Felt::new_unchecked(0x62480bf5b986f2e3),
        Felt::new_unchecked(0x3bcc8d7b5eae8efb),
    ]),
    Word::new([
        Felt::new_unchecked(0x775920b95e7970b7),
        Felt::new_unchecked(0xf9332431a4cc3253),
        Felt::new_unchecked(0xbba433c4d80ec75c),
        Felt::new_unchecked(0x3fb3215e800c349d),
    ]),
    Word::new([
        Felt::new_unchecked(0xa184a7960e40c822),
        Felt::new_unchecked(0xe03a49f308042948),
        Felt::new_unchecked(0x1749bfbf216b538b),
        Felt::new_unchecked(0x26fad80a8da486b1),
    ]),
    Word::new([
        Felt::new_unchecked(0xbd938e79c6cd6c29),
        Felt::new_unchecked(0x2156b7c66b5c09cb),
        Felt::new_unchecked(0x73b98936bf8bacd3),
        Felt::new_unchecked(0x8ec375b7b5325a23),
    ]),
    Word::new([
        Felt::new_unchecked(0x19a33afa6ed1163f),
        Felt::new_unchecked(0x0e814e995a9e1eab),
        Felt::new_unchecked(0x43224eebc470703f),
        Felt::new_unchecked(0xdc75121ef0b93a68),
    ]),
    Word::new([
        Felt::new_unchecked(0xdbdb8aa056a94d1f),
        Felt::new_unchecked(0x2f56fa5a63f2908f),
        Felt::new_unchecked(0x85867da0a35026c3),
        Felt::new_unchecked(0xb38df4dd02aa42d6),
    ]),
    Word::new([
        Felt::new_unchecked(0x3150518851b78b42),
        Felt::new_unchecked(0x8fdf76effe34149f),
        Felt::new_unchecked(0x4b15085fd8ffda6d),
        Felt::new_unchecked(0x351a1eb1cca3bc29),
    ]),
    Word::new([
        Felt::new_unchecked(0xf61249b1f1bfe39c),
        Felt::new_unchecked(0xcc8677045409f1ce),
        Felt::new_unchecked(0x5f9c5495d5d927c4),
        Felt::new_unchecked(0x0e5a2880b78e5dad),
    ]),
    Word::new([
        Felt::new_unchecked(0x83dbe82a80826195),
        Felt::new_unchecked(0xc34b1ff758f368ab),
        Felt::new_unchecked(0x32be0ec28cd358d4),
        Felt::new_unchecked(0x2c17f4ce7b7d2c5f),
    ]),
    Word::new([
        Felt::new_unchecked(0xe795cf57d11db27f),
        Felt::new_unchecked(0x2cb18688e05bee75),
        Felt::new_unchecked(0x9053996e66be08c7),
        Felt::new_unchecked(0x5c4a7af36aeda2a6),
    ]),
    Word::new([
        Felt::new_unchecked(0xd104cc98855f0782),
        Felt::new_unchecked(0xf132ef3e1c524ce4),
        Felt::new_unchecked(0x864ae826c01eafd4),
        Felt::new_unchecked(0x7bf085d210e943b8),
    ]),
    Word::new([
        Felt::new_unchecked(0x2547ce4b049c50c4),
        Felt::new_unchecked(0xcee6d1972a3673b5),
        Felt::new_unchecked(0x90783afc4609b5ec),
        Felt::new_unchecked(0x89edcabb4405e9eb),
    ]),
    Word::new([
        Felt::new_unchecked(0xc71c12484b9a29e8),
        Felt::new_unchecked(0x52ba25685e80757d),
        Felt::new_unchecked(0x7aec2a9d6afc3abb),
        Felt::new_unchecked(0x9369baf4a41c91ff),
    ]),
    Word::new([
        Felt::new_unchecked(0xb8df5b247fd4dba9),
        Felt::new_unchecked(0xe5b3b8b8280421db),
        Felt::new_unchecked(0xde35f32fe39ae8f6),
        Felt::new_unchecked(0x3a52c20200b3e702),
    ]),
    Word::new([
        Felt::new_unchecked(0xcd84755676b282a1),
        Felt::new_unchecked(0x6be2b9eeceefdcf5),
        Felt::new_unchecked(0x6330de9426d1ffc0),
        Felt::new_unchecked(0x669dee285bf50868),
    ]),
    Word::new([
        Felt::new_unchecked(0x6b762dd088805b01),
        Felt::new_unchecked(0x69f8c41ca96e2d10),
        Felt::new_unchecked(0x65facc7fe98db521),
        Felt::new_unchecked(0x8e520142fc2b93cd),
    ]),
    Word::new([
        Felt::new_unchecked(0x3a9e36c9855dae83),
        Felt::new_unchecked(0xb7d8df3d2fdfc3cd),
        Felt::new_unchecked(0x36f699d93e940b30),
        Felt::new_unchecked(0xbcad4890a9a4f9e2),
    ]),
    Word::new([
        Felt::new_unchecked(0xaa97020f9a848d8f),
        Felt::new_unchecked(0xd19e3d9a74691527),
        Felt::new_unchecked(0xb6031c44189c6601),
        Felt::new_unchecked(0xb55918234e061ee0),
    ]),
    Word::new([
        Felt::new_unchecked(0x675dd7d25620bde1),
        Felt::new_unchecked(0xf1315af5fa0fdc97),
        Felt::new_unchecked(0xec342842c30d7f44),
        Felt::new_unchecked(0x09907b3a3d77cbb9),
    ]),
    Word::new([
        Felt::new_unchecked(0x1201c4524996115f),
        Felt::new_unchecked(0x298b7361e465e677),
        Felt::new_unchecked(0xb5606ebdc0b21687),
        Felt::new_unchecked(0xf76a4fb8c47d213d),
    ]),
    Word::new([
        Felt::new_unchecked(0xb9d89de99096f8ab),
        Felt::new_unchecked(0x3ffeec3e3a0c7d26),
        Felt::new_unchecked(0x05883a69fee8236c),
        Felt::new_unchecked(0x2d9034ca2df17a19),
    ]),
    Word::new([
        Felt::new_unchecked(0xdaf329acf17f9313),
        Felt::new_unchecked(0x4c71884a628539e4),
        Felt::new_unchecked(0x882aca9fdb79254f),
        Felt::new_unchecked(0x6ddd1c729017bf62),
    ]),
    Word::new([
        Felt::new_unchecked(0xb871e32185a9f3e9),
        Felt::new_unchecked(0x27504edc7ae3fd79),
        Felt::new_unchecked(0xf7b9c0133737c08c),
        Felt::new_unchecked(0xfc50ceef9c615643),
    ]),
    Word::new([
        Felt::new_unchecked(0x8d530c37efa3e5b4),
        Felt::new_unchecked(0x37f32d830f306f6b),
        Felt::new_unchecked(0x9601886ad8115670),
        Felt::new_unchecked(0x7d80f7f8d5c63a62),
    ]),
    Word::new([
        Felt::new_unchecked(0x993bdf8dfa6a1edc),
        Felt::new_unchecked(0x2ea3c247340dba0e),
        Felt::new_unchecked(0x7c2e1f1fc79e2f21),
        Felt::new_unchecked(0x8f42990e74d5d817),
    ]),
    Word::new([
        Felt::new_unchecked(0xbf7073e84f3cddea),
        Felt::new_unchecked(0x60f7c5ee9b3d932e),
        Felt::new_unchecked(0x31d73e322198371f),
        Felt::new_unchecked(0x8d5346bb34751ac8),
    ]),
    Word::new([
        Felt::new_unchecked(0xfbc3edafb6c813b9),
        Felt::new_unchecked(0x35d8cfadb189f5af),
        Felt::new_unchecked(0x9cc65f5d198e28f1),
        Felt::new_unchecked(0x14a74616a8e04623),
    ]),
    Word::new([
        Felt::new_unchecked(0xe0c4c734868c11c6),
        Felt::new_unchecked(0xee1f9ed1da448050),
        Felt::new_unchecked(0x19fd124dd8f24870),
        Felt::new_unchecked(0xcdd77f41d7deff73),
    ]),
    Word::new([
        Felt::new_unchecked(0x5b31a8b9799ff836),
        Felt::new_unchecked(0xe385174fe60f4b08),
        Felt::new_unchecked(0xe82c6be88d50767c),
        Felt::new_unchecked(0x2778f3b6a18981e2),
    ]),
    Word::new([
        Felt::new_unchecked(0x0000000000000000),
        Felt::new_unchecked(0x0000000000000000),
        Felt::new_unchecked(0x0000000000000000),
        Felt::new_unchecked(0x0000000000000000),
    ]),
];

// TESTS
// ================================================================================================

#[cfg(test)]
mod tests {
    use super::{
        super::{EMPTY_WORD, Poseidon2},
        EMPTY_SUBTREES, EmptySubtreeRoots,
    };

    #[test]
    fn all_depths_opens_to_zero() {
        // assert the length of the static constants is correct and will cover every possible depth
        assert!(EMPTY_SUBTREES.len() > u8::MAX as usize);

        for depth in 0..=u8::MAX {
            // fetch the subtrees and reverse it so the path is leaf -> root
            let mut subtree = EmptySubtreeRoots::empty_hashes(depth).to_vec();
            subtree.reverse();

            // the length of the subtrees set must be equal to depth + 1 as we also
            // include the root
            assert_eq!(depth as usize + 1, subtree.len());

            // assert the opening is zero
            let initial = EMPTY_WORD;
            assert_eq!(initial, subtree.remove(0));

            // compute every node of the path manually and compare with the output
            subtree
                .into_iter()
                .scan(initial, |state, x| {
                    *state = Poseidon2::merge(&[*state; 2]);
                    Some((x, *state))
                })
                .for_each(|(x, computed)| assert_eq!(x, computed));
        }
    }

    #[test]
    fn test_entry() {
        // check the leaf is always the empty work
        for depth in 0..255 {
            assert_eq!(EmptySubtreeRoots::entry(depth, depth), &EMPTY_WORD);
        }

        // check the root matches the first element of empty_hashes
        for depth in 0..255 {
            assert_eq!(
                EmptySubtreeRoots::entry(depth, 0),
                &EmptySubtreeRoots::empty_hashes(depth)[0]
            );
        }
    }
}
