diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 7ffae83..74bea5f 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -76,6 +76,23 @@ jobs: popd done + build_no_alloc: + name: build without alloc + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + - run: rustup target add thumbv8m.main-none-eabi + - uses: Swatinem/rust-cache@v1 + - uses: actions-rs/cargo@v1 + with: + command: build + args: --package poseidon377 --target thumbv8m.main-none-eabi --no-default-features + # clippy: # name: Clippy # runs-on: ubuntu-latest diff --git a/Cargo.toml b/Cargo.toml index 27b8e67..d3a0085 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,10 +2,11 @@ members = [ "poseidon377", - "poseidon-paramgen", + # "poseidon-paramgen" # Temporarily excluded until refactored "poseidon-permutation", - "poseidon-consistency", + # "poseidon-consistency", # Temporarily excluded until paramgen is refactored "poseidon-parameters", + "poseidon-tests", ] [profile.release] diff --git a/README.md b/README.md index 3632c82..6e6dc7d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ This repository contains: parameters * [`poseidon-permutation`](../main/poseidon-permutation): an independent implementation of the Poseidon permutation * [`poseidon-consistency`](../main/poseidon-consistency): property-based tests for consistency between Poseidon implementations +* [`poseidon-tests`](../main/poseidon-tests): test vectors for `poseidon-parameters` and `poseidon377` ## Audits diff --git a/poseidon-consistency/Cargo.toml b/poseidon-consistency/Cargo.toml index 8b4b70f..0e74074 100644 --- a/poseidon-consistency/Cargo.toml +++ b/poseidon-consistency/Cargo.toml @@ -8,10 +8,10 @@ license = "MIT OR Apache-2.0" repository = "https://github.com/penumbra-zone/poseidon377" [dependencies] -poseidon-parameters = { path = "../poseidon-parameters" } -poseidon-paramgen = { path = "../poseidon-paramgen", default-features = false } +poseidon-parameters = { path = "../poseidon-parameters", default-features = false } +#poseidon-paramgen = { path = "../poseidon-paramgen", default-features = false } poseidon-permutation = { path="../poseidon-permutation", default-features = false } -decaf377 = { version = "0.4", default-features = false } +decaf377 = { version="0.9", default-features = false } [dev-dependencies] criterion = { version = "0.4", features=["html_reports"] } @@ -19,7 +19,7 @@ ark-ff = "0.4" ark-ed-on-bls12-377 = "0.4" num-bigint = "0.4" proptest = "1" -rand_core = { version = "0.6.3", features = ["getrandom"] } +rand_core = { version = "0.6.3", default-features=false } rand_chacha = "0.3" once_cell = "1.8" diff --git a/poseidon-parameters/CHANGELOG.md b/poseidon-parameters/CHANGELOG.md index d62292c..be30ae8 100644 --- a/poseidon-parameters/CHANGELOG.md +++ b/poseidon-parameters/CHANGELOG.md @@ -8,4 +8,8 @@ # 0.4.0 -* Add `v1` and `v2` APIs. \ No newline at end of file +* Add `v1` and `v2` APIs. + +# 1.0.0 + +* Remove Arkworks requirement \ No newline at end of file diff --git a/poseidon-parameters/Cargo.toml b/poseidon-parameters/Cargo.toml index 4e75f2a..5039c78 100644 --- a/poseidon-parameters/Cargo.toml +++ b/poseidon-parameters/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "poseidon-parameters" -version = "0.4.0" +version = "1.0.0" edition = "2018" authors = [] description = "A crate for Poseidon parameters" @@ -9,17 +9,13 @@ keywords = ["no_std"] repository = "https://github.com/penumbra-zone/poseidon377" [dependencies] -anyhow = { version = "1", default-features = false } -ark-ff = { version = "^0.4.0", default-features = false } -num-integer = { version = "0.1.45", default-features = false } - -[dev-dependencies] -ark-ed-on-bls12-377 = "0.4" -proptest = "1" +decaf377 = { version="0.9", default-features = false } [features] +default = ["std"] +alloc = [ + "decaf377/alloc" +] std = [ - "anyhow/std", - "ark-ff/std", - "num-integer/std", + "decaf377/std", ] diff --git a/poseidon-parameters/src/arc_matrix.rs b/poseidon-parameters/src/arc_matrix.rs index 45e8952..81b8466 100644 --- a/poseidon-parameters/src/arc_matrix.rs +++ b/poseidon-parameters/src/arc_matrix.rs @@ -1,36 +1,51 @@ -use anyhow::Result; -use ark_ff::{vec::Vec, PrimeField}; - -use crate::{matrix::Matrix, matrix_ops::MatrixOperations}; +use crate::{error::PoseidonParameterError, matrix::Matrix, matrix_ops::MatrixOperations}; +use decaf377::Fq; /// Represents an matrix of round constants. /// /// Arc stands for `AddRoundConstant` which is the /// step in the permutation where this matrix is used. #[derive(Clone, Debug, PartialEq, Eq)] -pub struct ArcMatrix(pub Matrix); +pub struct ArcMatrix( + pub Matrix, +); + +impl + ArcMatrix +{ + pub fn transpose(&self) -> ArcMatrix { + ArcMatrix(self.0.transpose()) + } -impl MatrixOperations for ArcMatrix { - fn new(n_rows: usize, n_cols: usize, elements: Vec) -> Self { - Self(Matrix::new(n_rows, n_cols, elements)) + pub fn inner_elements(&self) -> [Fq; N_ELEMENTS] { + self.0.elements } - fn elements(&self) -> &Vec { + /// Create a new matrix from a slice of elements. + pub const fn new_from_known(elements: [Fq; N_ELEMENTS]) -> Self { + Self(Matrix::new_from_known(elements)) + } +} + +impl MatrixOperations + for ArcMatrix +{ + fn new(elements: &[Fq]) -> Self { + Self(Matrix::new(elements)) + } + + fn elements(&self) -> &[Fq] { self.0.elements() } - fn get_element(&self, i: usize, j: usize) -> F { + fn get_element(&self, i: usize, j: usize) -> Fq { self.0.get_element(i, j) } - fn set_element(&mut self, i: usize, j: usize, val: F) { + fn set_element(&mut self, i: usize, j: usize, val: Fq) { self.0.set_element(i, j, val) } - fn rows(&self) -> Vec<&[F]> { - self.0.rows() - } - fn n_rows(&self) -> usize { self.0.n_rows() } @@ -39,11 +54,7 @@ impl MatrixOperations for ArcMatrix { self.0.n_cols() } - fn transpose(&self) -> Self { - Self(self.0.transpose()) - } - - fn hadamard_product(&self, rhs: &Self) -> Result + fn hadamard_product(&self, rhs: &Self) -> Result where Self: Sized, { @@ -51,22 +62,6 @@ impl MatrixOperations for ArcMatrix { } } -impl From> for Vec> { - fn from(arc: ArcMatrix) -> Self { - let mut rows = Vec::>::new(); - let m = &arc.0; - - for i in 0..arc.n_rows() { - let mut row = Vec::new(); - for j in 0..arc.n_cols() { - row.push(m.get_element(i, j)); - } - rows.push(row); - } - rows - } -} - /// Represents an optimized matrix of round constants. /// /// This modifies the partial rounds in the middle of the permutation, @@ -76,30 +71,43 @@ impl From> for Vec> { /// This method follows `calc_equivalent_constants` from Appendix B's /// `poseidonperm_x3_64_24_optimized.sage`. #[derive(Clone, Debug, PartialEq, Eq)] -pub struct OptimizedArcMatrix(pub ArcMatrix); +pub struct OptimizedArcMatrix( + pub ArcMatrix, +); + +impl + OptimizedArcMatrix +{ + pub fn transpose(&self) -> OptimizedArcMatrix { + OptimizedArcMatrix(self.0.transpose()) + } + + /// Create a new matrix from a slice of elements. + pub const fn new_from_known(elements: [Fq; N_ELEMENTS]) -> Self { + Self(ArcMatrix::new_from_known(elements)) + } +} -impl MatrixOperations for OptimizedArcMatrix { +impl MatrixOperations + for OptimizedArcMatrix +{ /// Create a `OptimizedArcMatrix` from its elements. - fn new(n_rows: usize, n_cols: usize, elements: Vec) -> Self { - Self(ArcMatrix::new(n_rows, n_cols, elements)) + fn new(elements: &[Fq]) -> Self { + Self(ArcMatrix::new(elements)) } - fn elements(&self) -> &Vec { + fn elements(&self) -> &[Fq] { self.0.elements() } - fn get_element(&self, i: usize, j: usize) -> F { + fn get_element(&self, i: usize, j: usize) -> Fq { self.0.get_element(i, j) } - fn set_element(&mut self, i: usize, j: usize, val: F) { + fn set_element(&mut self, i: usize, j: usize, val: Fq) { self.0.set_element(i, j, val) } - fn rows(&self) -> Vec<&[F]> { - self.0.rows() - } - fn n_rows(&self) -> usize { self.0.n_rows() } @@ -108,11 +116,7 @@ impl MatrixOperations for OptimizedArcMatrix { self.0.n_cols() } - fn transpose(&self) -> Self { - Self(self.0.transpose()) - } - - fn hadamard_product(&self, rhs: &Self) -> Result + fn hadamard_product(&self, rhs: &Self) -> Result where Self: Sized, { diff --git a/poseidon-parameters/src/error.rs b/poseidon-parameters/src/error.rs new file mode 100644 index 0000000..7688b94 --- /dev/null +++ b/poseidon-parameters/src/error.rs @@ -0,0 +1,16 @@ +#[derive(Debug)] +pub enum PoseidonParameterError { + InvalidMatrixDimensions, + NoMatrixInverse, +} + +impl core::fmt::Display for PoseidonParameterError { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let msg = match self { + Self::InvalidMatrixDimensions => "Invalid matrix dimensions", + Self::NoMatrixInverse => "No matrix inverse", + }; + + msg.fmt(f) + } +} diff --git a/poseidon-parameters/src/lib.rs b/poseidon-parameters/src/lib.rs index b91ba84..aed3da7 100644 --- a/poseidon-parameters/src/lib.rs +++ b/poseidon-parameters/src/lib.rs @@ -7,14 +7,12 @@ mod alpha; mod arc_matrix; +mod error; mod matrix; mod matrix_ops; mod mds_matrix; mod round_numbers; -#[cfg(test)] -mod tests; - /// Structures related to Poseidon version 1 parameters. pub mod v1; diff --git a/poseidon-parameters/src/matrix.rs b/poseidon-parameters/src/matrix.rs index c7e2d04..45a0517 100644 --- a/poseidon-parameters/src/matrix.rs +++ b/poseidon-parameters/src/matrix.rs @@ -1,151 +1,201 @@ +use core::convert::TryInto; use core::ops::Mul; -use anyhow::{anyhow, Result}; -use ark_ff::{vec, vec::Vec, PrimeField}; -use num_integer::Roots; - -use crate::matrix_ops::{mat_mul, MatrixOperations, SquareMatrixOperations}; +use crate::error::PoseidonParameterError; +use crate::matrix_ops::{dot_product, MatrixOperations, SquareMatrixOperations}; +use decaf377::Fq; /// Represents a matrix over `PrimeField` elements. /// /// This matrix can be used to represent row or column /// vectors. #[derive(Clone, Debug, PartialEq, Eq)] -pub struct Matrix { - /// Elements of the matrix. - pub elements: Vec, - /// Number of columns. - pub n_cols: usize, - /// Number of rows. - pub n_rows: usize, +pub struct Matrix { + /// Elements of the matrix, stored in a fixed-size array. + /// + pub elements: [Fq; N_ELEMENTS], } -impl MatrixOperations for Matrix { - fn new(n_rows: usize, n_cols: usize, elements: Vec) -> Self { - if elements.len() != n_rows * n_cols { - panic!("Matrix has an insufficient number of elements") +impl + Matrix +{ + pub fn transpose(&self) -> Matrix { + let mut transposed_elements = [Fq::default(); N_ELEMENTS]; + + let mut index = 0; + for j in 0..self.n_cols() { + for i in 0..self.n_rows() { + transposed_elements[index] = self.get_element(i, j); + index += 1; + } } - Self { - elements, - n_cols, - n_rows, + Matrix::::new(&transposed_elements) + } + + /// Create a new matrix from a slice of elements. + pub const fn new_from_known(elements: [Fq; N_ELEMENTS]) -> Self { + if N_ELEMENTS != N_ROWS * N_COLS { + panic!("Matrix has an insufficient number of elements") } + + Self { elements } } +} - fn elements(&self) -> &Vec { - &self.elements +impl MatrixOperations + for Matrix +{ + fn new(elements: &[Fq]) -> Self { + // Note: We use a third const generic to denote the number of elements in the + // matrix here due to `generic_const_exprs` being an unstable Rust feature at + // the time of writing. + if N_ELEMENTS != N_ROWS * N_COLS { + panic!("Matrix has an insufficient number of elements") + } + + let elements: [Fq; N_ELEMENTS] = elements + .try_into() + .expect("Matrix has the correct number of elements"); + + Self { elements } } - fn get_element(&self, i: usize, j: usize) -> F { - self.elements[i * self.n_cols + j] + fn elements(&self) -> &[Fq] { + &self.elements } - fn set_element(&mut self, i: usize, j: usize, val: F) { - self.elements[i * self.n_cols + j] = val + fn get_element(&self, i: usize, j: usize) -> Fq { + self.elements[i * N_COLS + j] } - fn rows(&self) -> Vec<&[F]> { - self.elements.chunks(self.n_cols).collect() + fn set_element(&mut self, i: usize, j: usize, val: Fq) { + self.elements[i * N_COLS + j] = val } fn n_rows(&self) -> usize { - self.n_rows + N_ROWS } fn n_cols(&self) -> usize { - self.n_cols - } - - fn transpose(&self) -> Self { - let mut transposed_elements = Vec::with_capacity(self.n_rows * self.n_cols); - - for j in 0..self.n_cols { - for i in 0..self.n_rows { - transposed_elements.push(self.get_element(i, j)) - } - } - Self::new(self.n_cols, self.n_rows, transposed_elements) + N_COLS } - fn hadamard_product(&self, rhs: &Self) -> Result + fn hadamard_product(&self, rhs: &Self) -> Result where Self: Sized, { - if self.n_rows != rhs.n_rows || self.n_cols != rhs.n_cols { - return Err(anyhow!("Hadamard product requires same shape matrices")); - } - - let mut new_elements = Vec::with_capacity(self.n_rows * self.n_cols); - for i in 0..self.n_rows { - for j in 0..self.n_cols { - new_elements.push(self.get_element(i, j) * rhs.get_element(i, j)); + let mut new_elements = [Fq::default(); N_ELEMENTS]; + let mut index = 0; + for i in 0..self.n_rows() { + for j in 0..self.n_cols() { + new_elements[index] = self.get_element(i, j) * rhs.get_element(i, j); + index += 1; } } - Ok(Self::new(self.n_rows, self.n_cols, new_elements)) + Ok(Self::new(&new_elements)) + } +} + +/// Multiply two `Matrix` +pub fn mat_mul< + const LHS_N_ROWS: usize, + const LHS_N_COLS: usize, + const LHS_N_ELEMENTS: usize, + const RHS_N_ROWS: usize, + const RHS_N_COLS: usize, + const RHS_N_ELEMENTS: usize, + const RESULT_N_ELEMENTS: usize, +>( + lhs: &Matrix, + rhs: &Matrix, +) -> Matrix { + let rhs_T = rhs.transpose(); + + let mut new_elements = [Fq::default(); RESULT_N_ELEMENTS]; + + let mut index = 0; + for row in lhs.iter_rows() { + // Rows of the transposed matrix are the columns of the original matrix + for column in rhs_T.iter_rows() { + new_elements[index] = dot_product(row, column); + index += 1; + } } + + Matrix::::new(&new_elements) } /// Multiply scalar by Matrix -impl Mul for Matrix { - type Output = Matrix; +impl Mul + for Matrix +{ + type Output = Matrix; - fn mul(self, rhs: F) -> Self::Output { + fn mul(self, rhs: Fq) -> Self::Output { let elements = self.elements(); - let new_elements: Vec = elements.iter().map(|element| *element * rhs).collect(); - Self::new(self.n_rows(), self.n_cols(), new_elements) + let mut new_elements = [Fq::default(); N_ELEMENTS]; + for (i, &element) in elements.iter().enumerate() { + new_elements[i] = element * rhs; + } + Self::new(&new_elements) } } -impl Matrix { +impl + Matrix +{ /// Get row vector at a specified row index - pub fn row_vector(&self, i: usize) -> Matrix { - let mut row_elements = Vec::with_capacity(self.n_cols); - for j in 0..self.n_cols { - row_elements.push(self.get_element(i, j)); + pub fn row_vector(&self, i: usize) -> Matrix<1, N_COLS, N_ELEMENTS> { + let mut row_elements = [Fq::default(); N_COLS]; + for j in 0..N_COLS { + row_elements[j] = self.get_element(i, j); } - Matrix::new(1, self.n_cols, row_elements) + Matrix::new(&row_elements) + } +} + +impl SquareMatrix { + pub fn transpose(&self) -> Self { + Self(self.0.transpose()) } } /// Represents a square matrix over `PrimeField` elements #[derive(Clone, Debug, PartialEq, Eq)] -pub struct SquareMatrix(pub Matrix); - -impl MatrixOperations for SquareMatrix { - fn new(n_rows: usize, n_cols: usize, elements: Vec) -> Self { - Self(Matrix::new(n_rows, n_cols, elements)) +pub struct SquareMatrix( + pub Matrix, +); + +impl MatrixOperations + for SquareMatrix +{ + fn new(elements: &[Fq]) -> Self { + Self(Matrix::new(elements)) } - fn elements(&self) -> &Vec { + fn elements(&self) -> &[Fq] { self.0.elements() } - fn get_element(&self, i: usize, j: usize) -> F { + fn get_element(&self, i: usize, j: usize) -> Fq { self.0.get_element(i, j) } - fn set_element(&mut self, i: usize, j: usize, val: F) { + fn set_element(&mut self, i: usize, j: usize, val: Fq) { self.0.set_element(i, j, val) } - fn rows(&self) -> Vec<&[F]> { - self.0.rows() - } - fn n_rows(&self) -> usize { - self.0.n_rows + N_ROWS } fn n_cols(&self) -> usize { - self.0.n_cols + // Matrix is square + N_ROWS } - fn transpose(&self) -> Self { - Self(self.0.transpose()) - } - - fn hadamard_product(&self, rhs: &Self) -> Result + fn hadamard_product(&self, rhs: &Self) -> Result where Self: Sized, { @@ -153,21 +203,24 @@ impl MatrixOperations for SquareMatrix { } } -impl SquareMatrixOperations for SquareMatrix { +impl SquareMatrixOperations + for SquareMatrix +{ /// Compute the inverse of the matrix - fn inverse(&self) -> Result { - let identity = Self::identity(self.n_rows()); + fn inverse(&self) -> Result { + let identity = Self::identity(); if self.n_rows() == 1 { - return Ok(Self::from_vec(vec![self + let elements = [self .get_element(0, 0) .inverse() - .expect("inverse of single element must exist for 1x1 matrix")])); + .expect("inverse of single element must exist for 1x1 matrix")]; + return Ok(Self::new(&elements)); } let determinant = self.determinant(); - if determinant == F::zero() { - return Err(anyhow!("err: matrix has no inverse")); + if determinant == Fq::from(0u64) { + return Err(PoseidonParameterError::NoMatrixInverse); } let minors = self.minors(); @@ -176,23 +229,20 @@ impl SquareMatrixOperations for SquareMatrix { .hadamard_product(&cofactor_matrix) .expect("minor and cofactor matrix have correct dimensions"); let adj = signed_minors.transpose(); - let matrix_inverse = adj * (F::one() / determinant); + let matrix_inverse = adj * (Fq::from(1u64) / determinant); - debug_assert_eq!( - mat_mul(self, &matrix_inverse) - .expect("matrix and its inverse should have same dimensions"), - identity - ); + debug_assert_eq!(square_mat_mul(self, &matrix_inverse), identity); Ok(matrix_inverse) } - /// Construct a dim x dim identity matrix - fn identity(dim: usize) -> Self { - let mut m = Self::from_vec(vec![F::zero(); dim * dim]); + /// Construct an identity matrix + fn identity() -> Self { + let elements = [Fq::from(0u64); N_ELEMENTS]; + let mut m = Self::new(&elements); // Set diagonals to 1 - for i in 0..dim { - m.set_element(i, i, F::one()); + for i in 0..N_ROWS { + m.set_element(i, i, Fq::from(1u64)); } m @@ -200,43 +250,24 @@ impl SquareMatrixOperations for SquareMatrix { /// Compute the (unsigned) minors of this matrix fn minors(&self) -> Self { - match self.n_cols() { + match N_ROWS { 0 => panic!("matrix has no elements!"), - 1 => Self::from_vec(vec![self.get_element(0, 0)]), + 1 => Self::new(&[self.get_element(0, 0)]), 2 => { let a = self.get_element(0, 0); let b = self.get_element(0, 1); let c = self.get_element(1, 0); let d = self.get_element(1, 1); - Self::from_vec(vec![d, c, b, a]) + Self::new(&[d, c, b, a]) } + 3 => minor_matrix::(self), + 4 => minor_matrix::(self), + 5 => minor_matrix::(self), + 6 => minor_matrix::(self), + 7 => minor_matrix::(self), + 8 => minor_matrix::(self), _ => { - let dim = self.n_rows(); - let mut minor_matrix_elements = Vec::with_capacity(dim * dim); - for i in 0..dim { - for j in 0..dim { - let mut elements: Vec = Vec::new(); - for k in 0..i { - for l in 0..j { - elements.push(self.get_element(k, l)) - } - for l in (j + 1)..dim { - elements.push(self.get_element(k, l)) - } - } - for k in i + 1..dim { - for l in 0..j { - elements.push(self.get_element(k, l)) - } - for l in (j + 1)..dim { - elements.push(self.get_element(k, l)) - } - } - let minor = Self::from_vec(elements); - minor_matrix_elements.push(minor.determinant()); - } - } - Self::from_vec(minor_matrix_elements) + unimplemented!("poseidon-parameters only supports square matrices up to 8") } } } @@ -244,103 +275,172 @@ impl SquareMatrixOperations for SquareMatrix { /// Compute the cofactor matrix, i.e. $C_{ij} = (-1)^{i+j}$ fn cofactors(&self) -> Self { let dim = self.n_rows(); - let mut elements = Vec::with_capacity(dim); + let mut elements = [Fq::from(0u64); N_ELEMENTS]; + + let mut index = 0; for i in 0..dim { for j in 0..dim { - elements.push((-F::one()).pow([(i + j) as u64])) + elements[index] = (-Fq::from(1u64)).power([(i + j) as u64]); + index += 1; } } - Self::from_vec(elements) + Self::new(&elements) } /// Compute the matrix determinant - fn determinant(&self) -> F { - match self.n_cols() { + fn determinant(&self) -> Fq { + match N_ROWS { 0 => panic!("matrix has no elements!"), 1 => self.get_element(0, 0), - 2 => { - let a11 = self.get_element(0, 0); - let a12 = self.get_element(0, 1); - let a21 = self.get_element(1, 0); - let a22 = self.get_element(1, 1); - a11 * a22 - a21 * a12 - } - 3 => { - let a11 = self.get_element(0, 0); - let a12 = self.get_element(0, 1); - let a13 = self.get_element(0, 2); - let a21 = self.get_element(1, 0); - let a22 = self.get_element(1, 1); - let a23 = self.get_element(1, 2); - let a31 = self.get_element(2, 0); - let a32 = self.get_element(2, 1); - let a33 = self.get_element(2, 2); - - a11 * (Self::new_2x2(a22, a23, a32, a33).determinant()) - - a12 * (Self::new_2x2(a21, a23, a31, a33).determinant()) - + a13 * (Self::new_2x2(a21, a22, a31, a32).determinant()) - } + 2 => determinant::(self), + 3 => determinant::(self), + 4 => determinant::(self), + 5 => determinant::(self), + 6 => determinant::(self), + 7 => determinant::(self), + 8 => determinant::(self), _ => { - // Unoptimized, but MDS matrices are fairly small, so we do the naive thing - let mut det = F::zero(); - let mut levi_civita = true; - let dim = self.n_rows(); - - for i in 0..dim { - let mut elements: Vec = Vec::new(); - for k in 0..i { - for l in 1..dim { - elements.push(self.get_element(k, l)) - } - } - for k in i + 1..dim { - for l in 1..dim { - elements.push(self.get_element(k, l)) - } - } - let minor = Self::from_vec(elements); - if levi_civita { - det += self.get_element(i, 0) * minor.determinant(); - } else { - det -= self.get_element(i, 0) * minor.determinant(); - } - levi_civita = !levi_civita; - } - - det + unimplemented!("poseidon-parameters only supports square matrices up to 8") } } } } /// Multiply scalar by SquareMatrix -impl Mul for SquareMatrix { - type Output = SquareMatrix; - - fn mul(self, rhs: F) -> Self::Output { - let elements = self.0.elements(); - let new_elements: Vec = elements.iter().map(|element| *element * rhs).collect(); - Self::from_vec(new_elements) - } -} +impl Mul for SquareMatrix { + type Output = SquareMatrix; -impl SquareMatrix { - /// Create a `SquareMatrix` from a vector of elements. - pub fn from_vec(elements: Vec) -> Self { - let dim = elements.len().sqrt(); - if dim * dim != elements.len() { - panic!("SquareMatrix must be square") + fn mul(self, rhs: Fq) -> Self::Output { + let elements = self.elements(); + let mut new_elements = [Fq::default(); N_ELEMENTS]; + for (i, &element) in elements.iter().enumerate() { + new_elements[i] = element * rhs; } - Self(Matrix::new(dim, dim, elements)) + Self::new(&new_elements) } +} +impl SquareMatrix { /// Get row vector at a specified row index. - pub fn row_vector(&self, i: usize) -> Matrix { + pub fn row_vector(&self, i: usize) -> Matrix<1, N_ROWS, N_ELEMENTS> { self.0.row_vector(i) } /// Create a 2x2 `SquareMatrix` from four elements. - pub fn new_2x2(a: F, b: F, c: F, d: F) -> SquareMatrix { - Self::from_vec(vec![a, b, c, d]) + pub fn new_2x2(a: Fq, b: Fq, c: Fq, d: Fq) -> SquareMatrix<2, 4> { + SquareMatrix::<2, 4>::new(&[a, b, c, d]) + } + + /// Create a new matrix from a slice of elements. + pub const fn new_from_known(elements: [Fq; N_ELEMENTS]) -> Self { + Self(Matrix::new_from_known(elements)) + } +} + +/// Multiply two matrices +pub fn square_mat_mul< + const LHS_N_ROWS: usize, + const LHS_N_ELEMENTS: usize, + const RHS_N_ROWS: usize, + const RHS_N_ELEMENTS: usize, + const RESULT_N_ELEMENTS: usize, +>( + lhs: &SquareMatrix, + rhs: &SquareMatrix, +) -> SquareMatrix { + let rhs_T = rhs.transpose(); + + let mut new_elements = [Fq::default(); RESULT_N_ELEMENTS]; + + let mut index = 0; + for row in lhs.iter_rows() { + // Rows of the transposed matrix are the columns of the original matrix + for column in rhs_T.iter_rows() { + new_elements[index] = dot_product(row, column); + index += 1; + } + } + + SquareMatrix::::new(&new_elements) +} + +/// Helper function for computing matrix minors +fn minor_matrix< + const DIM: usize, + const DIM_MINUS_1: usize, + const N_ELEMENTS: usize, + const N_ELEMENTS_DIM_MINUS_1: usize, +>( + matrix: &SquareMatrix, +) -> SquareMatrix { + let mut minor_matrix_elements = [Fq::default(); N_ELEMENTS]; + let mut outer_index = 0; + for i in 0..DIM { + for j in 0..DIM { + let mut elements = [Fq::default(); N_ELEMENTS_DIM_MINUS_1]; + let mut index = 0; + for k in 0..i { + for l in 0..j { + elements[index] = matrix.get_element(k, l); + index += 1; + } + for l in (j + 1)..DIM { + elements[index] = matrix.get_element(k, l); + index += 1; + } + } + for k in i + 1..DIM { + for l in 0..j { + elements[index] = matrix.get_element(k, l); + index += 1; + } + for l in (j + 1)..DIM { + elements[index] = matrix.get_element(k, l); + index += 1; + } + } + let minor = SquareMatrix::::new(&elements); + minor_matrix_elements[outer_index] = minor.determinant(); + outer_index += 1; + } + } + SquareMatrix::::new(&minor_matrix_elements) +} + +/// Helper function for computing matrix determinant +fn determinant< + const DIM: usize, + const DIM_MINUS_1: usize, + const N_ELEMENTS: usize, + const N_ELEMENTS_DIM_MINUS_1: usize, +>( + matrix: &SquareMatrix, +) -> Fq { + let mut det = Fq::from(0u64); + let mut levi_civita = true; + + for i in 0..DIM { + let mut elements = [Fq::default(); N_ELEMENTS_DIM_MINUS_1]; + let mut index = 0; + for k in 0..i { + for l in 1..DIM { + elements[index] = matrix.get_element(k, l); + index += 1; + } + } + for k in i + 1..DIM { + for l in 1..DIM { + elements[index] = matrix.get_element(k, l); + index += 1; + } + } + let minor = SquareMatrix::::new(&elements); + if levi_civita { + det += matrix.get_element(i, 0) * minor.determinant(); + } else { + det -= matrix.get_element(i, 0) * minor.determinant(); + } + levi_civita = !levi_civita; } + det } diff --git a/poseidon-parameters/src/matrix_ops.rs b/poseidon-parameters/src/matrix_ops.rs index 4f08959..da122e9 100644 --- a/poseidon-parameters/src/matrix_ops.rs +++ b/poseidon-parameters/src/matrix_ops.rs @@ -1,62 +1,33 @@ use core::slice::Chunks; -use anyhow::{anyhow, Result}; -use ark_ff::{vec::Vec, PrimeField}; +use crate::error::PoseidonParameterError; +use decaf377::Fq; -pub trait MatrixOperations { +pub trait MatrixOperations { /// Create a new matrix - fn new(n_rows: usize, n_cols: usize, elements: Vec) -> Self; - /// Access elements as a vector - fn elements(&self) -> &Vec; + fn new(elements: &[Fq]) -> Self; + /// Access elements as an array of arrays + fn elements(&self) -> &[Fq]; /// Get element[i,j] - fn get_element(&self, i: usize, j: usize) -> F; + fn get_element(&self, i: usize, j: usize) -> Fq; /// Set element[i,j] - fn set_element(&mut self, i: usize, j: usize, val: F); + fn set_element(&mut self, i: usize, j: usize, val: Fq); /// Get rows - fn rows(&self) -> Vec<&[F]>; - /// Get rows in chunks - fn iter_rows(&self) -> Chunks { + fn iter_rows(&self) -> Chunks { self.elements().chunks(self.n_cols()) } /// Number of rows fn n_rows(&self) -> usize; /// Number of columns fn n_cols(&self) -> usize; - /// Take transpose of the matrix - fn transpose(&self) -> Self; /// Compute Hadamard (element-wise) product - fn hadamard_product(&self, rhs: &Self) -> Result + fn hadamard_product(&self, rhs: &Self) -> Result where Self: Sized; } -/// Multiply two matrices -pub fn mat_mul>(lhs: &M, rhs: &M) -> Result { - if lhs.n_cols() != rhs.n_rows() { - return Err(anyhow!( - "matrix dimensions do not allow matrix multiplication" - )); - } - - let rhs_T = rhs.transpose(); - - Ok(M::new( - lhs.n_rows(), - rhs.n_cols(), - lhs.iter_rows() - .flat_map(|row| { - // Rows of the transposed matrix are the columns of the original matrix - rhs_T - .iter_rows() - .map(|column| dot_product(row, column)) - .collect::>() - }) - .collect(), - )) -} - /// Compute vector dot product -pub fn dot_product(a: &[F], b: &[F]) -> F { +pub fn dot_product(a: &[Fq], b: &[Fq]) -> Fq { if a.len() != b.len() { panic!("vecs not same len") } @@ -64,90 +35,18 @@ pub fn dot_product(a: &[F], b: &[F]) -> F { a.iter().zip(b.iter()).map(|(x, y)| *x * *y).sum() } -pub struct Polynomial { - /// The coefficients of the polynomial a_0, ..., a_i - pub coeffs: Vec, -} - -impl Polynomial { - /// Construct a new polynomial - pub fn new(coeffs: Vec) -> Self { - Self { coeffs } - } - - /// Degree of the polynomial - pub fn max_degree(&self) -> usize { - self.coeffs.len() - 1 - } - - /// Evaluate the polynomial at a given point - pub fn evaluate(&self, x: F) -> F { - self.coeffs - .iter() - .rev() - .fold(F::zero(), |acc, coeff| acc * x + coeff) - } - - /// Check if the polynomial is irreducible using Perron's irreducibility criterion. - pub fn is_irreducible(&self) -> bool { - // We first need to check the polynomial is monic. - if self.coeffs.last() != Some(&F::one()) { - unimplemented!("polynomial is not monic, not sure how to check irreducibility") - } else { - // The polynomial is monic, so we can apply Perron's criterion. - // See https://en.wikipedia.org/wiki/Perron%27s_irreducibility_criterion - // for more details. - let n = self.max_degree(); - let mut sum = F::one(); - for i in 0..n - 1 { - sum += self.coeffs[i]; - } - - match self.coeffs[n - 1] { - // Condition 1: - // $\abs{a_{n-1}} > 1 + \abs{a_{n-2}} + ... + \abs{a_0}$ - coeff if coeff > sum => true, - // Condition 2: - // $\abs{a_{n-1}} = 1 + \abs{a_{n-2}} + ... + \abs{a_0}$ - // AND - // f(1) != 0 AND f(-1) != 0 - coeff if coeff == sum => { - let f_of_1 = self.evaluate(F::one()); - let f_of_neg_1 = self.evaluate(-F::one()); - f_of_1 != F::zero() && f_of_neg_1 != F::zero() - } - _ => false, - } - } - } -} - /// Matrix operations that are defined on square matrices. -pub trait SquareMatrixOperations { +pub trait SquareMatrixOperations { /// Compute the matrix inverse, if it exists - fn inverse(&self) -> Result + fn inverse(&self) -> Result where Self: Sized; - /// Construct an n x n identity matrix - fn identity(n: usize) -> Self; + /// Construct an identity matrix + fn identity() -> Self; /// Compute the matrix of minors fn minors(&self) -> Self; /// Compute the matrix of cofactors fn cofactors(&self) -> Self; /// Compute the matrix determinant - fn determinant(&self) -> F; -} - -#[cfg(test)] -mod tests { - use super::*; - use ark_ed_on_bls12_377::Fq; - - #[test] - fn poly_evaluate() { - // f(x) = 1 + 2x + 3x^2 - let poly = Polynomial::new(vec![Fq::from(1), Fq::from(2), Fq::from(3)]); - assert_eq!(poly.max_degree(), 2); - assert_eq!(poly.evaluate(Fq::from(2)), Fq::from(17)); - } + fn determinant(&self) -> Fq; } diff --git a/poseidon-parameters/src/mds_matrix.rs b/poseidon-parameters/src/mds_matrix.rs index 521c030..b7bb3c2 100644 --- a/poseidon-parameters/src/mds_matrix.rs +++ b/poseidon-parameters/src/mds_matrix.rs @@ -1,36 +1,46 @@ -use anyhow::Result; -use ark_ff::{vec::Vec, PrimeField}; - use crate::{ + error::PoseidonParameterError, matrix::{Matrix, SquareMatrix}, matrix_ops::{MatrixOperations, SquareMatrixOperations}, }; +use decaf377::Fq; /// Represents an MDS (maximum distance separable) matrix. #[derive(Clone, Debug, PartialEq, Eq)] -pub struct MdsMatrix(pub SquareMatrix); - -impl MatrixOperations for MdsMatrix { - fn new(n_rows: usize, n_cols: usize, elements: Vec) -> Self { - Self(SquareMatrix::new(n_rows, n_cols, elements)) +pub struct MdsMatrix< + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_ELEMENTS: usize, + const NUM_ELEMENTS_STATE_SIZE_MINUS_1_2: usize, +>(pub SquareMatrix); + +impl< + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_ELEMENTS: usize, + const NUM_ELEMENTS_STATE_SIZE_MINUS_1_2: usize, + > MatrixOperations + for MdsMatrix +{ + fn new(elements: &[Fq]) -> Self { + assert!(STATE_SIZE == STATE_SIZE_MINUS_1 + 1); + assert!(STATE_SIZE * STATE_SIZE == NUM_ELEMENTS); + assert!(STATE_SIZE_MINUS_1 * STATE_SIZE_MINUS_1 == NUM_ELEMENTS_STATE_SIZE_MINUS_1_2); + Self(SquareMatrix::new(elements)) } - fn elements(&self) -> &Vec { + fn elements(&self) -> &[Fq] { self.0.elements() } - fn get_element(&self, i: usize, j: usize) -> F { + fn get_element(&self, i: usize, j: usize) -> Fq { self.0.get_element(i, j) } - fn set_element(&mut self, i: usize, j: usize, val: F) { + fn set_element(&mut self, i: usize, j: usize, val: Fq) { self.0.set_element(i, j, val) } - fn rows(&self) -> Vec<&[F]> { - self.0.rows() - } - fn n_rows(&self) -> usize { self.0.n_rows() } @@ -39,11 +49,7 @@ impl MatrixOperations for MdsMatrix { self.0.n_cols() } - fn transpose(&self) -> Self { - Self(self.0.transpose()) - } - - fn hadamard_product(&self, rhs: &Self) -> Result + fn hadamard_product(&self, rhs: &Self) -> Result where Self: Sized, { @@ -51,7 +57,13 @@ impl MatrixOperations for MdsMatrix { } } -impl MdsMatrix { +impl< + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_ELEMENTS: usize, + const NUM_ELEMENTS_STATE_SIZE_MINUS_1_2: usize, + > MdsMatrix +{ /// Instantiate an MDS matrix from a list of elements. /// /// # Security @@ -60,12 +72,16 @@ impl MdsMatrix { /// using the Cauchy method in `fixed_cauchy_matrix` or /// using the random subsampling method described in the original /// paper. - pub fn from_elements(elements: Vec) -> Self { - Self(SquareMatrix::from_vec(elements)) + pub fn from_elements(elements: &[Fq]) -> Self { + Self(SquareMatrix::new(elements)) + } + + pub fn transpose(&self) -> Self { + Self(self.0.transpose()) } /// Compute inverse of MDS matrix - pub fn inverse(&self) -> SquareMatrix { + pub fn inverse(&self) -> SquareMatrix { self.0 .inverse() .expect("all well-formed MDS matrices should have inverses") @@ -74,20 +90,20 @@ impl MdsMatrix { /// Return the elements M_{0,1} .. M_{0,t} from the first row /// /// Ref: p.20 of the Poseidon paper - pub fn v(&self) -> Matrix { - let elements: Vec = self.0 .0.elements()[1..self.0 .0.n_rows()].to_vec(); - Matrix::new(1, self.0.n_rows() - 1, elements) + pub fn v(&self) -> Matrix<1, STATE_SIZE_MINUS_1, STATE_SIZE_MINUS_1> { + let elements = &self.0 .0.elements()[1..self.0 .0.n_rows()]; + Matrix::new(elements) } - /// Return the elements M_{1,0} .. M_{t,0}from the first column + /// Return the elements M_{1,0} .. M_{t,0} from the first column /// /// Ref: p.20 of the Poseidon paper - pub fn w(&self) -> Matrix { - let mut elements = Vec::with_capacity(self.0.n_rows() - 1); + pub fn w(&self) -> Matrix { + let mut elements = [Fq::from(0u64); STATE_SIZE_MINUS_1]; for i in 1..self.n_rows() { - elements.push(self.get_element(i, 0)) + elements[i - 1] = self.get_element(i, 0); } - Matrix::new(&self.n_rows() - 1, 1, elements) + Matrix::new(&elements) } /// Compute the (t - 1) x (t - 1) Mhat matrix from the MDS matrix @@ -95,56 +111,62 @@ impl MdsMatrix { /// This is simply the MDS matrix with the first row and column removed /// /// Ref: p.20 of the Poseidon paper - pub fn hat(&self) -> SquareMatrix { + pub fn hat(&self) -> SquareMatrix { let dim = self.n_rows(); - let mut mhat_elements = Vec::with_capacity((dim - 1) * (dim - 1)); + let mut mhat_elements = [Fq::from(0u64); NUM_ELEMENTS_STATE_SIZE_MINUS_1_2]; + let mut index = 0; for i in 1..dim { for j in 1..dim { - mhat_elements.push(self.0.get_element(i, j)) + mhat_elements[index] = self.0.get_element(i, j); + index += 1; } } - - SquareMatrix::from_vec(mhat_elements) + SquareMatrix::new(&mhat_elements) } -} -impl From> for Vec> { - fn from(val: MdsMatrix) -> Self { - let mut rows = Vec::>::new(); - for i in 0..val.0.n_rows() { - let mut row = Vec::new(); - for j in 0..val.0.n_rows() { - row.push(val.0 .0.get_element(i, j)); - } - rows.push(row); - } - rows + /// Create a new matrix from a slice of elements. + /// + /// # Security + /// + /// You must ensure this matrix was generated securely, + /// using the Cauchy method in `fixed_cauchy_matrix` or + /// using the random subsampling method described in the original + /// paper. + pub const fn new_from_known(elements: [Fq; NUM_ELEMENTS]) -> Self { + Self(SquareMatrix::new_from_known(elements)) } } /// Represents an optimized MDS (maximum distance separable) matrix. #[derive(Clone, Debug, PartialEq, Eq)] -pub struct OptimizedMdsMatrices { +pub struct OptimizedMdsMatrices< + const N_ROUNDS: usize, + const N_PARTIAL_ROUNDS: usize, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, +> { /// A (t - 1) x (t - 1) MDS submatrix derived from the MDS matrix. - pub M_hat: SquareMatrix, + pub M_hat: SquareMatrix, /// A 1 x (t - 1) (row) vector derived from the MDS matrix. - pub v: Matrix, + pub v: Matrix<1, STATE_SIZE_MINUS_1, STATE_SIZE_MINUS_1>, /// A (t - 1) x 1 (column) vector derived from the MDS matrix. - pub w: Matrix, + pub w: Matrix, /// A matrix formed from Mhat (an MDS submatrix of the MDS matrix). - pub M_prime: SquareMatrix, + pub M_prime: SquareMatrix, /// A sparse matrix formed from M, - pub M_doubleprime: SquareMatrix, + pub M_doubleprime: SquareMatrix, /// The inverse of the t x t MDS matrix (needed to compute round constants). - pub M_inverse: SquareMatrix, + pub M_inverse: SquareMatrix, /// The inverse of the (t - 1) x (t - 1) Mhat matrix. - pub M_hat_inverse: SquareMatrix, + pub M_hat_inverse: SquareMatrix, /// Element at M00 - pub M_00: F, + pub M_00: Fq, /// M_i - pub M_i: Matrix, - /// v_collection: one per round. - pub v_collection: Vec>, + pub M_i: Matrix, + /// v_collection: one per partial round. + pub v_collection: [Matrix<1, STATE_SIZE_MINUS_1, STATE_SIZE_MINUS_1>; N_PARTIAL_ROUNDS], /// w_hat_collection: one per round - pub w_hat_collection: Vec>, + pub w_hat_collection: [Matrix; N_PARTIAL_ROUNDS], } diff --git a/poseidon-parameters/src/round_numbers.rs b/poseidon-parameters/src/round_numbers.rs index 84698a0..96e1e78 100644 --- a/poseidon-parameters/src/round_numbers.rs +++ b/poseidon-parameters/src/round_numbers.rs @@ -8,7 +8,7 @@ pub struct RoundNumbers { } impl RoundNumbers { - /// Number of full rounds. + /// Number of full rounds. pub fn full(&self) -> usize { self.r_F } @@ -18,7 +18,7 @@ impl RoundNumbers { &mut self.r_F } - /// Number of partial rounds. + /// Number of partial rounds. pub fn partial(&self) -> usize { self.r_P } diff --git a/poseidon-parameters/src/v1.rs b/poseidon-parameters/src/v1.rs index a3b55f1..59f138a 100644 --- a/poseidon-parameters/src/v1.rs +++ b/poseidon-parameters/src/v1.rs @@ -1,24 +1,30 @@ -use ark_ff::PrimeField; - pub use crate::alpha::Alpha; pub use crate::round_numbers::RoundNumbers; -pub use crate::{matrix::Matrix, matrix::SquareMatrix, matrix_ops::mat_mul}; - +pub use crate::matrix::{mat_mul, square_mat_mul, Matrix, SquareMatrix}; pub use crate::{ arc_matrix::ArcMatrix, arc_matrix::OptimizedArcMatrix, matrix_ops::MatrixOperations, matrix_ops::SquareMatrixOperations, mds_matrix::MdsMatrix, mds_matrix::OptimizedMdsMatrices, }; -// TODO: arc and mds could be collections -/// A set of Poseidon1 parameters for a given set of input parameters. +/// A set of Poseidon1 parameters for a given set of input parameters over decaf377::Fq. +/// +/// The const `STATE_SIZE` corresponds to $t$ in the paper, the width of the hash function, +/// e.g. $t=3$ corresponds to a 2-to-1 hash. #[derive(Clone, Debug)] -pub struct PoseidonParameters { +pub struct PoseidonParameters< + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, + const NUM_PARTIAL_ROUNDS: usize, +> { // Input parameters. /// Security level. pub M: usize, - /// Width of desired hash function, e.g. $t=3$ corresponds to a 2-to-1 hash. - pub t: usize, // Generated parameters. /// Exponent of the Sbox, i.e. S-box(x) = x^{\alpha} used in the `SubWords` step @@ -28,14 +34,26 @@ pub struct PoseidonParameters { pub rounds: RoundNumbers, /// `t x t` MDS matrix used in the `MixLayer` step - pub mds: MdsMatrix, + pub mds: MdsMatrix< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + >, /// `num_total_rounds x t` matrix of constants used in the `AddRoundConstant` step - pub arc: ArcMatrix, + pub arc: ArcMatrix, /// Optimized round constants. - pub optimized_arc: OptimizedArcMatrix, + pub optimized_arc: OptimizedArcMatrix, /// Optimized MDS matrices. - pub optimized_mds: OptimizedMdsMatrices, + pub optimized_mds: OptimizedMdsMatrices< + NUM_ROUND_ROWS, + NUM_PARTIAL_ROUNDS, + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + >, } diff --git a/poseidon-parameters/src/v2.rs b/poseidon-parameters/src/v2.rs index f97a6a6..a44a10e 100644 --- a/poseidon-parameters/src/v2.rs +++ b/poseidon-parameters/src/v2.rs @@ -1,22 +1,31 @@ -use ark_ff::PrimeField; - pub use crate::alpha::Alpha; pub use crate::arc_matrix::ArcMatrix; pub use crate::matrix::SquareMatrix; pub use crate::round_numbers::RoundNumbers; -pub use crate::{ - matrix_ops::MatrixOperations, matrix_ops::Polynomial, matrix_ops::SquareMatrixOperations, -}; +pub use crate::{matrix_ops::MatrixOperations, matrix_ops::SquareMatrixOperations}; /// A set of Poseidon2 parameters for a given set of input parameters. +/// +/// The const `STATE_SIZE` corresponds to $t$ in the paper, the width of the hash function, +/// e.g. $t=3$ corresponds to a 2-to-1 hash. +/// +/// The const `NUM_MDS_ELEMENTS` corresponds to the number of elements in the MDS matrices, which +/// should equal `STATE_SIZE * STATE_SIZE`. +/// +/// The const `NUM_ROUND_ROWS`, `NUM_ROUND_COLS`, and `NUM_ROUND_ELEMENTS` correspond to the number +/// of rows in the round constants matrix. #[derive(Clone, Debug)] -pub struct PoseidonParameters { +pub struct PoseidonParameters< + const STATE_SIZE: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, +> { // Input parameters. /// Security level. pub M: usize, - /// Width of desired hash function, e.g. $t=3$ corresponds to a 2-to-1 hash. - pub t: usize, // Generated parameters. /// Exponent of the Sbox, i.e. S-box(x) = x^{\alpha} used in the `SubWords` step @@ -26,11 +35,11 @@ pub struct PoseidonParameters { pub rounds: RoundNumbers, /// External matrix - pub m_e: SquareMatrix, + pub m_e: SquareMatrix, /// Internal matrix - pub m_i: SquareMatrix, + pub m_i: SquareMatrix, /// Round constants - pub arc: ArcMatrix, + pub arc: ArcMatrix, } diff --git a/poseidon-paramgen/Cargo.toml b/poseidon-paramgen/Cargo.toml index 319a074..9e2f102 100644 --- a/poseidon-paramgen/Cargo.toml +++ b/poseidon-paramgen/Cargo.toml @@ -3,7 +3,7 @@ name = "poseidon-paramgen" version = "0.4.0" edition = "2018" authors = ["Penumbra ", "redshiftzero "] -description = "A crate for generating Poseidon parameters" +description = "A crate for generating Poseidon parameters for decaf377" license = "MIT OR Apache-2.0" repository = "https://github.com/penumbra-zone/poseidon377" @@ -15,11 +15,12 @@ getrandom = { version = "0.2", default-features = false, features = ["js"] } merlin = { version = "3.0", default-features = false } num = { version = "0.4", default-features = false } num-bigint = { version = "0.4", default-features = false } -rand_core = { version = "0.6.3", default-features = false, features = ["getrandom"] } +# rand_core = { version = "0.6.3", default-features = false } -poseidon-parameters = { path = "../poseidon-parameters", default-features = false, version = "0.4" } +poseidon-parameters = { path = "../poseidon-parameters", default-features = false, version = "1.0" } [dev-dependencies] +decaf377 = { version="0.9", default-features = false } ark-bn254 = "0.4" ark-ed-on-bls12-377 = "0.4" ark-ed-on-bls12-381 = "0.4" @@ -33,7 +34,7 @@ std = [ "merlin/std", "num/std", "num-bigint/std", - "rand_core/std", +# "rand_core/std", "getrandom/std", "poseidon-parameters/std", diff --git a/poseidon-paramgen/src/mds.rs b/poseidon-paramgen/src/mds.rs index e5e82fa..85dc1ea 100644 --- a/poseidon-paramgen/src/mds.rs +++ b/poseidon-paramgen/src/mds.rs @@ -7,9 +7,17 @@ use poseidon_parameters::v1::{ }; /// Generate the MDS matrix. -pub fn v1_generate(input: &InputParameters) -> MdsMatrix { +pub fn v1_generate< + F: PrimeField, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, +>( + input: &InputParameters, +) -> MdsMatrix { // A t x t MDS matrix only exists if: 2t + 1 <= p - let two_times_t_bigint: F::BigInt = (2 * input.t as u64).into(); + let two_times_t_bigint: F::BigInt = (2 * STATE_SIZE as u64).into(); if two_times_t_bigint > input.p { panic!("no MDS matrix exists"); } @@ -30,7 +38,15 @@ pub fn v1_generate(input: &InputParameters) -> MdsMatr /// /// However, here we use a deterministic method for creating Cauchy matrices that has /// been empirically checked to be safe using the three algorithms above over `decaf377` for t=1-100. -pub fn fixed_cauchy_matrix(input: &InputParameters) -> MdsMatrix { +pub fn fixed_cauchy_matrix< + F: PrimeField, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, +>( + input: &InputParameters, +) -> MdsMatrix { // We explicitly check for small fields where the deterministic procedure can fail. // In these cases, the full algorithms 1-3 should be implemented. if input.p.num_bits() < 128 { @@ -57,11 +73,29 @@ pub fn fixed_cauchy_matrix(input: &InputParameters) -> } /// Generate the optimized MDS matrices. -pub fn generate_optimized( - mds: &MdsMatrix, +pub fn generate_optimized< + F: PrimeField, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const N_ROUNDS: usize, +>( + mds: &MdsMatrix< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + >, t: usize, rounds: &RoundNumbers, -) -> OptimizedMdsMatrices { +) -> OptimizedMdsMatrices< + N_ROUNDS, + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, +> { let M_hat = mds.hat(); let M_hat_inverse = M_hat .inverse() @@ -121,10 +155,26 @@ pub fn generate_optimized( } } -pub fn calc_equivalent_matrices( - mds: &MdsMatrix, +pub fn calc_equivalent_matrices< + F: PrimeField, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const N_ROUNDS: usize, +>( + mds: &MdsMatrix< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + >, rounds: &RoundNumbers, -) -> (Matrix, Vec>, Vec>) { +) -> ( + Matrix, + [Matrix<1, STATE_SIZE_MINUS_1, STATE_SIZE_MINUS_1>; N_ROUNDS], + [Matrix; N_ROUNDS], +) { let r_P = rounds.partial(); let mut w_hat_collection = Vec::with_capacity(rounds.partial()); let mut v_collection = Vec::with_capacity(rounds.partial()); @@ -139,8 +189,7 @@ pub fn calc_equivalent_matrices( let v = M_mul.v(); v_collection.push(v); - let w_hat = mat_mul(&M_hat.clone().inverse().expect("can invert Mhat").0, &w) - .expect("can compute w_hat"); + let w_hat = mat_mul(&M_hat.clone().inverse().expect("can invert Mhat").0, &w); w_hat_collection.push(w_hat); // Now we compute M' and M * M' for the previous round diff --git a/poseidon-paramgen/src/round_constants.rs b/poseidon-paramgen/src/round_constants.rs index a1f22a4..74eb094 100644 --- a/poseidon-paramgen/src/round_constants.rs +++ b/poseidon-paramgen/src/round_constants.rs @@ -9,6 +9,9 @@ use poseidon_parameters::v1::{ use crate::transcript::TranscriptProtocol; +// TODO: +// Problem: We don't know NUM_ROUNDS off the bat, so can't be a compile-time constant. + /// Generate round constants. pub fn v1_generate( input: &InputParameters, diff --git a/poseidon-paramgen/src/v1.rs b/poseidon-paramgen/src/v1.rs index e5d3ab2..b4902bd 100644 --- a/poseidon-paramgen/src/v1.rs +++ b/poseidon-paramgen/src/v1.rs @@ -14,12 +14,29 @@ pub mod poseidon_build { /// * t, the width of the desired hash function, e.g. $t=3$ corresponds to 2-to-1 hash. /// * p, the prime modulus, /// * `allow_inverse`, whether or not to allow an inverse alpha. -pub fn generate( +pub fn generate< + F: PrimeField, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, +>( M: usize, t: usize, p: F::BigInt, allow_inverse: bool, -) -> PoseidonParameters { +) -> PoseidonParameters< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, +> { let input = InputParameters::generate(M, t, p, allow_inverse); let alpha = alpha::generate::(p, allow_inverse); let rounds = rounds::v1_generate(&input, &alpha); @@ -30,7 +47,6 @@ pub fn generate( PoseidonParameters:: { M: input.M, - t: input.t, alpha, rounds, mds, diff --git a/poseidon-paramgen/src/v2.rs b/poseidon-paramgen/src/v2.rs index 9b76109..9d19e51 100644 --- a/poseidon-paramgen/src/v2.rs +++ b/poseidon-paramgen/src/v2.rs @@ -17,12 +17,25 @@ pub mod poseidon_build { /// * t, the width of the desired hash function, e.g. $t=3$ corresponds to 2-to-1 hash. /// * p, the prime modulus, /// * `allow_inverse`, whether or not to allow an inverse alpha. -pub fn generate( +pub fn generate< + F: PrimeField, + const STATE_SIZE: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, +>( M: usize, t: usize, p: F::BigInt, allow_inverse: bool, -) -> PoseidonParameters { +) -> PoseidonParameters< + STATE_SIZE, + NUM_MDS_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, +> { let input = InputParameters::generate(M, t, p, allow_inverse); let alpha = alpha::generate::(p, allow_inverse); let rounds = rounds::v2_generate(&input, &alpha); @@ -33,7 +46,6 @@ pub fn generate( if t < 4 { PoseidonParameters:: { M: input.M, - t: input.t, alpha, rounds, arc, @@ -44,7 +56,6 @@ pub fn generate( let m_e = external::generate(t); PoseidonParameters:: { M: input.M, - t: input.t, alpha, rounds, arc, diff --git a/poseidon-paramgen/src/v2/external.rs b/poseidon-paramgen/src/v2/external.rs index c301221..04a8857 100644 --- a/poseidon-paramgen/src/v2/external.rs +++ b/poseidon-paramgen/src/v2/external.rs @@ -5,7 +5,9 @@ use poseidon_parameters::{ }; /// Generate external matrix -pub fn generate(t: usize) -> SquareMatrix { +pub fn generate( + t: usize, +) -> SquareMatrix { if t < 4 { // For t=[2, 3], we don't need to generate an external matrix // because we also use the internal matrix in the full rounds. @@ -38,7 +40,7 @@ pub fn generate(t: usize) -> SquareMatrix { if t == 4 { M4 } else { - let mut matrix = SquareMatrix::identity(t); + let mut matrix = SquareMatrix::::identity(); let d = t / 4; for i in 0..d { for j in 0..d { @@ -71,7 +73,7 @@ pub fn generate(t: usize) -> SquareMatrix { #[cfg(test)] mod tests { - use ark_ed_on_bls12_377::Fq; + use decaf377::Fq; use super::*; diff --git a/poseidon-paramgen/src/v2/internal.rs b/poseidon-paramgen/src/v2/internal.rs index 91d8854..f328f11 100644 --- a/poseidon-paramgen/src/v2/internal.rs +++ b/poseidon-paramgen/src/v2/internal.rs @@ -5,7 +5,9 @@ use poseidon_parameters::v2::{SquareMatrix, SquareMatrixOperations}; /// /// This matrix needs to be invertible, and no arbitrarily long /// subspace trails should exist. -pub fn generate(t: usize) -> SquareMatrix { +pub fn generate( + t: usize, +) -> SquareMatrix { let M_i: SquareMatrix; if t == 2 { diff --git a/poseidon-permutation/CHANGELOG.md b/poseidon-permutation/CHANGELOG.md index 92329ac..37dadee 100644 --- a/poseidon-permutation/CHANGELOG.md +++ b/poseidon-permutation/CHANGELOG.md @@ -19,3 +19,7 @@ # 0.5.0 * Fix: Removing unnecessary debug output. + +# 1.0.0 + +* Remove Arkworks requirement \ No newline at end of file diff --git a/poseidon-permutation/Cargo.toml b/poseidon-permutation/Cargo.toml index 6f3f0b8..1bb54f5 100644 --- a/poseidon-permutation/Cargo.toml +++ b/poseidon-permutation/Cargo.toml @@ -1,25 +1,27 @@ [package] name = "poseidon-permutation" -version = "0.5.0" +version = "1.0.0" edition = "2018" authors = ["Penumbra ", "redshiftzero "] -description = "An instantiation of the Poseidon permutation" +description = "An instantiation of the Poseidon permutation for decaf377" license = "MIT OR Apache-2.0" repository = "https://github.com/penumbra-zone/poseidon377" [dependencies] -ark-ff = { version = "0.4", default-features = false } -ark-std = { version = "^0.4.0", default-features = false } +decaf377 = { version="0.9", default-features = false } +ark-ff = { version = "0.4", default-features = false, optional=true } +ark-std = { version = "^0.4.0", default-features = false, optional=true } ark-r1cs-std = {version = "0.4", default-features = false, optional=true } ark-relations = { version="0.4", default-features = false, optional=true } -poseidon-parameters = { path = "../poseidon-parameters", default-features = false, version = "0.4" } +poseidon-parameters = { path = "../poseidon-parameters", default-features = false, version = "1.0" } [features] default = ["std"] -r1cs = ["ark-r1cs-std", "ark-relations"] +r1cs = ["std", "ark-ff/std", "ark-r1cs-std", "ark-relations", "decaf377/r1cs"] std = [ "ark-ff/std", "ark-std/std", "poseidon-parameters/std", + "decaf377/std", ] diff --git a/poseidon-permutation/src/permutation.rs b/poseidon-permutation/src/permutation.rs index fad249f..a3c1c70 100644 --- a/poseidon-permutation/src/permutation.rs +++ b/poseidon-permutation/src/permutation.rs @@ -1,40 +1,85 @@ #![allow(non_snake_case)] -use ark_ff::PrimeField; -use ark_std::{vec, vec::Vec}; +use decaf377::Fq; use poseidon_parameters::v1::{Alpha, MatrixOperations, PoseidonParameters}; /// Represents a generic instance of `Poseidon`. /// /// Intended for generic fixed-width hashing. -pub struct Instance<'a, F: PrimeField> { +pub struct Instance< + 'a, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, + const NUM_PARTIAL_ROUNDS: usize, +> { /// Parameters for this instance of Poseidon. - parameters: &'a PoseidonParameters, + parameters: &'a PoseidonParameters< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, + NUM_PARTIAL_ROUNDS, + >, /// Inner state. - state_words: Vec, + state_words: [Fq; STATE_SIZE], } -impl<'a, F: PrimeField> Instance<'a, F> { - /// Instantiate a new hash function over GF(p) given `Parameters`. - pub fn new(parameters: &'a PoseidonParameters) -> Self { - let t = parameters.t; +impl< + 'a, + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, + const NUM_PARTIAL_ROUNDS: usize, + > + Instance< + 'a, + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, + NUM_PARTIAL_ROUNDS, + > +{ + /// Instantiate a new hash function over Fq given `Parameters`. + pub fn new( + parameters: &'a PoseidonParameters< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, + NUM_PARTIAL_ROUNDS, + >, + ) -> Self { Self { parameters, - state_words: vec![F::zero(); t], + state_words: [Fq::from(0u64); STATE_SIZE], } } /// Fixed width hash from n:1. Outputs a F given `t` input words. - pub fn n_to_1_fixed_hash(&mut self, input_words: Vec) -> F { - // Check input words are `t` elements long - if input_words.len() != self.parameters.t { - panic!("err: input words must be t elements long") - } - + pub fn n_to_1_fixed_hash(&mut self, input_words: &[Fq; STATE_SIZE]) -> Fq { // Set internal state words. - for (i, input_word) in input_words.into_iter().enumerate() { - self.state_words[i] = input_word + for (i, input_word) in input_words.iter().enumerate() { + self.state_words[i] = *input_word } // Apply Poseidon permutation. @@ -45,8 +90,8 @@ impl<'a, F: PrimeField> Instance<'a, F> { } /// Print out internal state. - pub fn output_words(&self) -> Vec { - self.state_words.clone() + pub fn output_words(&self) -> [Fq; STATE_SIZE] { + self.state_words } /// Permutes the internal state. @@ -59,7 +104,7 @@ impl<'a, F: PrimeField> Instance<'a, F> { // First chunk of full rounds for r in 0..R_f { // Apply `AddRoundConstants` layer - for i in 0..self.parameters.t { + for i in 0..STATE_SIZE { self.state_words[i] += self.parameters.optimized_arc.0.get_element(r, i); } self.full_sub_words(); @@ -69,7 +114,7 @@ impl<'a, F: PrimeField> Instance<'a, F> { // Partial rounds // First part of `AddRoundConstants` layer - for i in 0..self.parameters.t { + for i in 0..STATE_SIZE { self.state_words[i] += self .parameters .optimized_arc @@ -99,7 +144,7 @@ impl<'a, F: PrimeField> Instance<'a, F> { // Final full rounds for _ in 0..R_f { // Apply `AddRoundConstants` layer - for i in 0..self.parameters.t { + for i in 0..STATE_SIZE { self.state_words[i] += self .parameters .optimized_arc @@ -113,15 +158,10 @@ impl<'a, F: PrimeField> Instance<'a, F> { } /// Fixed width hash from n:1. Outputs a F given `t` input words. Unoptimized. - pub fn unoptimized_n_to_1_fixed_hash(&mut self, input_words: Vec) -> F { - // Check input words are `t` elements long - if input_words.len() != self.parameters.t { - panic!("err: input words must be t elements long") - } - + pub fn unoptimized_n_to_1_fixed_hash(&mut self, input_words: [Fq; STATE_SIZE]) -> Fq { // Set internal state words. - for (i, input_word) in input_words.into_iter().enumerate() { - self.state_words[i] = input_word + for (i, input_word) in input_words.iter().enumerate() { + self.state_words[i] = *input_word } // Apply Poseidon permutation. @@ -139,13 +179,12 @@ impl<'a, F: PrimeField> Instance<'a, F> { let R_f = self.parameters.rounds.full() / 2; let R_P = self.parameters.rounds.partial(); let mut round_constants_counter = 0; - let t = self.parameters.t; - let round_constants = self.parameters.arc.elements().clone(); + let round_constants = self.parameters.arc.elements(); // First full rounds for _ in 0..R_f { // Apply `AddRoundConstants` layer - for i in 0..t { + for i in 0..STATE_SIZE { self.state_words[i] += round_constants[round_constants_counter]; round_constants_counter += 1; } @@ -156,7 +195,7 @@ impl<'a, F: PrimeField> Instance<'a, F> { // Partial rounds for _ in 0..R_P { // Apply `AddRoundConstants` layer - for i in 0..t { + for i in 0..STATE_SIZE { self.state_words[i] += round_constants[round_constants_counter]; round_constants_counter += 1; } @@ -167,7 +206,7 @@ impl<'a, F: PrimeField> Instance<'a, F> { // Final full rounds for _ in 0..R_f { // Apply `AddRoundConstants` layer - for i in 0..t { + for i in 0..STATE_SIZE { self.state_words[i] += round_constants[round_constants_counter]; round_constants_counter += 1; } @@ -179,8 +218,8 @@ impl<'a, F: PrimeField> Instance<'a, F> { /// Applies the partial `SubWords` layer. fn partial_sub_words(&mut self) { match self.parameters.alpha { - Alpha::Exponent(exp) => self.state_words[0] = (self.state_words[0]).pow([exp as u64]), - Alpha::Inverse => self.state_words[0] = F::one() / self.state_words[0], + Alpha::Exponent(exp) => self.state_words[0] = (self.state_words[0]).power([exp as u64]), + Alpha::Inverse => self.state_words[0] = Fq::from(1u64) / self.state_words[0], } } @@ -188,61 +227,59 @@ impl<'a, F: PrimeField> Instance<'a, F> { fn full_sub_words(&mut self) { match self.parameters.alpha { Alpha::Exponent(exp) => { - self.state_words = self - .state_words - .iter() - .map(|x| x.pow([exp as u64])) - .collect() + for i in 0..STATE_SIZE { + self.state_words[i] = self.state_words[i].power([exp as u64]); + } } Alpha::Inverse => { - self.state_words = self.state_words.iter().map(|x| F::one() / x).collect() + for i in 0..STATE_SIZE { + self.state_words[i] = Fq::from(1u64) / self.state_words[i]; + } } } } /// Applies the `MixLayer` using the M_i matrix. fn mix_layer_mi(&mut self) { - self.state_words = self - .parameters - .optimized_mds - .M_i - .iter_rows() - .map(|row| { - row.iter() - .zip(&self.state_words) - .map(|(x, y)| *x * *y) - .sum() - }) - .collect(); + let mut new_state_words = [Fq::from(0u64); STATE_SIZE]; + for (i, row) in self.parameters.optimized_mds.M_i.iter_rows().enumerate() { + let sum = row + .iter() + .zip(&self.state_words) + .map(|(x, y)| *x * *y) + .sum(); + new_state_words[i] = sum; + } + self.state_words = new_state_words; } /// Applies the `MixLayer` using the MDS matrix. fn mix_layer_mds(&mut self) { - self.state_words = self - .parameters - .mds - .0 - .0 - .iter_rows() - .map(|row| { - row.iter() - .zip(&self.state_words) - .map(|(x, y)| *x * *y) - .sum() - }) - .collect(); + let mut new_state_words = [Fq::from(0u64); STATE_SIZE]; + + for (i, row) in self.parameters.mds.0 .0.iter_rows().enumerate() { + let sum = row + .iter() + .zip(&self.state_words) + .map(|(x, y)| *x * *y) + .sum(); + new_state_words[i] = sum; + } + self.state_words = new_state_words; } /// This is `cheap_matrix_mul` in the Sage spec fn sparse_mat_mul(&mut self, round_number: usize) { // mul_row = [(state_words[0] * v[i]) for i in range(0, t-1)] // add_row = [(mul_row[i] + state_words[i+1]) for i in range(0, t-1)] - let add_row: Vec = self.parameters.optimized_mds.v_collection[round_number] + let mut add_row = [Fq::from(0u64); STATE_SIZE_MINUS_1]; + for (i, x) in self.parameters.optimized_mds.v_collection[round_number] .elements .iter() .enumerate() - .map(|(i, x)| *x * self.state_words[0] + self.state_words[i + 1]) - .collect(); + { + add_row[i] = *x * self.state_words[0] + self.state_words[i + 1]; + } // column_1 = [M_0_0] + w_hat // state_words_new[0] = sum([column_1[i] * state_words[i] for i in range(0, t)]) @@ -251,10 +288,10 @@ impl<'a, F: PrimeField> Instance<'a, F> { + self.parameters.optimized_mds.w_hat_collection[round_number] .elements .iter() - .zip(self.state_words[1..self.parameters.t].iter()) + .zip(self.state_words[1..STATE_SIZE].iter()) .map(|(x, y)| *x * *y) - .sum::(); + .sum::(); - self.state_words[1..self.parameters.t].copy_from_slice(&add_row[..(self.parameters.t - 1)]); + self.state_words[1..STATE_SIZE].copy_from_slice(&add_row[..(STATE_SIZE - 1)]); } } diff --git a/poseidon-permutation/src/r1cs.rs b/poseidon-permutation/src/r1cs.rs index d09e3aa..71b3a59 100644 --- a/poseidon-permutation/src/r1cs.rs +++ b/poseidon-permutation/src/r1cs.rs @@ -1,44 +1,83 @@ #![allow(non_snake_case)] -use ark_ff::PrimeField; use ark_std::vec::Vec; use ark_r1cs_std::{fields::fp::FpVar, prelude::*}; use ark_relations::r1cs::ConstraintSystemRef; +use decaf377::Fq; use poseidon_parameters::v1::{Alpha, MatrixOperations, PoseidonParameters}; /// Represents a Poseidon permutation instance. -pub struct InstanceVar { +pub struct InstanceVar< + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, + const NUM_PARTIAL_ROUNDS: usize, +> { /// Parameters for this instance of Poseidon. - pub parameters: PoseidonParameters, + pub parameters: PoseidonParameters< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, + NUM_PARTIAL_ROUNDS, + >, /// Constraint system - pub cs: ConstraintSystemRef, + pub cs: ConstraintSystemRef, /// Current state - pub state_words: Vec>, + pub state_words: Vec>, } -impl InstanceVar -where - F: PrimeField, +impl< + const STATE_SIZE: usize, + const STATE_SIZE_MINUS_1: usize, + const NUM_MDS_ELEMENTS: usize, + const NUM_STATE_SIZE_MINUS_1_ELEMENTS: usize, + const NUM_ROUND_ROWS: usize, + const NUM_ROUND_COLS: usize, + const NUM_ROUND_ELEMENTS: usize, + const NUM_PARTIAL_ROUNDS: usize, + > + InstanceVar< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, + NUM_PARTIAL_ROUNDS, + > { - /// Fixed width hash from n:1. Outputs a F given `t` input words. + /// Fixed width hash from n:1. Outputs a Fq given `t` input words. pub fn n_to_1_fixed_hash( - parameters: PoseidonParameters, - cs: ConstraintSystemRef, - input_words: Vec>, - ) -> FpVar { - // Check input words are `t` elements long - if input_words.len() != parameters.t { - panic!("err: input words must be t elements long") - } - + parameters: PoseidonParameters< + STATE_SIZE, + STATE_SIZE_MINUS_1, + NUM_MDS_ELEMENTS, + NUM_STATE_SIZE_MINUS_1_ELEMENTS, + NUM_ROUND_ROWS, + NUM_ROUND_COLS, + NUM_ROUND_ELEMENTS, + NUM_PARTIAL_ROUNDS, + >, + cs: ConstraintSystemRef, + input_words: [FpVar; STATE_SIZE], + ) -> FpVar { // t = rate + capacity let mut instance = InstanceVar { parameters, cs, - state_words: input_words, + state_words: input_words.to_vec(), }; // Apply Poseidon permutation. @@ -53,13 +92,12 @@ where let R_f = self.parameters.rounds.full() / 2; let R_P = self.parameters.rounds.partial(); let mut round_constants_counter = 0; - let t = self.parameters.t; - let round_constants = self.parameters.arc.elements().clone(); + let round_constants: [Fq; NUM_ROUND_ELEMENTS] = self.parameters.arc.inner_elements(); // First full rounds for _ in 0..R_f { // Apply `AddRoundConstants` layer - for i in 0..t { + for i in 0..STATE_SIZE { self.state_words[i] += round_constants[round_constants_counter]; round_constants_counter += 1; } @@ -70,7 +108,7 @@ where // Partial rounds for _ in 0..R_P { // Apply `AddRoundConstants` layer - for i in 0..t { + for i in 0..STATE_SIZE { self.state_words[i] += round_constants[round_constants_counter]; round_constants_counter += 1; } @@ -81,7 +119,7 @@ where // Final full rounds for _ in 0..R_f { // Apply `AddRoundConstants` layer - for i in 0..t { + for i in 0..STATE_SIZE { self.state_words[i] += round_constants[round_constants_counter]; round_constants_counter += 1; } @@ -106,7 +144,7 @@ where fn full_sub_words(&mut self) { match self.parameters.alpha { Alpha::Exponent(exp) => { - for i in 0..self.parameters.t { + for i in 0..STATE_SIZE { self.state_words[i] = (self.state_words[i]) .pow_by_constant([exp as u64]) .expect("can compute pow"); @@ -127,11 +165,11 @@ where .0 .iter_rows() .map(|row| { - let temp_vec: Vec> = row + let temp_vec: Vec> = row .iter() .zip(&self.state_words) .map(|(x, y)| { - FpVar::::new_constant(self.cs.clone(), x).expect("can create constant") + FpVar::::new_constant(self.cs.clone(), x).expect("can create constant") * y }) .collect(); diff --git a/poseidon-tests/Cargo.toml b/poseidon-tests/Cargo.toml new file mode 100644 index 0000000..044cefb --- /dev/null +++ b/poseidon-tests/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "poseidon-tests" +version = "0.3.0" +edition = "2018" +authors = ["Penumbra ", "redshiftzero "] +description = "Common tests for penumbra's poseidon implementation" +license = "MIT OR Apache-2.0" +repository = "https://github.com/penumbra-zone/poseidon377" + +[dependencies] +poseidon-parameters = { path = "../poseidon-parameters", default-features = false } +#poseidon-paramgen = { path = "../poseidon-paramgen", default-features = false } +poseidon-permutation = { path="../poseidon-permutation", default-features = false } +decaf377 = { version="0.9", default-features = false } +poseidon377 = { path="../poseidon377", features = ["r1cs"] } + +[dev-dependencies] +ark-ff = { version = "^0.4.0", default-features = false } +ark-ed-on-bls12-377 = { version="0.4", default-features = false } +proptest = "1" +ark-ed-on-bls12-381 = "0.4" +rand_core = { version = "0.6.3", default-features=false } +rand_chacha = "0.3" +ark-groth16 = { version = "0.4", default-features = false } +ark-r1cs-std = {version = "0.4", default-features = false } +ark-relations = { version="0.4", default-features = false } +ark-snark = { version = "0.4", default-features = false } +ark-ec = { version = "0.4", default_features = false } +ark-std = { version = "0.4", default-features = false } +ark-serialize = { version = "0.4", default_features = false } \ No newline at end of file diff --git a/poseidon-parameters/src/tests.rs b/poseidon-tests/tests/parameters.rs similarity index 52% rename from poseidon-parameters/src/tests.rs rename to poseidon-tests/tests/parameters.rs index 76bb50a..4c8539f 100644 --- a/poseidon-parameters/src/tests.rs +++ b/poseidon-tests/tests/parameters.rs @@ -1,58 +1,52 @@ -use ark_ed_on_bls12_377::Fq; -use ark_ff::{vec, One, PrimeField, Zero}; +use decaf377::Fq; use proptest::prelude::*; -use v1::Matrix; -use super::*; - -use crate::matrix_ops::mat_mul; -use crate::matrix_ops::MatrixOperations; -use crate::{matrix::SquareMatrix, matrix_ops::SquareMatrixOperations}; +use poseidon_parameters::v1::{mat_mul, square_mat_mul}; +use poseidon_parameters::v1::{Matrix, MatrixOperations}; +use poseidon_parameters::v1::{SquareMatrix, SquareMatrixOperations}; #[test] fn identity_matrix() { - let identity = SquareMatrix::::identity(2); - assert_eq!(identity.get_element(0, 0), Fq::one()); - assert_eq!(identity.get_element(0, 1), Fq::zero()); - assert_eq!(identity.get_element(1, 1), Fq::one()); - assert_eq!(identity.get_element(1, 0), Fq::zero()); + let identity = SquareMatrix::<2, 4>::identity(); + assert_eq!(identity.get_element(0, 0), Fq::from(1u64)); + assert_eq!(identity.get_element(0, 1), Fq::from(0u64)); + assert_eq!(identity.get_element(1, 1), Fq::from(1u64)); + assert_eq!(identity.get_element(1, 0), Fq::from(0u64)); } #[test] fn square_matmul() { - let identity = SquareMatrix::::identity(2); + let identity = SquareMatrix::<2, 4>::identity(); - let matrix_2x2 = SquareMatrix::from_vec(vec![ - Fq::one(), + let elements = &[ + Fq::from(1u64), Fq::from(2u64), Fq::from(3u64), Fq::from(4u64), - ]); + ]; + let matrix_2x2 = SquareMatrix::<2, 4>::new(elements); - let res = mat_mul(&matrix_2x2, &identity).unwrap(); - assert_eq!(res.get_element(0, 0), Fq::one()); + let res: SquareMatrix<2, 4> = square_mat_mul(&matrix_2x2, &identity); + assert_eq!(res.get_element(0, 0), Fq::from(1u64)); assert_eq!(res.get_element(0, 1), Fq::from(2u64)); assert_eq!(res.get_element(1, 0), Fq::from(3u64)); assert_eq!(res.get_element(1, 1), Fq::from(4u64)); } #[test] -fn nonsquare_matmul() { - let test_elements = vec![ - Fq::one(), +fn nonsquare_matmul_happy() { + let test_elements = &[ + Fq::from(1u64), Fq::from(2u64), Fq::from(3u64), Fq::from(4u64), Fq::from(5u64), Fq::from(6u64), ]; - let matrix_2x3 = Matrix::new(3, 2, test_elements); - - let res = mat_mul(&matrix_2x3, &matrix_2x3); - assert!(res.is_err()); + let matrix_2x3 = Matrix::<3, 2, 6>::new(test_elements); let matrix_3x2 = matrix_2x3.transpose(); - let res = mat_mul(&matrix_2x3, &matrix_3x2).expect("is ok"); + let res: Matrix<3, 3, 9> = mat_mul(&matrix_2x3, &matrix_3x2); assert_eq!(res.get_element(0, 0), Fq::from(5u64)); assert_eq!(res.get_element(0, 1), Fq::from(11u64)); assert_eq!(res.get_element(0, 2), Fq::from(17u64)); @@ -66,17 +60,17 @@ fn nonsquare_matmul() { #[test] fn hadamard_product() { - let test_elements = vec![ - Fq::one(), + let test_elements: [Fq; 6] = [ + Fq::from(1u64), Fq::from(2u64), Fq::from(3u64), Fq::from(4u64), Fq::from(5u64), Fq::from(6u64), ]; - let matrix_2x3 = Matrix::new(3, 2, test_elements); + let matrix_3x2 = Matrix::<3, 2, 6>::new(&test_elements); - let res = matrix_2x3.hadamard_product(&matrix_2x3).expect("is ok"); + let res = matrix_3x2.hadamard_product(&matrix_3x2).expect("is ok"); assert_eq!(res.get_element(0, 0), Fq::from(1u64)); assert_eq!(res.get_element(0, 1), Fq::from(4u64)); assert_eq!(res.get_element(1, 0), Fq::from(9u64)); @@ -87,18 +81,15 @@ fn hadamard_product() { #[test] fn transpose() { - let matrix_2x3 = Matrix::new( - 3, - 2, - vec![ - Fq::one(), - Fq::from(2u64), - Fq::from(3u64), - Fq::from(4u64), - Fq::from(5u64), - Fq::from(6u64), - ], - ); + let test_elements = &[ + Fq::from(1u64), + Fq::from(2u64), + Fq::from(3u64), + Fq::from(4u64), + Fq::from(5u64), + Fq::from(6u64), + ]; + let matrix_2x3 = Matrix::<3, 2, 6>::new(test_elements); assert_eq!(matrix_2x3.get_element(0, 1), Fq::from(2u64)); assert_eq!(matrix_2x3.get_element(1, 0), Fq::from(3u64)); assert_eq!(matrix_2x3.get_element(1, 1), Fq::from(4u64)); @@ -111,15 +102,16 @@ fn transpose() { assert_eq!(res.get_element(0, 2), Fq::from(5u64)); assert_eq!(res.get_element(1, 2), Fq::from(6u64)); - let matrix_2x2 = SquareMatrix::from_vec(vec![ - Fq::one(), + let test_elements = &[ + Fq::from(1u64), Fq::from(2u64), Fq::from(3u64), Fq::from(4u64), - ]); + ]; + let matrix_2x2 = SquareMatrix::<2, 4>::new(test_elements); let res = matrix_2x2.transpose(); - assert_eq!(res.get_element(0, 0), Fq::one()); + assert_eq!(res.get_element(0, 0), Fq::from(1u64)); assert_eq!(res.get_element(0, 1), Fq::from(3u64)); assert_eq!(res.get_element(1, 0), Fq::from(2u64)); assert_eq!(res.get_element(1, 1), Fq::from(4u64)); @@ -127,18 +119,24 @@ fn transpose() { #[test] fn cofactors() { - let identity_1x1 = SquareMatrix::::identity(1); - let expected_res = SquareMatrix::::from_vec(vec![Fq::one()]); + let identity_1x1 = SquareMatrix::<1, 1>::identity(); + let test_elements = &[Fq::from(1u64)]; + let expected_res = SquareMatrix::new(test_elements); assert_eq!(identity_1x1.cofactors(), expected_res); - let identity_2x2 = SquareMatrix::::identity(2); - let expected_res = - SquareMatrix::::from_vec(vec![Fq::one(), -Fq::one(), -Fq::one(), Fq::one()]); + let identity_2x2 = SquareMatrix::<2, 4>::identity(); + let test_elements = &[ + Fq::from(1u64), + -Fq::from(1u64), + -Fq::from(1u64), + Fq::from(1u64), + ]; + let expected_res = SquareMatrix::new(test_elements); assert_eq!(identity_2x2.cofactors(), expected_res); } fn fq_strategy() -> BoxedStrategy { - any::<[u8; 32]>() + any::<[u8; 16]>() .prop_map(|bytes| Fq::from_le_bytes_mod_order(&bytes[..])) .boxed() } @@ -146,26 +144,24 @@ fn fq_strategy() -> BoxedStrategy { proptest! { #[test] fn inverse_2x2(a in fq_strategy(), b in fq_strategy(), c in fq_strategy(), d in fq_strategy()) { - let matrix_2x2 = SquareMatrix::::from_vec(vec![ - a,b,c,d - ]); + let matrix_2x2 = SquareMatrix::<2, 4>::new(&[a, b, c, d]); let res = matrix_2x2.inverse().unwrap(); - assert_eq!(mat_mul(&matrix_2x2, &res).unwrap(), SquareMatrix::::identity(2)); + assert_eq!(square_mat_mul(&matrix_2x2, &res), SquareMatrix::<2, 4>::identity()); } } #[test] fn inverse() { - let matrix_1x1 = SquareMatrix::::from_vec(vec![Fq::from(2u64)]); + let matrix_1x1 = SquareMatrix::<1, 1>::new(&[Fq::from(2u64)]); let res = matrix_1x1.inverse().unwrap(); assert_eq!( - mat_mul(&matrix_1x1, &res).unwrap(), - SquareMatrix::identity(1) + square_mat_mul(&matrix_1x1, &res), + SquareMatrix::<1, 1>::identity() ); - let matrix_2x2 = SquareMatrix::from_vec(vec![ - Fq::one(), + let matrix_2x2 = SquareMatrix::<2, 4>::new(&[ + Fq::from(1u64), Fq::from(2u64), Fq::from(3u64), Fq::from(4u64), @@ -173,14 +169,14 @@ fn inverse() { let res = matrix_2x2.inverse().unwrap(); assert_eq!( - mat_mul(&matrix_2x2, &res).unwrap(), - SquareMatrix::identity(2) + square_mat_mul(&matrix_2x2, &res), + SquareMatrix::<2, 4>::identity() ); - let identity_3x3 = SquareMatrix::::identity(3); + let identity_3x3 = SquareMatrix::<3, 9>::identity(); assert_eq!(identity_3x3, identity_3x3.inverse().unwrap()); - let matrix_3x3 = SquareMatrix::from_vec(vec![ + let matrix_3x3 = SquareMatrix::<3, 9>::new(&[ Fq::from(3u64), Fq::from(0u64), Fq::from(2u64), @@ -193,10 +189,11 @@ fn inverse() { ]); let res = matrix_3x3.inverse().unwrap(); assert_eq!( - mat_mul(&matrix_3x3, &res).unwrap(), - SquareMatrix::identity(3) + square_mat_mul(&matrix_3x3, &res), + SquareMatrix::<3, 9>::identity() ); - let expected_res = SquareMatrix::from_vec(vec![ + + let expected_res = SquareMatrix::<3, 9>::new(&[ Fq::from(2u64), Fq::from(2u64), Fq::from(0u64), @@ -206,36 +203,32 @@ fn inverse() { Fq::from(2u64), -Fq::from(3u64), Fq::from(0u64), - ]) * (Fq::one() / Fq::from(10u64)); + ]) * (Fq::from(1u64) / Fq::from(10u64)); assert_eq!(res, expected_res); } #[test] -fn create_matrix_from_vec() { - let matrix_2x2 = SquareMatrix::from_vec(vec![ - Fq::one(), +fn create_matrix_from_array() { + let matrix_2x2 = SquareMatrix::<2, 4>::new(&[ + Fq::from(1u64), Fq::from(2u64), Fq::from(3u64), Fq::from(4u64), ]); - assert_eq!(matrix_2x2.get_element(0, 0), Fq::one()); + assert_eq!(matrix_2x2.get_element(0, 0), Fq::from(1u64)); assert_eq!(matrix_2x2.get_element(0, 1), Fq::from(2u64)); assert_eq!(matrix_2x2.get_element(1, 0), Fq::from(3u64)); assert_eq!(matrix_2x2.get_element(1, 1), Fq::from(4u64)); - let matrix_2x3 = Matrix::new( - 2, - 3, - vec![ - Fq::one(), - Fq::from(2u64), - Fq::from(3u64), - Fq::from(4u64), - Fq::from(5u64), - Fq::from(6u64), - ], - ); - assert_eq!(matrix_2x3.get_element(0, 0), Fq::one()); + let matrix_2x3 = Matrix::<2, 3, 6>::new(&[ + Fq::from(1u64), + Fq::from(2u64), + Fq::from(3u64), + Fq::from(4u64), + Fq::from(5u64), + Fq::from(6u64), + ]); + assert_eq!(matrix_2x3.get_element(0, 0), Fq::from(1u64)); assert_eq!(matrix_2x3.get_element(0, 1), Fq::from(2u64)); assert_eq!(matrix_2x3.get_element(0, 2), Fq::from(3u64)); assert_eq!(matrix_2x3.get_element(1, 0), Fq::from(4u64)); @@ -245,14 +238,14 @@ fn create_matrix_from_vec() { #[test] fn determinant() { - let matrix_1x1 = SquareMatrix::from_vec(vec![Fq::one()]); - assert_eq!(matrix_1x1.determinant(), Fq::one()); + let matrix_1x1 = SquareMatrix::<1, 1>::new(&[Fq::from(1u64)]); + assert_eq!(matrix_1x1.determinant(), Fq::from(1u64)); - let a = Fq::one(); - let b = Fq::one() + Fq::one(); + let a = Fq::from(1u64); + let b = Fq::from(1u64) + Fq::from(1u64); let c = Fq::from(3u64); let d = Fq::from(4u64); - let matrix_2x2 = SquareMatrix::from_vec(vec![a, b, c, d]); + let matrix_2x2 = SquareMatrix::<2, 4>::new(&[a, b, c, d]); assert_eq!(matrix_2x2.determinant(), -Fq::from(2u64)); let e = Fq::from(5u64); @@ -260,12 +253,33 @@ fn determinant() { let g = Fq::from(7u64); let h = Fq::from(8u64); let i = Fq::from(9u64); - let matrix_3x3 = SquareMatrix::from_vec(vec![a, b, c, d, e, f, g, h, i]); + let matrix_3x3 = SquareMatrix::<3, 9>::new(&[a, b, c, d, e, f, g, h, i]); assert_eq!(matrix_3x3.determinant(), Fq::from(0u64)); let elem = Fq::from(10u64); - let matrix_4x4 = SquareMatrix::from_vec(vec![ + let matrix_4x4 = SquareMatrix::<4, 16>::new(&[ a, b, c, d, e, f, g, h, i, elem, elem, elem, elem, elem, elem, elem, ]); assert_eq!(matrix_4x4.determinant(), Fq::from(0u64)); + + let matrix_5x5 = SquareMatrix::<5, 25>::new(&[ + a, b, c, d, e, f, g, h, i, elem, elem, elem, elem, elem, elem, elem, elem, elem, elem, + elem, elem, elem, elem, elem, elem, + ]); + assert_eq!(matrix_5x5.determinant(), Fq::from(0u64)); + + let mut elements = vec![a, b, c, d, e, f, g, h, i]; + elements.extend_from_slice(&[elem; 27]); + let matrix_6x6 = SquareMatrix::<6, 36>::new(&elements[..]); + assert_eq!(matrix_6x6.determinant(), Fq::from(0u64)); + + let mut elements = vec![a, b, c, d, e, f, g, h, i]; + elements.extend_from_slice(&[elem; 40]); + let matrix_7x7 = SquareMatrix::<7, 49>::new(&elements[..]); + assert_eq!(matrix_7x7.determinant(), Fq::from(0u64)); + + let mut elements = vec![a, b, c, d, e, f, g, h, i]; + elements.extend_from_slice(&[elem; 55]); + let matrix_8x8 = SquareMatrix::<8, 64>::new(&elements[..]); + assert_eq!(matrix_8x8.determinant(), Fq::from(0u64)); } diff --git a/poseidon377/tests/r1cs.rs b/poseidon-tests/tests/poseidon377_r1cs.rs similarity index 94% rename from poseidon377/tests/r1cs.rs rename to poseidon-tests/tests/poseidon377_r1cs.rs index f68f2f1..8eaaaa0 100644 --- a/poseidon377/tests/r1cs.rs +++ b/poseidon-tests/tests/poseidon377_r1cs.rs @@ -1,4 +1,3 @@ -use ark_ff::{One, PrimeField, Zero}; use ark_groth16::{r1cs_to_qap::LibsnarkReduction, Groth16, ProvingKey, VerifyingKey}; use ark_r1cs_std::prelude::{AllocVar, EqGadget}; use ark_relations::r1cs::{ConstraintSynthesizer, ToConstraintField}; @@ -7,12 +6,16 @@ use decaf377::{ r1cs::{CountConstraints, FqVar}, Bls12_377, Fq, }; -use once_cell::sync::Lazy; use proptest::prelude::*; use rand_core::OsRng; // This is a domain separator we'll use as a constant in our circuits below. -static DOMAIN_SEP: Lazy = Lazy::new(|| Fq::from(666)); +const DOMAIN_SEP: Fq = Fq::from_montgomery_limbs([ + 15545862963729521748, + 8301038308012579564, + 6940338389606830037, + 431207966161902270, +]); /// The maximum fixed-width Poseidon hash exposed to downstream users of this crate. const MAX_WIDTH_POSEIDON_HASH: usize = 7; @@ -49,7 +52,7 @@ impl ConstraintSynthesizer for PreimageCircuit { preimage_vars.push(preimage_var); } - let domain_separator_var = FqVar::new_constant(cs.clone(), *DOMAIN_SEP)?; + let domain_separator_var = FqVar::new_constant(cs.clone(), DOMAIN_SEP)?; // Add all public inputs let mut hash_output_vars = Vec::new(); for hash_output in self.hash_outputs { @@ -141,8 +144,8 @@ impl ConstraintSynthesizer for PreimageCircuit { impl PreimageCircuit { fn generate_test_parameters() -> (ProvingKey, VerifyingKey) { let circuit = PreimageCircuit { - preimages: [Fq::from(2); MAX_WIDTH_POSEIDON_HASH], - hash_outputs: [Fq::from(2); MAX_WIDTH_POSEIDON_HASH], + preimages: [Fq::from(2u64); MAX_WIDTH_POSEIDON_HASH], + hash_outputs: [Fq::from(2u64); MAX_WIDTH_POSEIDON_HASH], }; let (pk, vk) = Groth16::::circuit_specific_setup(circuit, &mut OsRng) @@ -165,7 +168,7 @@ fn groth16_hash_proof_happy_path(v1 in fq_strategy(), v2 in fq_strategy(), v3 in let mut rng = OsRng; let preimages = [v1, v2, v3, v4, v5, v6, v7]; - let mut hash_outputs = [Fq::zero(); MAX_WIDTH_POSEIDON_HASH]; + let mut hash_outputs = [Fq::from(0u64); MAX_WIDTH_POSEIDON_HASH]; hash_outputs[0] = poseidon377::hash_1(&DOMAIN_SEP, preimages[0]); hash_outputs[1] = poseidon377::hash_2(&DOMAIN_SEP, (preimages[0], preimages[1])); hash_outputs[2] = poseidon377::hash_3(&DOMAIN_SEP, (preimages[0], preimages[1], preimages[2])); @@ -198,7 +201,7 @@ fn groth16_hash_proof_unhappy_path(v1 in fq_strategy(), v2 in fq_strategy(), v3 let mut rng = OsRng; let preimages = [v1, v2, v3, v4, v5, v6, v7]; - let mut hash_outputs = [Fq::zero(); MAX_WIDTH_POSEIDON_HASH]; + let mut hash_outputs = [Fq::from(0u64); MAX_WIDTH_POSEIDON_HASH]; hash_outputs[0] = poseidon377::hash_1(&DOMAIN_SEP, preimages[0]); hash_outputs[1] = poseidon377::hash_2(&DOMAIN_SEP, (preimages[0], preimages[1])); hash_outputs[2] = poseidon377::hash_3(&DOMAIN_SEP, (preimages[0], preimages[1], preimages[2])); @@ -215,7 +218,7 @@ fn groth16_hash_proof_unhappy_path(v1 in fq_strategy(), v2 in fq_strategy(), v3 // Verifier POV let processed_pvk = Groth16::::process_vk(&vk).expect("can process verifying key"); - let public_inputs = [(hash_outputs[0] + Fq::one()); MAX_WIDTH_POSEIDON_HASH].to_field_elements().unwrap(); + let public_inputs = [(hash_outputs[0] + Fq::from(1u64)); MAX_WIDTH_POSEIDON_HASH].to_field_elements().unwrap(); let proof_result = Groth16::::verify_with_processed_vk(&processed_pvk, &public_inputs, &proof).unwrap(); diff --git a/poseidon377/CHANGELOG.md b/poseidon377/CHANGELOG.md index f8d34b0..9942b95 100644 --- a/poseidon377/CHANGELOG.md +++ b/poseidon377/CHANGELOG.md @@ -22,3 +22,7 @@ # 0.6.0 * Use `poseidon-permutation` version 0.5.0 to avoid spurious debug output. + +# 1.0.0 + +* Remove Arkworks requirement \ No newline at end of file diff --git a/poseidon377/Cargo.toml b/poseidon377/Cargo.toml index 559fdb9..37a5173 100644 --- a/poseidon377/Cargo.toml +++ b/poseidon377/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "poseidon377" -version = "0.6.0" +version = "1.0.0" edition = "2018" authors = ["Penumbra ", "redshiftzero "] description = "An instantiation of the Poseidon hash for use with decaf377." @@ -8,46 +8,36 @@ license = "MIT OR Apache-2.0" repository = "https://github.com/penumbra-zone/poseidon377" [dependencies] -ark-ff = { version = "0.4", default-features = false } +decaf377 = { version="0.9", default-features = false } +poseidon-parameters = { version="1.0", path = "../poseidon-parameters", default-features = false } +poseidon-permutation = { version="1.0", path = "../poseidon-permutation", default-features = false } + +ark-ff = { version = "0.4", default-features = false, optional=true } ark-groth16 = { version = "0.4", default-features = false, optional=true } ark-r1cs-std = {version = "0.4", default-features = false, optional=true } ark-relations = { version="0.4", default-features = false, optional=true } ark-snark = { version = "0.4", default-features = false, optional=true } -decaf377 = { version="0.4", default-features = false, features = ["r1cs"] } -num-bigint = { version = "0.4.3", default-features = false } -once_cell = { version = "1.8", default-features = false } -poseidon-parameters = { version="0.4", path = "../poseidon-parameters", default-features = false } -poseidon-permutation = { version="0.5", path = "../poseidon-permutation", default-features = false } - -# Dependencies added for ark-sponge vendoring ark-ec = { version = "0.4", default_features = false, optional=true } ark-std = { version = "0.4", default-features = false, optional=true } -tracing = { version = "0.1", default-features = false, features = [ "attributes" ], optional = true } ark-serialize = { version = "0.4", default_features = false, optional=true } -[dev-dependencies] -ark-ed-on-bls12-381 = "0.4" -proptest = "1" -rand_core = { version = "0.6.3", features = ["getrandom"] } -rand_chacha = "0.3" - -# Dependencies added for ark-sponge tests -ark-test-curves = { version = "0.4", features = ["bls12_381_curve", "mnt4_753_curve"]} - [features] -default = ["std"] -std = [ +default = ["arkworks"] +alloc = ["decaf377/alloc"] +arkworks = ["std", + "decaf377/arkworks", "ark-ff/std", "ark-groth16/std", "ark-r1cs-std", "ark-relations/std", - "num-bigint/std", - "once_cell/std", "ark-std/std", "ark-ec/std", - "ark-serialize/std", + "ark-serialize/std"] +std = [ + "alloc", ] r1cs = [ + "arkworks", "ark-groth16", "ark-relations", "ark-snark", @@ -56,7 +46,6 @@ r1cs = [ "poseidon-permutation/r1cs", "ark-std", "ark-ec", - "tracing", "ark-serialize", ] parallel = [ @@ -67,12 +56,3 @@ parallel = [ "ark-std/parallel", "ark-ec/parallel", ] - -[build-dependencies] -poseidon-paramgen = { version="0.4", path = "../poseidon-paramgen" } -ark-ed-on-bls12-377 = "0.4" -ark-ff = "0.4" - -[[test]] -name = "r1cs" -required-features = ["r1cs"] diff --git a/poseidon377/build.rs b/poseidon377/build.rs deleted file mode 100644 index 1cf0e5a..0000000 --- a/poseidon377/build.rs +++ /dev/null @@ -1,27 +0,0 @@ -use std::{ - env, fs, - io::{BufWriter, Write}, - path::PathBuf, -}; - -use ark_ed_on_bls12_377::{Fq, FqConfig}; -use ark_ff::MontConfig; -use poseidon_paramgen::v1::poseidon_build; - -fn main() { - // We use the default `OUT_DIR` set by Cargo when a build script exists. - let output_location: PathBuf = - PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR environmental variable must be set")) - .join("params.rs"); - - let security_level = 128; - // Recall t = rate + capacity, so t=2 is rate=1, capacity=1 (i.e. 1:1 hash) - let t_values = vec![2, 3, 4, 5, 6, 7, 8]; - let params_codegen = - poseidon_build::compile::(security_level, t_values, FqConfig::MODULUS, true); - - let fh = fs::File::create(output_location).expect("can create source file"); - let mut f = BufWriter::new(fh); - f.write_all(params_codegen.as_bytes()) - .expect("can write parameters to file"); -} diff --git a/poseidon377/src/hash.rs b/poseidon377/src/hash.rs index c5fdb3c..98a9cc9 100644 --- a/poseidon377/src/hash.rs +++ b/poseidon377/src/hash.rs @@ -1,40 +1,38 @@ -use ark_ff::vec; - use crate::{Fq, Instance}; /// Hash a single [`Fq`] element with the provided `domain_separator`. pub fn hash_1(domain_separator: &Fq, value: Fq) -> Fq { let params = &crate::RATE_1_PARAMS; - let mut state = Instance::new(params); - state.n_to_1_fixed_hash(vec![*domain_separator, value]) + let mut state = Instance::new(¶ms); + state.n_to_1_fixed_hash(&[*domain_separator, value]) } /// Hash two [`Fq`] elements with the provided `domain_separator`. pub fn hash_2(domain_separator: &Fq, value: (Fq, Fq)) -> Fq { let params = &crate::RATE_2_PARAMS; let mut state = Instance::new(params); - state.n_to_1_fixed_hash(vec![*domain_separator, value.0, value.1]) + state.n_to_1_fixed_hash(&[*domain_separator, value.0, value.1]) } /// Hash three [`Fq`] elements with the provided `domain_separator`. pub fn hash_3(domain_separator: &Fq, value: (Fq, Fq, Fq)) -> Fq { let params = &crate::RATE_3_PARAMS; let mut state = Instance::new(params); - state.n_to_1_fixed_hash(vec![*domain_separator, value.0, value.1, value.2]) + state.n_to_1_fixed_hash(&[*domain_separator, value.0, value.1, value.2]) } /// Hash four [`Fq`] elements with the provided `domain_separator`. pub fn hash_4(domain_separator: &Fq, value: (Fq, Fq, Fq, Fq)) -> Fq { let params = &crate::RATE_4_PARAMS; let mut state = Instance::new(params); - state.n_to_1_fixed_hash(vec![*domain_separator, value.0, value.1, value.2, value.3]) + state.n_to_1_fixed_hash(&[*domain_separator, value.0, value.1, value.2, value.3]) } /// Hash five [`Fq`] elements with the provided `domain_separator`. pub fn hash_5(domain_separator: &Fq, value: (Fq, Fq, Fq, Fq, Fq)) -> Fq { let params = &crate::RATE_5_PARAMS; let mut state = Instance::new(params); - state.n_to_1_fixed_hash(vec![ + state.n_to_1_fixed_hash(&[ *domain_separator, value.0, value.1, @@ -48,7 +46,7 @@ pub fn hash_5(domain_separator: &Fq, value: (Fq, Fq, Fq, Fq, Fq)) -> Fq { pub fn hash_6(domain_separator: &Fq, value: (Fq, Fq, Fq, Fq, Fq, Fq)) -> Fq { let params = &crate::RATE_6_PARAMS; let mut state = Instance::new(params); - state.n_to_1_fixed_hash(vec![ + state.n_to_1_fixed_hash(&[ *domain_separator, value.0, value.1, @@ -63,7 +61,7 @@ pub fn hash_6(domain_separator: &Fq, value: (Fq, Fq, Fq, Fq, Fq, Fq)) -> Fq { pub fn hash_7(domain_separator: &Fq, value: (Fq, Fq, Fq, Fq, Fq, Fq, Fq)) -> Fq { let params = &crate::RATE_7_PARAMS; let mut state = Instance::new(params); - state.n_to_1_fixed_hash(vec![ + state.n_to_1_fixed_hash(&[ *domain_separator, value.0, value.1, @@ -77,9 +75,7 @@ pub fn hash_7(domain_separator: &Fq, value: (Fq, Fq, Fq, Fq, Fq, Fq, Fq)) -> Fq #[cfg(test)] mod test { - use std::str::FromStr; - - use ark_ff::PrimeField; + use core::str::FromStr; use super::*; diff --git a/poseidon377/src/lib.rs b/poseidon377/src/lib.rs index b285b61..863ce74 100644 --- a/poseidon377/src/lib.rs +++ b/poseidon377/src/lib.rs @@ -1,38 +1,35 @@ //! An instantiation of Poseidon for the BLS12-377 scalar field. #![cfg_attr(not(feature = "std"), no_std)] -use once_cell::sync::Lazy; - mod hash; - -// We want the full parameters to be available in the documentation. -#[cfg(doc)] -pub mod params { - use ark_ff::vec; - include!(concat!(env!("OUT_DIR"), "/params.rs")); -} -#[cfg(not(doc))] -mod params { - use ark_ff::vec; - include!(concat!(env!("OUT_DIR"), "/params.rs")); -} +mod params; pub use hash::{hash_1, hash_2, hash_3, hash_4, hash_5, hash_6, hash_7}; /// Parameters for the rate-1 instance of Poseidon. -pub static RATE_1_PARAMS: Lazy> = Lazy::new(params::rate_1); +pub const RATE_1_PARAMS: PoseidonParameters<2, 1, 4, 1, 39, 2, 78, 31> = params::rate_1::rate_1(); + /// Parameters for the rate-2 instance of Poseidon. -pub static RATE_2_PARAMS: Lazy> = Lazy::new(params::rate_2); +pub const RATE_2_PARAMS: PoseidonParameters<3, 2, 9, 4, 39, 3, 117, 31> = params::rate_2::rate_2(); + /// Parameters for the rate-3 instance of Poseidon. -pub static RATE_3_PARAMS: Lazy> = Lazy::new(params::rate_3); +pub const RATE_3_PARAMS: PoseidonParameters<4, 3, 16, 9, 39, 4, 156, 31> = params::rate_3::rate_3(); + /// Parameters for the rate-4 instance of Poseidon. -pub static RATE_4_PARAMS: Lazy> = Lazy::new(params::rate_4); +pub const RATE_4_PARAMS: PoseidonParameters<5, 4, 25, 16, 39, 5, 195, 31> = + params::rate_4::rate_4(); + /// Parameters for the rate-5 instance of Poseidon. -pub static RATE_5_PARAMS: Lazy> = Lazy::new(params::rate_5); +pub const RATE_5_PARAMS: PoseidonParameters<6, 5, 36, 25, 39, 6, 234, 31> = + params::rate_5::rate_5(); + /// Parameters for the rate-6 instance of Poseidon. -pub static RATE_6_PARAMS: Lazy> = Lazy::new(params::rate_6); +pub const RATE_6_PARAMS: PoseidonParameters<7, 6, 49, 36, 39, 7, 273, 31> = + params::rate_6::rate_6(); + /// Parameters for the rate-7 instance of Poseidon. -pub static RATE_7_PARAMS: Lazy> = Lazy::new(params::rate_7); +pub const RATE_7_PARAMS: PoseidonParameters<8, 7, 64, 49, 39, 8, 312, 31> = + params::rate_7::rate_7(); pub use decaf377::Fq; pub use poseidon_parameters::v1::PoseidonParameters; diff --git a/poseidon377/src/params.rs b/poseidon377/src/params.rs new file mode 100644 index 0000000..26896a2 --- /dev/null +++ b/poseidon377/src/params.rs @@ -0,0 +1,7 @@ +pub mod rate_1; +pub mod rate_2; +pub mod rate_3; +pub mod rate_4; +pub mod rate_5; +pub mod rate_6; +pub mod rate_7; diff --git a/poseidon377/src/params/rate_1.rs b/poseidon377/src/params/rate_1.rs new file mode 100644 index 0000000..e683ffa --- /dev/null +++ b/poseidon377/src/params/rate_1.rs @@ -0,0 +1,1317 @@ +use decaf377::Fq; +use poseidon_parameters::v1::{ + Alpha, ArcMatrix, Matrix, MdsMatrix, OptimizedArcMatrix, OptimizedMdsMatrices, + PoseidonParameters, RoundNumbers, SquareMatrix, +}; + +/// Parameters for the rate-1 instance of Poseidon. +pub const fn rate_1() -> PoseidonParameters<2, 1, 4, 1, 39, 2, 78, 31> { + PoseidonParameters { + M: 128, + arc: ArcMatrix::<39, 2, 78>::new_from_known([ + Fq::from_montgomery_limbs([ + 6258896775460530561, + 1267570262938364784, + 10583705394133388288, + 4331270346116315, + ]), + Fq::from_montgomery_limbs([ + 15454694353288852986, + 2205227775135851582, + 9104115866970654747, + 48952601862872692, + ]), + Fq::from_montgomery_limbs([ + 17632203450119298224, + 13599315412875479343, + 7140007131719627884, + 569020719923681609, + ]), + Fq::from_montgomery_limbs([ + 6608939517720255573, + 15066841911042588370, + 8648475674864948310, + 578035154261448463, + ]), + Fq::from_montgomery_limbs([ + 1055805092356900670, + 5486646384412869322, + 9705528431443784365, + 307684188417815151, + ]), + Fq::from_montgomery_limbs([ + 11248650571348093756, + 1514639161444600232, + 968234586550369174, + 1313541476846290422, + ]), + Fq::from_montgomery_limbs([ + 5189078861895589451, + 9996051726892023924, + 14955307722807799098, + 1320126769029056157, + ]), + Fq::from_montgomery_limbs([ + 14397975440942704641, + 14269464930912859892, + 9230505175050478925, + 1093012507774165575, + ]), + Fq::from_montgomery_limbs([ + 6847445113090943697, + 17673603016395516883, + 15250705377106188486, + 539035154593930175, + ]), + Fq::from_montgomery_limbs([ + 6947720323756162913, + 3313209312340777357, + 18395293995391548637, + 209157278787801614, + ]), + Fq::from_montgomery_limbs([ + 3458319354278701363, + 11429938079178703613, + 7005241729732086579, + 150425083810087548, + ]), + Fq::from_montgomery_limbs([ + 2543869222269883848, + 6129645233495109995, + 1076912762679804840, + 1127382646597654684, + ]), + Fq::from_montgomery_limbs([ + 3802085031173312140, + 1153736051705836195, + 34368926314299214, + 870379362515076367, + ]), + Fq::from_montgomery_limbs([ + 5488449230911278270, + 2470593653263895214, + 2746242821352744093, + 1170504430408456781, + ]), + Fq::from_montgomery_limbs([ + 3039943962034370722, + 16476527388322339887, + 5748836754427063321, + 874163389084517420, + ]), + Fq::from_montgomery_limbs([ + 11160556015001057055, + 18242508582059343688, + 1914918650959602739, + 1060251542697903110, + ]), + Fq::from_montgomery_limbs([ + 1250158851421170863, + 3598229175113435790, + 11440021114985999339, + 539355236403595924, + ]), + Fq::from_montgomery_limbs([ + 17381864786167270102, + 5920159615239164628, + 7621039653090189177, + 80820461513544845, + ]), + Fq::from_montgomery_limbs([ + 9427313983461117140, + 12722081891364237901, + 2526344363227396036, + 169367802375106360, + ]), + Fq::from_montgomery_limbs([ + 18279043286872423918, + 11282585104763746254, + 6663752460065940976, + 1313306297247703395, + ]), + Fq::from_montgomery_limbs([ + 11348011840530639501, + 13585724393536580138, + 16173408530293170097, + 237306649524404549, + ]), + Fq::from_montgomery_limbs([ + 9105438583131143101, + 484614180087189633, + 11007155874658626631, + 1105934356159118197, + ]), + Fq::from_montgomery_limbs([ + 17692463671930692407, + 8848595903938472796, + 11444065729641962767, + 856337008348787181, + ]), + Fq::from_montgomery_limbs([ + 11475710285348090819, + 12082432292625800602, + 4973698077631026180, + 250886293876957218, + ]), + Fq::from_montgomery_limbs([ + 3831119291993789483, + 11955292354948817093, + 10578474534116863906, + 292270082742245378, + ]), + Fq::from_montgomery_limbs([ + 11074518745033881448, + 14103711443902779277, + 9703092681767716480, + 1027943651677607178, + ]), + Fq::from_montgomery_limbs([ + 14255504761835093988, + 12836619582277229653, + 16470467141944117103, + 216605519265731395, + ]), + Fq::from_montgomery_limbs([ + 17412479146814766387, + 7550994961529157056, + 16948400072627593287, + 686398674032066558, + ]), + Fq::from_montgomery_limbs([ + 14019001188641598557, + 17711295492607709098, + 17317648113970387478, + 1005852188387049762, + ]), + Fq::from_montgomery_limbs([ + 2757938402041260135, + 10858479133892891281, + 6226991255650955925, + 113236437448370768, + ]), + Fq::from_montgomery_limbs([ + 2864831845918016166, + 11222314241298259255, + 6809710896423414618, + 391420167412878448, + ]), + Fq::from_montgomery_limbs([ + 15295022328131697798, + 14180180046854426704, + 5969598612677890929, + 422063763314834782, + ]), + Fq::from_montgomery_limbs([ + 9004302479558436050, + 9395856654729450347, + 1876513748778519470, + 1078019802682326971, + ]), + Fq::from_montgomery_limbs([ + 17483474807509017611, + 1860495490123329066, + 10427704098322365889, + 168618466562963955, + ]), + Fq::from_montgomery_limbs([ + 3325616628101926400, + 6318651352098105269, + 10561353542035867513, + 347869863814864598, + ]), + Fq::from_montgomery_limbs([ + 10608180854761738188, + 7227409243651228657, + 10245865730256963695, + 33366710867335616, + ]), + Fq::from_montgomery_limbs([ + 6377899455837337983, + 6460750903815498030, + 14658523922399852198, + 850391300192126368, + ]), + Fq::from_montgomery_limbs([ + 9949314602248501685, + 9592125889973713334, + 12540141676151911968, + 902630930644097978, + ]), + Fq::from_montgomery_limbs([ + 9874569741817026646, + 8597014183735249181, + 14218226934847278615, + 990148636388408942, + ]), + Fq::from_montgomery_limbs([ + 9660554731559651732, + 4712943300030820950, + 8606150340609690108, + 160577077343575019, + ]), + Fq::from_montgomery_limbs([ + 1527563399863479849, + 15731827835699836031, + 7229971325383988685, + 826813386663462338, + ]), + Fq::from_montgomery_limbs([ + 18280004775370667641, + 10717313307037013407, + 3515684275541234253, + 1288829721588576759, + ]), + Fq::from_montgomery_limbs([ + 9831584723932855792, + 1077247411674292976, + 4470807593665567057, + 629496612576050491, + ]), + Fq::from_montgomery_limbs([ + 18018152400203412106, + 16658517283861939563, + 15927825308647499591, + 1046841820836193453, + ]), + Fq::from_montgomery_limbs([ + 424287065221489244, + 17051291629546655826, + 4983999217110075951, + 1278494067020803559, + ]), + Fq::from_montgomery_limbs([ + 13081137544640017921, + 1196650010435295235, + 15746798075854654528, + 1203678627802318991, + ]), + Fq::from_montgomery_limbs([ + 939677723946433505, + 11567589096003441629, + 12722931402128711345, + 720362007908860959, + ]), + Fq::from_montgomery_limbs([ + 14103532265560668917, + 10923867233350724517, + 18049017711808115649, + 375405789021031150, + ]), + Fq::from_montgomery_limbs([ + 497571197013480246, + 10623440047065153586, + 4886324577963912147, + 1126015905264708236, + ]), + Fq::from_montgomery_limbs([ + 8235696195804714347, + 8423059580415141744, + 17356311622946336763, + 215719902708291122, + ]), + Fq::from_montgomery_limbs([ + 13167547990249432274, + 13822834764858661811, + 1681839468362828968, + 1102696208723885390, + ]), + Fq::from_montgomery_limbs([ + 14358625551422878077, + 17488520719897236232, + 10532471740075617546, + 780155994080253829, + ]), + Fq::from_montgomery_limbs([ + 17574454647216920383, + 13786111586753929723, + 11740472500664499721, + 34830030445253818, + ]), + Fq::from_montgomery_limbs([ + 9209614961980615136, + 9937652035573086410, + 1218815569248823646, + 236722195254239968, + ]), + Fq::from_montgomery_limbs([ + 3620849600049355235, + 2774041983584442196, + 6713450660153581499, + 1022079506649410443, + ]), + Fq::from_montgomery_limbs([ + 15478035690602744699, + 17214923924946245378, + 13206453575278417593, + 842388521454715001, + ]), + Fq::from_montgomery_limbs([ + 7853082889027573297, + 5688955180632238595, + 4814575662942306312, + 837428779080817192, + ]), + Fq::from_montgomery_limbs([ + 6927274665365457380, + 4891595237470578015, + 9799180733026983523, + 417480065074766363, + ]), + Fq::from_montgomery_limbs([ + 9633744074825535160, + 13348096458316776884, + 10200632920038276183, + 1241967248070647028, + ]), + Fq::from_montgomery_limbs([ + 7315634111998276785, + 14989100225520468879, + 2450102833924358633, + 264607654026641770, + ]), + Fq::from_montgomery_limbs([ + 7717087918080228437, + 10060974775377729782, + 15332244215838611263, + 711171330417334270, + ]), + Fq::from_montgomery_limbs([ + 2324103748366230971, + 10995578112328024729, + 15408740786099239677, + 1268694519894110373, + ]), + Fq::from_montgomery_limbs([ + 11893493435520502207, + 3766971087184646941, + 15414311780153824548, + 275458309578547698, + ]), + Fq::from_montgomery_limbs([ + 3031245967343841039, + 4502052608729245908, + 4341196184555983012, + 1220348581034324635, + ]), + Fq::from_montgomery_limbs([ + 14560505796665136876, + 9750262619582169702, + 11805062379512156262, + 947525094566692079, + ]), + Fq::from_montgomery_limbs([ + 7374167934946983346, + 10320986442790179232, + 1316321051690183387, + 672142052910646114, + ]), + Fq::from_montgomery_limbs([ + 6678718452413104008, + 3653041364903437992, + 3698421704565957570, + 448468818117066870, + ]), + Fq::from_montgomery_limbs([ + 12909750526124334775, + 6274889465513641781, + 11804747737295382226, + 507133470520718817, + ]), + Fq::from_montgomery_limbs([ + 9667929895833397580, + 11082007517281041627, + 10049496943206931153, + 128401977346054829, + ]), + Fq::from_montgomery_limbs([ + 12310961684508931943, + 17018879353361910672, + 9780939516032057631, + 874860903480789609, + ]), + Fq::from_montgomery_limbs([ + 1042224041096057459, + 15183806776241160696, + 2334295613683866263, + 49327571912713520, + ]), + Fq::from_montgomery_limbs([ + 17515802687784336662, + 10591106814883990536, + 4193417463306063615, + 23930315094714182, + ]), + Fq::from_montgomery_limbs([ + 15007113684212052093, + 95900555196155559, + 9807646841884583683, + 251554444378507936, + ]), + Fq::from_montgomery_limbs([ + 8094314597037982537, + 326195237272228919, + 9972406889128755860, + 563568079596439234, + ]), + Fq::from_montgomery_limbs([ + 12074057828954296990, + 17459062068677478655, + 2059156604363327430, + 860353551420485928, + ]), + Fq::from_montgomery_limbs([ + 13609943108532429528, + 16610915446730445558, + 9788093117338911219, + 1175759231734449357, + ]), + Fq::from_montgomery_limbs([ + 7485446014387007697, + 13102110362887743132, + 11648775823210990955, + 43349719308454144, + ]), + Fq::from_montgomery_limbs([ + 11902878575783530648, + 16441587368398080183, + 9321126611136841229, + 579191052426365547, + ]), + ]), + mds: MdsMatrix::new_from_known([ + Fq::from_montgomery_limbs([ + 14093733558879256570, + 16573587507929677817, + 13530556323685588983, + 1151689812725735417, + ]), + Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ]), + Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ]), + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + ]), + alpha: Alpha::Exponent(17), + rounds: RoundNumbers { r_P: 31, r_F: 8 }, + optimized_mds: OptimizedMdsMatrices { + M_hat: SquareMatrix::<1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ])]), + v: Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ])]), + w: Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ])]), + M_prime: SquareMatrix::<2, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + ]), + M_doubleprime: SquareMatrix::<2, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 14093733558879256570, + 16573587507929677817, + 13530556323685588983, + 1151689812725735417, + ]), + Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ]), + Fq::from_montgomery_limbs([ + 5871380364199810372, + 17134679344503149891, + 2194785676561487165, + 1277465673017729916, + ]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + ]), + M_inverse: SquareMatrix::<2, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 5994009629053419274, + 15434301171572932352, + 1350487059822599859, + 1102422137481273087, + ]), + Fq::from_montgomery_limbs([ + 18054649431151608138, + 10789890749345300822, + 12135909219384222141, + 1220664558067982680, + ]), + Fq::from_montgomery_limbs([ + 18054649431151608138, + 10789890749345300822, + 12135909219384222141, + 1220664558067982680, + ]), + Fq::from_montgomery_limbs([ + 11262517505635122707, + 5960750817236483583, + 14179438877114240358, + 859563904274372775, + ]), + ]), + M_hat_inverse: SquareMatrix::<1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 16163137587655999434, + 1588334981690687431, + 11094542470912991159, + 1141836277676842951, + ])]), + M_00: Fq::from_montgomery_limbs([ + 14093733558879256570, + 16573587507929677817, + 13530556323685588983, + 1151689812725735417, + ]), + M_i: Matrix::<2, 2, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 4]), + ]), + v_collection: [ + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 1281160748661064590, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 992930372509352846, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 920872778471424910, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 902858379961942926, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 898354780334572430, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 897228880427729806, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896947405451019150, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896877036706841486, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896859444520797070, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896855046474285966, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853946962658190, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853672084751246, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853603365274510, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853586185405326, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853581890438030, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580816696206, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580548260750, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580481151886, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580464374670, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580460180366, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580459131790, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458869646, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458804110, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458787726, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458783630, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458782606, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458782350, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458782286, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 483667834981143894, + 4307404968133219670, + 16943348926633375062, + 896853580458782270, + ])]), + ], + w_hat_collection: [ + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 5871380364199810372, + 17134679344503149891, + 2194785676561487165, + 1277465673017729916, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 2862272125674542349, + 12261906873994007818, + 6321048831233967347, + 1074021580006399469, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 9272583245283021873, + 11217561065666991141, + 4379357376214336458, + 260245207961077682, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 196844833712984260, + 7976756115248861334, + 17517429504857345834, + 1040980831844310728, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 17057618151146341133, + 12523702104395956820, + 12271391923288747173, + 128082215312722720, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 12890240383456709684, + 13201320270164724051, + 12192079545735885462, + 512328861250890882, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 13941971633936019663, + 9450685481039963469, + 4906550719283927641, + 704035074315390132, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 17423394883381543738, + 6433782946050643252, + 5689644244654688611, + 125579555885213732, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 14353347312397520104, + 7288387710493021395, + 4311832904909202829, + 502318223540854929, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 1347655275989709727, + 4245699316062704462, + 10279052303396300340, + 663992523475246318, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 4665119351487123067, + 10521689812050988343, + 15701185823635138767, + 1310689723212811875, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 16483972148533344745, + 4256692817894913241, + 5006417198399918906, + 1206917780786727308, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 8419151115589576609, + 16090192988689716068, + 17567574918587694308, + 791830011082389037, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 13778856883705323138, + 14545068902940102031, + 993508820741100432, + 476759302953209355, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 17496437634930473479, + 14825680012141475389, + 15452500040433442369, + 561756841124664021, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 13920016566121523227, + 15948124448946968822, + 17948232698074155269, + 901746993810482688, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 17335574612123557994, + 13976794743969113048, + 2516139938686944276, + 916427233865583959, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 12551062722422145446, + 6091475924057689953, + 14574745195976306768, + 975148194085989039, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 11859759237326046870, + 11443688791831100804, + 7468934004005101886, + 1210032034967609362, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 8369043544469936725, + 7944688737015363087, + 8970898067298874614, + 804287027805917254, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 13578426599226763602, + 409795969952241723, + 3500289563004924887, + 526587369847322221, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 16694716497016235335, + 13624820501318689005, + 7032878935779188570, + 761069108701115486, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 9987630261992854810, + 4683578953455993781, + 14194957110635732328, + 353715693428115148, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 2331531148080600167, + 12273208361624145621, + 12918060978883315103, + 69582403024287196, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 9326124592322400668, + 12199345299077479252, + 14778755768114157182, + 278329612097148786, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 411010221870499440, + 11903893048890813778, + 3774790851327973882, + 1113318448388595147, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 17914279703776401853, + 9785505765254214980, + 12641069530299914214, + 417432681489860393, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 15591384841505236723, + 14234171535107478802, + 6702510657540042648, + 324450355271268176, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 7025307144892292044, + 1596453919301260363, + 8363298556450618979, + 1297801421085072705, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 7477979248444469037, + 5449237394315104554, + 12548356277080942984, + 1155364572275770626, + ])]), + Matrix::<1, 1, 1>::new_from_known([Fq::from_montgomery_limbs([ + 9288667662653177009, + 2413627220660929702, + 10841843085892687389, + 585617177038562311, + ])]), + ], + }, + optimized_arc: OptimizedArcMatrix::<39, 2, 78>::new_from_known([ + Fq::from_montgomery_limbs([ + 6258896775460530561, + 1267570262938364784, + 10583705394133388288, + 4331270346116315, + ]), + Fq::from_montgomery_limbs([ + 15454694353288852986, + 2205227775135851582, + 9104115866970654747, + 48952601862872692, + ]), + Fq::from_montgomery_limbs([ + 17632203450119298224, + 13599315412875479343, + 7140007131719627884, + 569020719923681609, + ]), + Fq::from_montgomery_limbs([ + 6608939517720255573, + 15066841911042588370, + 8648475674864948310, + 578035154261448463, + ]), + Fq::from_montgomery_limbs([ + 1055805092356900670, + 5486646384412869322, + 9705528431443784365, + 307684188417815151, + ]), + Fq::from_montgomery_limbs([ + 11248650571348093756, + 1514639161444600232, + 968234586550369174, + 1313541476846290422, + ]), + Fq::from_montgomery_limbs([ + 5189078861895589451, + 9996051726892023924, + 14955307722807799098, + 1320126769029056157, + ]), + Fq::from_montgomery_limbs([ + 14397975440942704641, + 14269464930912859892, + 9230505175050478925, + 1093012507774165575, + ]), + Fq::from_montgomery_limbs([ + 6847445113090943697, + 17673603016395516883, + 15250705377106188486, + 539035154593930175, + ]), + Fq::from_montgomery_limbs([ + 3611307702635802055, + 2044680977517755214, + 1507155857745404241, + 416523989909284581, + ]), + Fq::from_montgomery_limbs([ + 15773496315521971064, + 3417307918093239503, + 5319102997109207920, + 1059459273997968718, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10991357984979900529, + 11786708072563616304, + 15195751910119459835, + 1325497062894455603, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16027823656497991124, + 9570249298141187698, + 9384192828271733406, + 598167880091560796, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4121766814818268604, + 5642500678209337527, + 11249605790034284655, + 169274140565479991, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18428671666826012339, + 3103504747064554186, + 2824060703077903905, + 650804942285219865, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6536595406830723568, + 12507627360655164307, + 5816557923264156407, + 1171438146865855396, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7014452833430165540, + 2192734170292167642, + 18020153564698148489, + 943832042172430504, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15061407369851519692, + 5313653764899529765, + 18112450540856929121, + 723535739146239880, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11839250336475774987, + 15868350915088614311, + 11144158850926607283, + 20878601091348541, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4149527232578341040, + 5854266614316639968, + 16351407150591024716, + 455766835829125567, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12471037099388658934, + 2086101075023281280, + 1788538226576314996, + 1339656767645635692, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11602956738027931852, + 9207937453523162767, + 13647296147603057333, + 111521899082870644, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4471865953303794141, + 10665791129581261198, + 12917311030821790127, + 421715564603751799, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7266742212555730010, + 4344990323783613969, + 6675828359235980546, + 1075010774212196894, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17274747138948537703, + 8997958909963391104, + 7585281533244210281, + 1289863406379487668, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16682415876718386807, + 6754707099034381256, + 17068117384213468958, + 1039851084794055603, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17452413239970755288, + 15172605790896474036, + 12289534575869712530, + 1247895409152971025, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9189529962407134994, + 11058665231577655834, + 16040250280290103955, + 583188588452985106, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12330122353729758122, + 7872244451651384396, + 1718216203500654841, + 947488898510695688, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2532148827221633905, + 11277707113691069015, + 13146274701375091754, + 1122111291456835663, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13318309830858313604, + 15574521868164640680, + 16956455155077117710, + 135767028023417208, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 750420733483410590, + 2418854296448104823, + 15284086408483984263, + 341138452402312061, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16457963474965655942, + 5443472470949495638, + 2064775438293218219, + 400327702117075871, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10542835534533651006, + 6753561243806226378, + 12003236697439509817, + 241774398989798606, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1079740531825589218, + 855297542685037903, + 469984130808287107, + 1004975734823384044, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11494156914009901023, + 10804976036978117356, + 8604768447320145756, + 183564350030538687, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16681620867545906411, + 2060231339788432100, + 17049513972176383365, + 112003830623007503, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 668347479965076886, + 10549614204057010371, + 13122395911704198577, + 892397509190749082, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 832717394377902022, + 17441619158292034189, + 10775807051709353596, + 73942828503744396, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17843890747357672894, + 10605743677137367533, + 6810818872903428049, + 148499098324463880, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1042224041096057459, + 15183806776241160696, + 2334295613683866263, + 49327571912713520, + ]), + Fq::from_montgomery_limbs([ + 17515802687784336662, + 10591106814883990536, + 4193417463306063615, + 23930315094714182, + ]), + Fq::from_montgomery_limbs([ + 15007113684212052093, + 95900555196155559, + 9807646841884583683, + 251554444378507936, + ]), + Fq::from_montgomery_limbs([ + 8094314597037982537, + 326195237272228919, + 9972406889128755860, + 563568079596439234, + ]), + Fq::from_montgomery_limbs([ + 12074057828954296990, + 17459062068677478655, + 2059156604363327430, + 860353551420485928, + ]), + Fq::from_montgomery_limbs([ + 13609943108532429528, + 16610915446730445558, + 9788093117338911219, + 1175759231734449357, + ]), + Fq::from_montgomery_limbs([ + 7485446014387007697, + 13102110362887743132, + 11648775823210990955, + 43349719308454144, + ]), + Fq::from_montgomery_limbs([ + 11902878575783530648, + 16441587368398080183, + 9321126611136841229, + 579191052426365547, + ]), + ]), + } +} diff --git a/poseidon377/src/params/rate_2.rs b/poseidon377/src/params/rate_2.rs new file mode 100644 index 0000000..213fe31 --- /dev/null +++ b/poseidon377/src/params/rate_2.rs @@ -0,0 +1,2312 @@ +use decaf377::Fq; +use poseidon_parameters::v1::{ + Alpha, ArcMatrix, Matrix, MdsMatrix, OptimizedArcMatrix, OptimizedMdsMatrices, + PoseidonParameters, RoundNumbers, SquareMatrix, +}; + +/// Parameters for the rate-2 instance of Poseidon. +pub const fn rate_2() -> PoseidonParameters<3, 2, 9, 4, 39, 3, 117, 31> { + PoseidonParameters { + M: 128, + arc: ArcMatrix::<39, 3, 117>::new_from_known([ + Fq::from_montgomery_limbs([ + 13532052565085671856, + 13175575834742130482, + 14571043277169067394, + 1128324334676141805, + ]), + Fq::from_montgomery_limbs([ + 10586567975029405298, + 5987505274649066590, + 9663655893165983133, + 381788629769180835, + ]), + Fq::from_montgomery_limbs([ + 7404335995308317606, + 10342209374602516054, + 14679697400509748167, + 1259991645283011647, + ]), + Fq::from_montgomery_limbs([ + 12711294721892819516, + 8412935995118692797, + 7069737649526067295, + 549549236990677487, + ]), + Fq::from_montgomery_limbs([ + 128694122049037398, + 15825223235256271389, + 74647683628497806, + 403759781237802093, + ]), + Fq::from_montgomery_limbs([ + 3501552524290051296, + 10688664658423588201, + 8345653809557910120, + 766292783896459938, + ]), + Fq::from_montgomery_limbs([ + 13998055823902745235, + 15535161481341849823, + 9848874496394823215, + 579121379437172744, + ]), + Fq::from_montgomery_limbs([ + 16363263235454987811, + 9117252686821547535, + 4794867261658414781, + 418411818796950741, + ]), + Fq::from_montgomery_limbs([ + 3710344964675021293, + 13957371261080223237, + 15195218532629186765, + 760708816844813378, + ]), + Fq::from_montgomery_limbs([ + 16135673103471103205, + 13943139040297964408, + 12037506718934223099, + 1187380734246932890, + ]), + Fq::from_montgomery_limbs([ + 11326210002632211732, + 2893415499386035614, + 2949171194607212014, + 568849018592141776, + ]), + Fq::from_montgomery_limbs([ + 13925494990768706056, + 13969996543019858204, + 13457764640058086886, + 114396439087701688, + ]), + Fq::from_montgomery_limbs([ + 16351586607272228519, + 6269966282891300082, + 12490381894697744781, + 834648274293416263, + ]), + Fq::from_montgomery_limbs([ + 1437979443977545600, + 14767193465362841311, + 11074881595123675812, + 1204201379421269428, + ]), + Fq::from_montgomery_limbs([ + 5230240271406271908, + 16847766581152362930, + 1712847198165617791, + 311937423231086981, + ]), + Fq::from_montgomery_limbs([ + 3645836740283016323, + 15685198898945208452, + 1980971647688859029, + 176967089015698342, + ]), + Fq::from_montgomery_limbs([ + 7550143813701248311, + 18291556615524985846, + 8534400014086995148, + 500430429779017952, + ]), + Fq::from_montgomery_limbs([ + 596957473479108084, + 6324092840533510915, + 4811101589352947098, + 76518932650696039, + ]), + Fq::from_montgomery_limbs([ + 336812235439984799, + 13522610888312181094, + 10501405696980879642, + 449669351326561391, + ]), + Fq::from_montgomery_limbs([ + 12592523411743912820, + 3924222765120111350, + 5699458771760954386, + 892267873608702453, + ]), + Fq::from_montgomery_limbs([ + 12993017322389395630, + 5952902593915102432, + 5247111021983199097, + 470467609253978097, + ]), + Fq::from_montgomery_limbs([ + 7244663031809848522, + 3071554415549245091, + 2773295222867337766, + 1090905641165090834, + ]), + Fq::from_montgomery_limbs([ + 9981097535495148290, + 12930981823992014491, + 9629464214154256600, + 308026108875661910, + ]), + Fq::from_montgomery_limbs([ + 12850815434424207307, + 8847171669624931211, + 16288364336002865240, + 954936779594025677, + ]), + Fq::from_montgomery_limbs([ + 11236881576270168641, + 15414742267201110956, + 7825767860878753872, + 721136380245447153, + ]), + Fq::from_montgomery_limbs([ + 2832704701681877466, + 7235621408572302496, + 11812570847329545593, + 792455748001887640, + ]), + Fq::from_montgomery_limbs([ + 3432713492718273410, + 6465506654245539380, + 8827139003294513485, + 992550877185604089, + ]), + Fq::from_montgomery_limbs([ + 9728786934890323565, + 10584002864733096791, + 2293345482796697755, + 180937419315601034, + ]), + Fq::from_montgomery_limbs([ + 13822678097673121251, + 4948809415032161320, + 15691917123613077102, + 683890210553461269, + ]), + Fq::from_montgomery_limbs([ + 9002390647260096239, + 10448673368926307125, + 17815937281103619895, + 1097505426950771788, + ]), + Fq::from_montgomery_limbs([ + 13908365267431289868, + 3370079770970658040, + 15308027316557057295, + 1308145822882463267, + ]), + Fq::from_montgomery_limbs([ + 7831189882886479452, + 4689238810753296883, + 13159502922430301346, + 27611585919074368, + ]), + Fq::from_montgomery_limbs([ + 14912709676120752020, + 10115204646384083757, + 10138309295115926582, + 223210301540489796, + ]), + Fq::from_montgomery_limbs([ + 12627294687244820632, + 2059848305109767326, + 1888484742856066068, + 1272834063475208138, + ]), + Fq::from_montgomery_limbs([ + 6115210324513801758, + 10929870666119062300, + 11707806468269326656, + 949025326858793021, + ]), + Fq::from_montgomery_limbs([ + 7061826933729287205, + 1126603583829494325, + 5469143638052028670, + 1033665004945948695, + ]), + Fq::from_montgomery_limbs([ + 11008930476894918520, + 11381807375074895164, + 2844592577512486485, + 1128817316316311928, + ]), + Fq::from_montgomery_limbs([ + 5300558244079945539, + 8283037415518590201, + 11038807277807240648, + 1178232107582202545, + ]), + Fq::from_montgomery_limbs([ + 11862022433031293870, + 8913994378642882666, + 9450763413034135432, + 77958396662445698, + ]), + Fq::from_montgomery_limbs([ + 17688402066322086519, + 524036851070457942, + 14909117109897886121, + 557290224371677333, + ]), + Fq::from_montgomery_limbs([ + 1875815915909501089, + 10678692213853973640, + 15989623299920327105, + 428879321377057641, + ]), + Fq::from_montgomery_limbs([ + 1082841901890716129, + 12068516826131602351, + 7102481379375591007, + 906616535867466859, + ]), + Fq::from_montgomery_limbs([ + 17613918888580330287, + 6204465427334198417, + 9436344365449852604, + 655489186886697, + ]), + Fq::from_montgomery_limbs([ + 17585284967658841164, + 80944379680805043, + 2698615756683481750, + 351188921018806563, + ]), + Fq::from_montgomery_limbs([ + 15687615037958784071, + 2186404284346347770, + 5652967689160162635, + 1056583988063876017, + ]), + Fq::from_montgomery_limbs([ + 13107987562409563672, + 3871322351409280978, + 8803804680465229381, + 1030040159656924298, + ]), + Fq::from_montgomery_limbs([ + 16684869482081657339, + 10281204171444660632, + 1624958597982547757, + 386745834466917047, + ]), + Fq::from_montgomery_limbs([ + 6970896123209894127, + 7830160530923913939, + 17422861911349199859, + 623374110284783712, + ]), + Fq::from_montgomery_limbs([ + 4331844870617545742, + 520046082233107649, + 5594606953430693091, + 249698853373994073, + ]), + Fq::from_montgomery_limbs([ + 6680837442175120485, + 6814766854525276712, + 6556825746309967179, + 570042050188335199, + ]), + Fq::from_montgomery_limbs([ + 15436728868072851979, + 10638387680273826288, + 16379320772832534606, + 822954407147775124, + ]), + Fq::from_montgomery_limbs([ + 11837214986206518455, + 596921394620411645, + 13159256680099246054, + 1277661308547494330, + ]), + Fq::from_montgomery_limbs([ + 13679203667889812546, + 11676386286470050129, + 8357354920215222534, + 456950010799870038, + ]), + Fq::from_montgomery_limbs([ + 2229876009761017392, + 13089694557765213339, + 16529665410348556997, + 1200161010593736391, + ]), + Fq::from_montgomery_limbs([ + 16005321486742773520, + 8650710416750881700, + 12927174790925866955, + 1318630719916273524, + ]), + Fq::from_montgomery_limbs([ + 11180409359961118236, + 7275623093671008389, + 11439214005189014436, + 975533040864102009, + ]), + Fq::from_montgomery_limbs([ + 1493684412606064445, + 1600586062110688441, + 6392169949497859284, + 320645276436957806, + ]), + Fq::from_montgomery_limbs([ + 18076284763174743111, + 15528272241931714086, + 1987806618344857317, + 81963683463344143, + ]), + Fq::from_montgomery_limbs([ + 2380106604330211947, + 13999809284604519871, + 17117752833631344354, + 928049684624129249, + ]), + Fq::from_montgomery_limbs([ + 16709180677553116618, + 15078892089982505559, + 12839669848886637777, + 1151522444646802538, + ]), + Fq::from_montgomery_limbs([ + 1024922389916170464, + 4633605473275241115, + 8890730306179887903, + 1145679956560153579, + ]), + Fq::from_montgomery_limbs([ + 2689026397641652069, + 13435392347048733438, + 4613843849026450873, + 644769297929746792, + ]), + Fq::from_montgomery_limbs([ + 1477469845453362358, + 8875949790662885201, + 7478581831156986579, + 67083263015332207, + ]), + Fq::from_montgomery_limbs([ + 1506147123099314810, + 6546355754774050650, + 13235191534515389566, + 573446483563428911, + ]), + Fq::from_montgomery_limbs([ + 11592075759296992527, + 11495396924055153811, + 17020953547937729115, + 326913902434578022, + ]), + Fq::from_montgomery_limbs([ + 10523148363065643749, + 13492540919508068783, + 17386067260199896807, + 528704601527288393, + ]), + Fq::from_montgomery_limbs([ + 9127950768740932108, + 15914409702651500773, + 11784570023787002367, + 340904789729663175, + ]), + Fq::from_montgomery_limbs([ + 6245027322171754000, + 15663478768566472378, + 11402185558701422250, + 36675236290199327, + ]), + Fq::from_montgomery_limbs([ + 6063749964881818939, + 10257461935793181106, + 942936442940111744, + 540037121922249544, + ]), + Fq::from_montgomery_limbs([ + 12968659316148036261, + 14899520595018177284, + 3836336888070673001, + 941781069635905693, + ]), + Fq::from_montgomery_limbs([ + 126228530830236165, + 5499407626081829044, + 14133761497400979158, + 1184006332035149871, + ]), + Fq::from_montgomery_limbs([ + 5031808939874245057, + 12620452215680194384, + 1600289362926216464, + 1200752349590914751, + ]), + Fq::from_montgomery_limbs([ + 13105110393340809165, + 7101636223400183860, + 1455202496382111435, + 1040366751489349639, + ]), + Fq::from_montgomery_limbs([ + 2247493102747455874, + 3444719793324110884, + 17343476723736941016, + 460423680466113922, + ]), + Fq::from_montgomery_limbs([ + 18230610362649795022, + 4850929477447852354, + 2999970116929109994, + 374491266534684371, + ]), + Fq::from_montgomery_limbs([ + 205446930692894616, + 10625340386042781881, + 2267554848789579110, + 805571592523062224, + ]), + Fq::from_montgomery_limbs([ + 9554436490539537540, + 3781982688039156286, + 12732806211783679988, + 207650560800307204, + ]), + Fq::from_montgomery_limbs([ + 14608069410708161069, + 15150367565152858757, + 7976963546254869682, + 1302080053778539832, + ]), + Fq::from_montgomery_limbs([ + 5668581368285301758, + 1481024316238442280, + 14073619068562930813, + 157011518856032932, + ]), + Fq::from_montgomery_limbs([ + 10782685697581511660, + 656395425526716484, + 12429361742269361127, + 1218629948585201369, + ]), + Fq::from_montgomery_limbs([ + 9945724486634605933, + 5559580130460001707, + 4958363795583827901, + 1086630389709013647, + ]), + Fq::from_montgomery_limbs([ + 6214153618072836629, + 6297284130475637236, + 3341157682715609955, + 687805559853576127, + ]), + Fq::from_montgomery_limbs([ + 17561648631049166744, + 4193461398377217711, + 17499970945040917083, + 352506169960283993, + ]), + Fq::from_montgomery_limbs([ + 1122765646603573063, + 1498611916106521677, + 10924305234288949443, + 728326887801130515, + ]), + Fq::from_montgomery_limbs([ + 5800850628186966207, + 4398317517906769115, + 9597227115480831972, + 526197039749009419, + ]), + Fq::from_montgomery_limbs([ + 5159263173914965708, + 8792786795115987428, + 3124972989790777106, + 1052873249848825660, + ]), + Fq::from_montgomery_limbs([ + 1668691385020369393, + 4311283499155522888, + 13095876963782085960, + 334904475460146335, + ]), + Fq::from_montgomery_limbs([ + 14551884987824763154, + 5459630410931408158, + 838248742615457530, + 355270342663742218, + ]), + Fq::from_montgomery_limbs([ + 13811707083670026157, + 17980420357872171335, + 15680078942835361627, + 508494405154027190, + ]), + Fq::from_montgomery_limbs([ + 259245969673242010, + 12143818002017916372, + 9104957694955299615, + 588078921942677607, + ]), + Fq::from_montgomery_limbs([ + 1402823264425646775, + 17394328405754534008, + 8594536777296298084, + 589743092826427286, + ]), + Fq::from_montgomery_limbs([ + 17525191514318164285, + 3032947818017798651, + 8010733640330629183, + 18263345896298111, + ]), + Fq::from_montgomery_limbs([ + 2324591806430845335, + 3802314283763375525, + 5802980770825972296, + 1172121386066784655, + ]), + Fq::from_montgomery_limbs([ + 3481957081013606129, + 7174433466077666272, + 18298661318322644558, + 779600890592950522, + ]), + Fq::from_montgomery_limbs([ + 12191117132876429501, + 13984916474435046850, + 15993612081836470001, + 982264150805006675, + ]), + Fq::from_montgomery_limbs([ + 5832216401942411966, + 14563514500329138886, + 4063839581877579762, + 988127094162723498, + ]), + Fq::from_montgomery_limbs([ + 9980296771901734820, + 8406919274419375318, + 7382848308758481422, + 288106649508594049, + ]), + Fq::from_montgomery_limbs([ + 15311094169366877824, + 8845543297515843004, + 5111676196784685495, + 854309633222289538, + ]), + Fq::from_montgomery_limbs([ + 11805299538225612753, + 2464747910811709980, + 7821113581135412494, + 698716086285897944, + ]), + Fq::from_montgomery_limbs([ + 14453145658534747007, + 17272254080461340124, + 10230451546974640772, + 626243697059407772, + ]), + Fq::from_montgomery_limbs([ + 11287978532447653494, + 18279346120194159177, + 2333031913403775389, + 200338723139384832, + ]), + Fq::from_montgomery_limbs([ + 12366653650419860061, + 16274230817774725784, + 4516721510516055669, + 75055982532212210, + ]), + Fq::from_montgomery_limbs([ + 388555674032981681, + 6567318722554709379, + 2086741448191262667, + 908777123569794972, + ]), + Fq::from_montgomery_limbs([ + 9649589442582163437, + 13541178269507352071, + 14258536536571968121, + 575215969686158075, + ]), + Fq::from_montgomery_limbs([ + 597836451158842199, + 1858657668022201800, + 504852646431126025, + 351889211223645499, + ]), + Fq::from_montgomery_limbs([ + 8710335429210318089, + 15939765460477572548, + 13493874982974354172, + 1195299757590572308, + ]), + Fq::from_montgomery_limbs([ + 16720044796621311460, + 6297107607479107816, + 15666086360782481298, + 946070823657072210, + ]), + Fq::from_montgomery_limbs([ + 5216764590966106189, + 18330556132248987975, + 14778046174865524185, + 601592383999400705, + ]), + Fq::from_montgomery_limbs([ + 12284358746189003172, + 15796822047553990474, + 10249807758448272935, + 1260540691182942177, + ]), + Fq::from_montgomery_limbs([ + 14671741496053748797, + 15956144823383552989, + 8978105115308257315, + 1129739098292337641, + ]), + Fq::from_montgomery_limbs([ + 16528885559305010985, + 14885472285663731653, + 8692450371018254777, + 875854298006252122, + ]), + Fq::from_montgomery_limbs([ + 11216935928075429441, + 7088545516130524118, + 3510979311098449529, + 980345967679074250, + ]), + Fq::from_montgomery_limbs([ + 8480849792218315917, + 11146529356407982510, + 4204845623809735650, + 554809226012522197, + ]), + Fq::from_montgomery_limbs([ + 9465397404983425896, + 1339596460298740670, + 2695000812316794677, + 164270174202044235, + ]), + Fq::from_montgomery_limbs([ + 12807958353199166386, + 2607509355362673632, + 9510828759520576266, + 306232379852697998, + ]), + Fq::from_montgomery_limbs([ + 14216260065142834520, + 8830790711865643815, + 7264415235010871052, + 905551093713836953, + ]), + Fq::from_montgomery_limbs([ + 1392129315389772974, + 3163495863255052347, + 5961497987857813198, + 47707649459794917, + ]), + ]), + mds: MdsMatrix::<3, 2, 9, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ]), + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + ]), + alpha: Alpha::Exponent(17), + rounds: RoundNumbers { r_P: 31, r_F: 8 }, + optimized_mds: OptimizedMdsMatrices { + M_hat: SquareMatrix::<2, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + ]), + v: Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + ]), + w: Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + ]), + M_prime: SquareMatrix::<3, 9>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + ]), + M_doubleprime: SquareMatrix::<3, 9>::new_from_known([ + Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ]), + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 7147916296078753751, + 11795755565450264533, + 9448453213491875784, + 183737022913545514, + ]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10406805428937057924, + 14160037477503257835, + 7036231764655967476, + 1082136417579874198, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + ]), + M_inverse: SquareMatrix::<3, 9>::new_from_known([ + Fq::from_montgomery_limbs([ + 4383832024780107759, + 7223259317565124429, + 5707462847421561422, + 885057472408297272, + ]), + Fq::from_montgomery_limbs([ + 6746251504312660021, + 9699181025413837338, + 15260914163925889303, + 35388324151454979, + ]), + Fq::from_montgomery_limbs([ + 5008847210566114882, + 8801394942975925486, + 18175922902442652272, + 916924432575702892, + ]), + Fq::from_montgomery_limbs([ + 6746251504312660021, + 9699181025413837338, + 15260914163925889303, + 35388324151454979, + ]), + Fq::from_montgomery_limbs([ + 15450583684112934333, + 18216376800760520619, + 4209613945072000948, + 155813436852978744, + ]), + Fq::from_montgomery_limbs([ + 9834172736316928124, + 189466111752828136, + 13335900722961176546, + 530999546582786085, + ]), + Fq::from_montgomery_limbs([ + 5008847210566114882, + 8801394942975925486, + 18175922902442652272, + 916924432575702892, + ]), + Fq::from_montgomery_limbs([ + 9834172736316928124, + 189466111752828136, + 13335900722961176546, + 530999546582786085, + ]), + Fq::from_montgomery_limbs([ + 11796616273943571364, + 15542379905239984210, + 1578039792447016471, + 947030710751083834, + ]), + ]), + M_hat_inverse: SquareMatrix::<2, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 17242594123341362780, + 10420431729582929402, + 13098868289430565627, + 261978409307343683, + ]), + Fq::from_montgomery_limbs([ + 4962966789362289472, + 13671436036280945585, + 17033622650389008176, + 591212102933547967, + ]), + Fq::from_montgomery_limbs([ + 4962966789362289472, + 13671436036280945585, + 17033622650389008176, + 591212102933547967, + ]), + Fq::from_montgomery_limbs([ + 2148639234720789121, + 15880825911856067065, + 16042722653708983750, + 635825847167915836, + ]), + ]), + M_00: Fq::from_montgomery_limbs([ + 15302903146332116305, + 8895355854553175376, + 548696419140371791, + 319366418254432479, + ]), + M_i: Matrix::<3, 3, 9>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16360065460916622652, + 6825609680461496913, + 5558627326231064465, + 128471165991923814, + ]), + Fq::from_montgomery_limbs([ + 7428548079683657885, + 9054293525864294989, + 16239738740266557642, + 509891970840567989, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7428548079683657885, + 9054293525864294989, + 16239738740266557642, + 509891970840567989, + ]), + Fq::from_montgomery_limbs([ + 1051461353787812132, + 3723993058108873740, + 15567687070894540562, + 722382702096971016, + ]), + ]), + v_collection: [ + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 3072474957567996411, + 7632850653899625657, + 6867324839353272651, + 1129105644996777990, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 11749409346063797401, + 13847779958722295463, + 5230051856842938218, + 809528761888529318, + ]), + Fq::from_montgomery_limbs([ + 16538317435082867476, + 140673227072662684, + 4917458456429054520, + 951347002169384040, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 8049501819868988169, + 4640840621228515661, + 5281323386686467274, + 1217317166531385469, + ]), + Fq::from_montgomery_limbs([ + 15861181624207003323, + 10871450011713172103, + 4492382029642778046, + 495041570025076744, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 491531644685882947, + 16236469504155238438, + 13405996466460073108, + 191442324574972544, + ]), + Fq::from_montgomery_limbs([ + 14234832595612208455, + 16711171142020806901, + 9818085755212544560, + 433758843793119660, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 8692243294689566788, + 17131754811489911037, + 16082421295010554115, + 245109642615998458, + ]), + Fq::from_montgomery_limbs([ + 12752747264486126419, + 12936758402746978248, + 7901753820298393242, + 1086817638717069074, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 716899015486837574, + 12929955716143301332, + 6296181173922398814, + 95630164573893864, + ]), + Fq::from_montgomery_limbs([ + 10771615223994036552, + 12477611863199363886, + 5019464732542008653, + 260172239809303582, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 2083749357590716775, + 7802489018239475310, + 4719252491703553508, + 331544147020630716, + ]), + Fq::from_montgomery_limbs([ + 11839081110669849836, + 16458332811546812068, + 4108523134706353886, + 1014020374083768583, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 11143510974855252250, + 1906425947937085984, + 2407368748249553491, + 504368299222388920, + ]), + Fq::from_montgomery_limbs([ + 8041950831366606113, + 14611771049638947187, + 11221299042990583579, + 744635656555856530, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 15987773674750471853, + 7582780421302456968, + 3513070142855093124, + 449192997718482772, + ]), + Fq::from_montgomery_limbs([ + 1698389311466971615, + 4208825745762883192, + 17737380562723619127, + 1023230515994865951, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 15719775543772287808, + 4711976878746234330, + 9616083067266331949, + 1291758636403773818, + ]), + Fq::from_montgomery_limbs([ + 11511319411419341690, + 4611804125723845050, + 17905923766281011346, + 701498562864789906, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 6775959117219461845, + 7248217303083744152, + 8323273847079805491, + 1272121734883668680, + ]), + Fq::from_montgomery_limbs([ + 15960231410259949054, + 831075562495169556, + 666337526106305827, + 827994946738712632, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 3075648154561933440, + 4787490504369527279, + 2103456873768609578, + 930535653041788534, + ]), + Fq::from_montgomery_limbs([ + 13632064958207562507, + 2403612539570381736, + 9671114344743639907, + 554518676653218341, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 16017511834618514656, + 10675130055946071909, + 4737919029540133580, + 682111021257012783, + ]), + Fq::from_montgomery_limbs([ + 4054052073615595653, + 15900491953977945207, + 9657244812600116702, + 746793989576728670, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 11427159084253523216, + 8137374149736453962, + 493707633722255071, + 574786622341431128, + ]), + Fq::from_montgomery_limbs([ + 3016813624761290833, + 9410383431703917657, + 207322790806709582, + 604735846059941483, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 13182715603850996122, + 1385581621557644096, + 15928797776098706943, + 1247128249672542744, + ]), + Fq::from_montgomery_limbs([ + 12343557143080639521, + 10608577464123341465, + 8700628699767163855, + 822798305869360351, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 15640932130097417474, + 2198144264546084253, + 15157422365823566225, + 162345305798039707, + ]), + Fq::from_montgomery_limbs([ + 15379897571473551238, + 13605062526804796454, + 1262497433072300524, + 325397323402951460, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 11985517729662602408, + 11378058393967136140, + 10784471266494716066, + 355758022531067864, + ]), + Fq::from_montgomery_limbs([ + 15749607349459966392, + 10347221607350790242, + 16868641356169832097, + 9481912848277140, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 5070404887673962603, + 7505346455783472838, + 11581801124979799833, + 162417281360137989, + ]), + Fq::from_montgomery_limbs([ + 14359230556911256253, + 4739001612305070282, + 615167045189603842, + 893440173159515387, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 6892861075705566142, + 16405352091222855583, + 9442037024015442096, + 943715695188578421, + ]), + Fq::from_montgomery_limbs([ + 2681738006276381668, + 13590338127726729778, + 9006319668283998389, + 571100162557721724, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 7926076457258912989, + 15568541251154450028, + 15222738110907421829, + 194241141418124411, + ]), + Fq::from_montgomery_limbs([ + 3900695082401480226, + 13241392216815987825, + 6715445016875356020, + 559176536870193173, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 4273472679882108688, + 7043568940286842511, + 9096453621609771899, + 490785749945503317, + ]), + Fq::from_montgomery_limbs([ + 2078179201499171590, + 16327227019578678368, + 17980150213785344661, + 1297383831585962991, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 14728670056946621521, + 17042639142917167694, + 2971308019248556661, + 314387788586761162, + ]), + Fq::from_montgomery_limbs([ + 14126190491907727041, + 8208403354023925517, + 4660262216078686939, + 971808842720812284, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 12606246547610594540, + 9049616062023318605, + 11742190485797839027, + 90317661102003606, + ]), + Fq::from_montgomery_limbs([ + 7135240500841828540, + 8166637984141883895, + 4762161495768731224, + 1056050894881259133, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 11752411941768010421, + 2371987101660996229, + 7910923918069285785, + 283757372746488803, + ]), + Fq::from_montgomery_limbs([ + 14169661373594066352, + 10756814747639910216, + 4179402566370914468, + 294039297137006515, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 12380990947758453459, + 15919689303377847053, + 4451172135381562238, + 643870172347401539, + ]), + Fq::from_montgomery_limbs([ + 16919934541410985772, + 12894445305080351094, + 3222976969400102992, + 1274426454940711344, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 17739117012754232566, + 7855016506876230601, + 10199750748041585788, + 610234517763900211, + ]), + Fq::from_montgomery_limbs([ + 14969807057009266193, + 9743543989422659962, + 265344874800963549, + 193281162476465682, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 9334899116745497567, + 1443910720530394642, + 15242704534506362012, + 557844541838643008, + ]), + Fq::from_montgomery_limbs([ + 12596150337841453197, + 17941854592742713998, + 9536226961205720981, + 193378317632915294, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 2145847197367443746, + 3494461491303192245, + 8559536859052153255, + 188641306996153597, + ]), + Fq::from_montgomery_limbs([ + 6619736277081498517, + 16354589870583930111, + 5727794428272011445, + 472934899434235719, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 15229354881950810050, + 13117262548706587, + 18434975406822541359, + 430449497798843798, + ]), + Fq::from_montgomery_limbs([ + 4585061371183060684, + 14866599352008180181, + 17851236730068556506, + 483368166519918339, + ]), + ]), + Matrix::<1, 2, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 16121753970412208543, + 9309799407998260359, + 13316268079574695590, + 1332560915242838761, + ]), + Fq::from_montgomery_limbs([ + 5320180137128926885, + 4585099896596608821, + 4959026927695406777, + 12672238118064834, + ]), + ]), + ], + w_hat_collection: [ + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 7147916296078753751, + 11795755565450264533, + 9448453213491875784, + 183737022913545514, + ]), + Fq::from_montgomery_limbs([ + 10406805428937057924, + 14160037477503257835, + 7036231764655967476, + 1082136417579874198, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 18050286569012579189, + 12701735779500542307, + 16028299840828156173, + 889670182449753716, + ]), + Fq::from_montgomery_limbs([ + 17537805078915517156, + 3881567050914191905, + 15320666583506005360, + 34817918541568626, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 639651884569206475, + 3208454571154516477, + 5589814573911893755, + 812188059462663385, + ]), + Fq::from_montgomery_limbs([ + 6035414598134387451, + 221157594769622514, + 1246867853953039854, + 865666459554075403, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 10986953500964328689, + 4552354314624673085, + 10130711827018722177, + 726464205504256466, + ]), + Fq::from_montgomery_limbs([ + 14592704253024955499, + 4367720503141755092, + 3264507028823567377, + 503642346381621716, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 6929349916420721052, + 7263465717590274222, + 16428445137775857828, + 783617578238482410, + ]), + Fq::from_montgomery_limbs([ + 1105466080997706678, + 15638892732603802885, + 15163494631828844812, + 1265995546038282468, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 12695614650926966465, + 7645153902251269333, + 15007858904354383754, + 303173888887641556, + ]), + Fq::from_montgomery_limbs([ + 13532111267254117566, + 453207663850979705, + 1118439931840184625, + 1109223913114108441, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 1127605964966272093, + 459071588792078574, + 17569200668490318799, + 556567547339769587, + ]), + Fq::from_montgomery_limbs([ + 743383751775379478, + 2152757563916176356, + 18215266305796881375, + 613050128242856475, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 7479292154348380014, + 12505834466797528681, + 7061175132070981799, + 1037799745298480638, + ]), + Fq::from_montgomery_limbs([ + 4733881782580367683, + 13385554219210821909, + 11595152338390400937, + 1286877367267536722, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 10482398298648703137, + 13154284141257785070, + 12900892582326783232, + 1312370380898727254, + ]), + Fq::from_montgomery_limbs([ + 7694076120856540521, + 15146007605344947747, + 3193830018416013595, + 78000754372621570, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 5244970134326960239, + 15516929113764341255, + 17564742414096943825, + 565809721348112173, + ]), + Fq::from_montgomery_limbs([ + 5301582977685139465, + 1069505112975002608, + 16894882112854195663, + 1006960914609031286, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 933807009911564028, + 17655717523721777752, + 659854032695183391, + 696948171193839726, + ]), + Fq::from_montgomery_limbs([ + 14431054331145497962, + 17304755953697263142, + 1213662370814867240, + 406071929554987935, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 12663120994246797343, + 2294330459533986298, + 12312665243517552316, + 1162434858386655769, + ]), + Fq::from_montgomery_limbs([ + 14926635415117511105, + 17764138882091983380, + 9845162467394310721, + 365262529860339315, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 14453117806705169688, + 15371763008771329739, + 859830826361086373, + 695666911485789237, + ]), + Fq::from_montgomery_limbs([ + 4372294882149658880, + 8953368466178039118, + 7175551968845157174, + 1296799522059563299, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 10743785724983518030, + 11011793084410944909, + 4710170432674399868, + 872985210632843618, + ]), + Fq::from_montgomery_limbs([ + 17034928244178709962, + 7064630411064620365, + 11395663509669588708, + 435858474778976283, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 376125808430990068, + 3949770427712474479, + 1831829189608085506, + 1033600417294508604, + ]), + Fq::from_montgomery_limbs([ + 10474175416970714387, + 7638666470072040137, + 15323998975775188709, + 499861799254400548, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 1311503503152331198, + 10444356300795820152, + 14006643509954394380, + 360275028297029580, + ]), + Fq::from_montgomery_limbs([ + 8848990081142010576, + 3767709270230096287, + 3203373808160299103, + 388150987057922534, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 10527714796170242821, + 10614707629823438759, + 2166835449751899854, + 826442630247846539, + ]), + Fq::from_montgomery_limbs([ + 6013609006746740436, + 17829255150171580013, + 4865370498689675602, + 631806865209492278, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 15407698184224138641, + 13892993523782417432, + 11074522626536989473, + 1282147673049091223, + ]), + Fq::from_montgomery_limbs([ + 13566156582579433121, + 10666124267110644787, + 17585510383615080517, + 460461758314188289, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 242069913640544639, + 8584725967717195423, + 8673969491922319906, + 906855204727712918, + ]), + Fq::from_montgomery_limbs([ + 7507622872789915132, + 8838834878197495556, + 4143887577251148647, + 147314013318059527, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 739343839918695474, + 15137511284934501835, + 8206744331706291412, + 460517726754831566, + ]), + Fq::from_montgomery_limbs([ + 5332098194526476884, + 17462053065946204764, + 17109918215020530224, + 45500621783055396, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 7181843829067274762, + 93170180385149654, + 16601265500332534068, + 692920224266685092, + ]), + Fq::from_montgomery_limbs([ + 17373541931105532396, + 11757401236546761356, + 8986928677878657520, + 855377794858428568, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 16770152912401058713, + 7784323106136704842, + 3166414142982631778, + 252798645948426673, + ]), + Fq::from_montgomery_limbs([ + 9867428128375842792, + 6330871821464522409, + 2509737650104409073, + 87377932535113034, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 9620378538351684400, + 16259903847898782084, + 14224517332394904862, + 248783024579596034, + ]), + Fq::from_montgomery_limbs([ + 15289486933546124534, + 5057961130890228616, + 5618412873763815158, + 1218252246195044797, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 18285461524892798097, + 1312649631515945874, + 2702563113361998981, + 156990921411102370, + ]), + Fq::from_montgomery_limbs([ + 16897672275046167563, + 14631253948673542966, + 7825433188494427672, + 497140819371349325, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 5586425496410891559, + 3860435103896432777, + 15075562942840298887, + 539774915240951994, + ]), + Fq::from_montgomery_limbs([ + 18444236515588467614, + 2138469830557977395, + 8290712504743660259, + 832327778452741186, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 15144610075012749322, + 11801332079357554718, + 11652842602527962385, + 396912768209767018, + ]), + Fq::from_montgomery_limbs([ + 10639969620247737667, + 7334159324553590340, + 15063492084884778567, + 878961650630548788, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 18348264072788817511, + 8009061068808737218, + 6097418426121505352, + 1211183153837556564, + ]), + Fq::from_montgomery_limbs([ + 17198860156343170394, + 2167538157704278478, + 10949270097435223366, + 928056824653534234, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 10634763804674129031, + 9612181115928191305, + 7893421171473086290, + 251268211819044542, + ]), + Fq::from_montgomery_limbs([ + 12969986235926373418, + 712178654575523278, + 3830673788986900912, + 1046343437814522982, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 4298621992800380154, + 4055578536241120435, + 9617612244989535309, + 382604375840733162, + ]), + Fq::from_montgomery_limbs([ + 18067399474523304446, + 12223555489918789755, + 9993950631657703109, + 1048484019905387459, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 13058818877006642653, + 18414014235319212231, + 14027764563566307518, + 703825358964196766, + ]), + Fq::from_montgomery_limbs([ + 9830948603405623404, + 3341559968925646454, + 12259602563968066179, + 912923676012093495, + ]), + ]), + Matrix::<2, 1, 2>::new_from_known([ + Fq::from_montgomery_limbs([ + 8043127764066461437, + 14803670394754936674, + 15225608398783219441, + 893330814736280447, + ]), + Fq::from_montgomery_limbs([ + 4386126239109851849, + 12096965878015338652, + 13672154659709754401, + 191338360587662586, + ]), + ]), + ], + }, + optimized_arc: OptimizedArcMatrix::<39, 3, 117>::new_from_known([ + Fq::from_montgomery_limbs([ + 13532052565085671856, + 13175575834742130482, + 14571043277169067394, + 1128324334676141805, + ]), + Fq::from_montgomery_limbs([ + 10586567975029405298, + 5987505274649066590, + 9663655893165983133, + 381788629769180835, + ]), + Fq::from_montgomery_limbs([ + 7404335995308317606, + 10342209374602516054, + 14679697400509748167, + 1259991645283011647, + ]), + Fq::from_montgomery_limbs([ + 12711294721892819516, + 8412935995118692797, + 7069737649526067295, + 549549236990677487, + ]), + Fq::from_montgomery_limbs([ + 128694122049037398, + 15825223235256271389, + 74647683628497806, + 403759781237802093, + ]), + Fq::from_montgomery_limbs([ + 3501552524290051296, + 10688664658423588201, + 8345653809557910120, + 766292783896459938, + ]), + Fq::from_montgomery_limbs([ + 13998055823902745235, + 15535161481341849823, + 9848874496394823215, + 579121379437172744, + ]), + Fq::from_montgomery_limbs([ + 16363263235454987811, + 9117252686821547535, + 4794867261658414781, + 418411818796950741, + ]), + Fq::from_montgomery_limbs([ + 3710344964675021293, + 13957371261080223237, + 15195218532629186765, + 760708816844813378, + ]), + Fq::from_montgomery_limbs([ + 16135673103471103205, + 13943139040297964408, + 12037506718934223099, + 1187380734246932890, + ]), + Fq::from_montgomery_limbs([ + 11326210002632211732, + 2893415499386035614, + 2949171194607212014, + 568849018592141776, + ]), + Fq::from_montgomery_limbs([ + 13925494990768706056, + 13969996543019858204, + 13457764640058086886, + 114396439087701688, + ]), + Fq::from_montgomery_limbs([ + 16351586607272228519, + 6269966282891300082, + 12490381894697744781, + 834648274293416263, + ]), + Fq::from_montgomery_limbs([ + 8699206025130866823, + 13848489523222436720, + 17766508449394109403, + 431734376631208559, + ]), + Fq::from_montgomery_limbs([ + 14700415236695759193, + 989025675687828871, + 13240672964496825486, + 748003865243962980, + ]), + Fq::from_montgomery_limbs([ + 9214232780783070449, + 14602960282866682732, + 11429301634278273897, + 1184931746603958427, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16918226576727530642, + 1752255981222787988, + 8817230776216477202, + 44114642545061535, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17686129245176609251, + 9674361899119805900, + 9621008306276981352, + 1255623840056121919, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10364230610752960663, + 23910044943574860, + 13406278639865106346, + 1187183151912921258, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 248381449107176191, + 10056558558812610353, + 2935304612801451247, + 120643143760647643, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3742705574147487793, + 4686024809709633429, + 16670792739934718940, + 963767567248511600, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13818431717487898976, + 12602204397986520132, + 12877538805399868553, + 707732823673573212, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1195524900235019800, + 10255957893776983045, + 17449323294835632168, + 1338958398006622846, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 561235443935255932, + 15462505627668153377, + 15246107413854263254, + 504727735813765489, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5653045592293015958, + 3671862246408432263, + 7122935779684396291, + 7330594669677847, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16480412187204912644, + 2983094841853066492, + 7734631524643537613, + 311160218197782574, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6090779872384130856, + 3292296244344624559, + 14896131539665449347, + 1294066060635586937, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4370576169448893808, + 12445091387328652898, + 4928931422125126888, + 1290627573012356056, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12051840169477196739, + 3885157525438683377, + 15460563848822265709, + 371728860504033938, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12236751112463919400, + 10461860001193096708, + 18252891305864475627, + 422909291039524709, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18089753698150707757, + 11984889148538027693, + 14464882633247838012, + 989393623597663020, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5947035363582041005, + 10165882087299872929, + 17463545041843069654, + 661760845006520055, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12977803574308926045, + 11603755933737030579, + 13169368374394024728, + 264871768182436351, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14419631251839461179, + 11301211733526246620, + 15903366283781829327, + 773728645355215118, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8308101026985166387, + 7726119298360373485, + 10162441497855384077, + 189302244249177174, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12797668472951431300, + 13827763415857474023, + 14698122219544096234, + 1231082431746263546, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9036419769160652203, + 14179415714825094519, + 1197988233308979514, + 1215761277179828327, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4698260184489833131, + 10279668321438795791, + 12410250074379293741, + 1217500461705392747, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12177225652612451477, + 6323252679960824348, + 2982537087474808916, + 1265097794155080401, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10936589967746372713, + 1315336780394893005, + 11802358065708482185, + 926000082171380579, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9602562037821535541, + 6086973874915377682, + 14393911822211896593, + 197271477318300291, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 702050427916060493, + 13537318979711565901, + 15026546140525067500, + 581472194808990332, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16536035763574678680, + 10430337823398608412, + 14603639842087973366, + 184743670576012836, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 703457789642747182, + 14826807143913517966, + 278957441362419559, + 572670923489064055, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11986568387549799012, + 17060314952512548206, + 5848465513240015059, + 844014096680008996, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8710335429210318089, + 15939765460477572548, + 13493874982974354172, + 1195299757590572308, + ]), + Fq::from_montgomery_limbs([ + 16720044796621311460, + 6297107607479107816, + 15666086360782481298, + 946070823657072210, + ]), + Fq::from_montgomery_limbs([ + 5216764590966106189, + 18330556132248987975, + 14778046174865524185, + 601592383999400705, + ]), + Fq::from_montgomery_limbs([ + 12284358746189003172, + 15796822047553990474, + 10249807758448272935, + 1260540691182942177, + ]), + Fq::from_montgomery_limbs([ + 14671741496053748797, + 15956144823383552989, + 8978105115308257315, + 1129739098292337641, + ]), + Fq::from_montgomery_limbs([ + 16528885559305010985, + 14885472285663731653, + 8692450371018254777, + 875854298006252122, + ]), + Fq::from_montgomery_limbs([ + 11216935928075429441, + 7088545516130524118, + 3510979311098449529, + 980345967679074250, + ]), + Fq::from_montgomery_limbs([ + 8480849792218315917, + 11146529356407982510, + 4204845623809735650, + 554809226012522197, + ]), + Fq::from_montgomery_limbs([ + 9465397404983425896, + 1339596460298740670, + 2695000812316794677, + 164270174202044235, + ]), + Fq::from_montgomery_limbs([ + 12807958353199166386, + 2607509355362673632, + 9510828759520576266, + 306232379852697998, + ]), + Fq::from_montgomery_limbs([ + 14216260065142834520, + 8830790711865643815, + 7264415235010871052, + 905551093713836953, + ]), + Fq::from_montgomery_limbs([ + 1392129315389772974, + 3163495863255052347, + 5961497987857813198, + 47707649459794917, + ]), + ]), + } +} diff --git a/poseidon377/src/params/rate_3.rs b/poseidon377/src/params/rate_3.rs new file mode 100644 index 0000000..93e8cf6 --- /dev/null +++ b/poseidon377/src/params/rate_3.rs @@ -0,0 +1,3244 @@ +use decaf377::Fq; +use poseidon_parameters::v1::{ + Alpha, ArcMatrix, Matrix, MdsMatrix, OptimizedArcMatrix, OptimizedMdsMatrices, + PoseidonParameters, RoundNumbers, SquareMatrix, +}; + +/// Parameters for the rate-3 instance of Poseidon. +pub const fn rate_3() -> PoseidonParameters<4, 3, 16, 9, 39, 4, 156, 31> { + PoseidonParameters { + M: 128, + arc: ArcMatrix::<39, 4, 156>::new_from_known([ + Fq::from_montgomery_limbs([ + 15748480026335769443, + 10026984616551622801, + 2063724428730618452, + 1110463257231131824, + ]), + Fq::from_montgomery_limbs([ + 9405142820695944635, + 11887146523697465657, + 7764829263011233272, + 10688178588086322, + ]), + Fq::from_montgomery_limbs([ + 7160766575090090422, + 13093321275956005400, + 4459692368517809830, + 1324823328343033307, + ]), + Fq::from_montgomery_limbs([ + 8967803866417976527, + 10882703683899587484, + 12604355713142717837, + 913362872025451921, + ]), + Fq::from_montgomery_limbs([ + 15434913893282099231, + 3277411989792281453, + 17050922401305883749, + 1246396795570595652, + ]), + Fq::from_montgomery_limbs([ + 16287493285262395377, + 5813955731335134269, + 4301474317614585594, + 257520225036445364, + ]), + Fq::from_montgomery_limbs([ + 6906749939426292513, + 6186370802689597769, + 13121713652409052978, + 974279291569484389, + ]), + Fq::from_montgomery_limbs([ + 8879700369639612352, + 13618625792929032624, + 3907123048620659133, + 13234475218016492, + ]), + Fq::from_montgomery_limbs([ + 8645743306703223161, + 2649437454338131787, + 1563690154181407289, + 1014186398941703531, + ]), + Fq::from_montgomery_limbs([ + 3215833110701720679, + 2309636887892103305, + 8098930435412331037, + 874663616929857835, + ]), + Fq::from_montgomery_limbs([ + 12979468067887852608, + 5086746922420764336, + 15129738790560069297, + 751939553752695744, + ]), + Fq::from_montgomery_limbs([ + 2977455406847333432, + 16814711076234176662, + 2052393181081329017, + 1025504667378050833, + ]), + Fq::from_montgomery_limbs([ + 7769933776177646251, + 18381610027802955757, + 14883656026535111760, + 810712025708758153, + ]), + Fq::from_montgomery_limbs([ + 17772168373864941552, + 6465821213265847266, + 13630379320513469760, + 377801609900980707, + ]), + Fq::from_montgomery_limbs([ + 15796194027949120118, + 344995813018918925, + 1773993772309248477, + 495371203446902105, + ]), + Fq::from_montgomery_limbs([ + 2372367672613269254, + 1881994507861568925, + 12499063082888296383, + 198183890354307133, + ]), + Fq::from_montgomery_limbs([ + 8560339202466452135, + 4674741842794783289, + 2295938056459737653, + 1305584587019963566, + ]), + Fq::from_montgomery_limbs([ + 15461653997367792205, + 5090711996373026875, + 11075299042609757676, + 357873227640910306, + ]), + Fq::from_montgomery_limbs([ + 13214321932666947005, + 16528230236252211216, + 1734602115269476888, + 818804650790090647, + ]), + Fq::from_montgomery_limbs([ + 3074208048728389137, + 15294693683882801473, + 8267213793554472185, + 939723642447579953, + ]), + Fq::from_montgomery_limbs([ + 7608844071812963093, + 3353589238160526207, + 1067027003640137200, + 792698467630664137, + ]), + Fq::from_montgomery_limbs([ + 2391877978401333891, + 3445084574946968197, + 5867047100623880462, + 384653842732542416, + ]), + Fq::from_montgomery_limbs([ + 13914996210513565866, + 8700856800201437460, + 10425054275786134234, + 541663540168055488, + ]), + Fq::from_montgomery_limbs([ + 14596932606745167054, + 16496367856477422743, + 3083425729320663120, + 1085256212719522319, + ]), + Fq::from_montgomery_limbs([ + 2801764879250151374, + 12953139825024524798, + 4394381772409440172, + 830313299202608738, + ]), + Fq::from_montgomery_limbs([ + 13075739450270366768, + 9659330049829153230, + 12704212718639626523, + 379597176451908972, + ]), + Fq::from_montgomery_limbs([ + 9001536902225952463, + 6674549463409581165, + 3938882380056074877, + 470816176925644781, + ]), + Fq::from_montgomery_limbs([ + 5294884807833067443, + 14704992853616613201, + 11757098272470647345, + 665189038743785081, + ]), + Fq::from_montgomery_limbs([ + 18065518746286947233, + 11431857512891870190, + 7287431282350112106, + 995640933596957099, + ]), + Fq::from_montgomery_limbs([ + 15052981787521128144, + 7858896385113452253, + 5947479460571918718, + 325110107616048024, + ]), + Fq::from_montgomery_limbs([ + 8613576755313845653, + 13985454223970503802, + 5789054661699635475, + 985740677230137068, + ]), + Fq::from_montgomery_limbs([ + 3926674414459183479, + 15125652309946021274, + 7647466298927812509, + 538639589943257540, + ]), + Fq::from_montgomery_limbs([ + 13088032312231323780, + 5311715134728782442, + 9012071499019100799, + 1330544433302886302, + ]), + Fq::from_montgomery_limbs([ + 3664690074919872926, + 1742673068665566813, + 17290766138005523036, + 1336141459748487725, + ]), + Fq::from_montgomery_limbs([ + 16701892693656888438, + 5154406097941234252, + 2366974417176707806, + 154891066872919950, + ]), + Fq::from_montgomery_limbs([ + 8557542807233937796, + 15959352071512430351, + 4990793324727743483, + 1293908698860086179, + ]), + Fq::from_montgomery_limbs([ + 15073124381299855142, + 16058294570821288175, + 6075369664645776758, + 87903751159999429, + ]), + Fq::from_montgomery_limbs([ + 260728936241443673, + 368587472503844932, + 2223560135924572606, + 805228060621005528, + ]), + Fq::from_montgomery_limbs([ + 7269287363866321270, + 2522156147731399548, + 13054616534728649482, + 931053562448615214, + ]), + Fq::from_montgomery_limbs([ + 4160721187467010576, + 15149513473553012866, + 15656814560183579945, + 1001129190706658794, + ]), + Fq::from_montgomery_limbs([ + 14658651187247608250, + 12880504629543941444, + 10429384779372580470, + 1161303852698833077, + ]), + Fq::from_montgomery_limbs([ + 1235937067845588009, + 7263495784070768735, + 1030907402673138059, + 112249256173393847, + ]), + Fq::from_montgomery_limbs([ + 9458598589591766548, + 11826210343318171415, + 5267632108497983083, + 878978097354051448, + ]), + Fq::from_montgomery_limbs([ + 9349450799754247443, + 5592311323302686001, + 8710868002211880477, + 339828983129180906, + ]), + Fq::from_montgomery_limbs([ + 17187343190949067712, + 4809921206309548539, + 1654263325380555971, + 1029486713709570633, + ]), + Fq::from_montgomery_limbs([ + 7644765658684612346, + 13218702097576502896, + 16500195852294632749, + 1306030386106155137, + ]), + Fq::from_montgomery_limbs([ + 3505773913815738861, + 4811121454898644532, + 6220593478751174597, + 617955371370962677, + ]), + Fq::from_montgomery_limbs([ + 15743683183886237853, + 5364535566544930778, + 13962926219706156342, + 279010990417402073, + ]), + Fq::from_montgomery_limbs([ + 5534551911701805251, + 16755407359921259948, + 11104629150013572555, + 814043341910345398, + ]), + Fq::from_montgomery_limbs([ + 8944448190814835116, + 15456464214992510712, + 8458597289994495014, + 1265792487860718358, + ]), + Fq::from_montgomery_limbs([ + 3488692111583557919, + 13331987553376721589, + 18402338094634938868, + 1065887348732752750, + ]), + Fq::from_montgomery_limbs([ + 9073355603731228680, + 14479691350704356281, + 12891384335089494102, + 794286481590472402, + ]), + Fq::from_montgomery_limbs([ + 837263131188576340, + 12622228587018704025, + 17555140662019162595, + 116065994774231082, + ]), + Fq::from_montgomery_limbs([ + 14557259484417606169, + 4562566277830260822, + 4089084236598109790, + 503526388329690921, + ]), + Fq::from_montgomery_limbs([ + 4425139792333247996, + 17192910803843537440, + 6327001334305018300, + 1189405791856364044, + ]), + Fq::from_montgomery_limbs([ + 600163066110636331, + 12319630319416791292, + 4537854761219498244, + 33425175842117417, + ]), + Fq::from_montgomery_limbs([ + 6516037169436621352, + 5864705901197391949, + 9864817317342287359, + 931460564657389579, + ]), + Fq::from_montgomery_limbs([ + 11238491471364916474, + 18217352394306774045, + 8369866412509597036, + 1044188737560722381, + ]), + Fq::from_montgomery_limbs([ + 15194113841410138763, + 9713698855149445572, + 840830724179458009, + 574399528344548482, + ]), + Fq::from_montgomery_limbs([ + 10094044208972451177, + 14820311408839650250, + 832731916797264605, + 1078999540214538853, + ]), + Fq::from_montgomery_limbs([ + 16122314034306189535, + 9724832477076262589, + 15428406989180491409, + 739923283713385548, + ]), + Fq::from_montgomery_limbs([ + 990447045496888008, + 3954312775585670686, + 14414097128339264209, + 1160784537044385327, + ]), + Fq::from_montgomery_limbs([ + 12790567186406766562, + 9540692660342267401, + 12022170182251744455, + 1252399210348847836, + ]), + Fq::from_montgomery_limbs([ + 7494400281462281059, + 13969110066704963391, + 6054746240150948073, + 950110029163098453, + ]), + Fq::from_montgomery_limbs([ + 10519706033512544620, + 1273243870837414124, + 6743773117001565585, + 464260752488464109, + ]), + Fq::from_montgomery_limbs([ + 6644031355037466023, + 1291805761807358108, + 6551243450297799793, + 489432277343575283, + ]), + Fq::from_montgomery_limbs([ + 3733838584259262811, + 7236713087991210405, + 12126920741789203222, + 522094252622775454, + ]), + Fq::from_montgomery_limbs([ + 18303517822547932992, + 2807195054210467784, + 13159641576753772587, + 855829353333514728, + ]), + Fq::from_montgomery_limbs([ + 4449128923636887467, + 13611412613163493515, + 12025336169373281333, + 1332896560863403205, + ]), + Fq::from_montgomery_limbs([ + 1957451185913453258, + 11039336564323764549, + 12727456287856679131, + 228326154778309814, + ]), + Fq::from_montgomery_limbs([ + 11338427901906828980, + 109935761989873387, + 12048120310880045899, + 1308994518812657297, + ]), + Fq::from_montgomery_limbs([ + 4699060152260570516, + 11811201865491436236, + 16537310942924896508, + 1030678137510996087, + ]), + Fq::from_montgomery_limbs([ + 12646006819083654452, + 12494391672709859571, + 16266030119791019994, + 719740245520971856, + ]), + Fq::from_montgomery_limbs([ + 3201794059715843426, + 7659470317574241049, + 9031647908161946781, + 363148928753677985, + ]), + Fq::from_montgomery_limbs([ + 11915502048720601469, + 5772846818657644116, + 14815308031156385389, + 35923403898725028, + ]), + Fq::from_montgomery_limbs([ + 170799290955765955, + 1257452554540755479, + 154144376612152799, + 1049253778390741684, + ]), + Fq::from_montgomery_limbs([ + 12436956446014067805, + 12495488261233549050, + 15098105238157791389, + 981323126540180488, + ]), + Fq::from_montgomery_limbs([ + 17100349351086466568, + 15199087629262610106, + 2857850399247819097, + 933629509856035794, + ]), + Fq::from_montgomery_limbs([ + 4893555085527448580, + 9471095916978593903, + 15023640703244453163, + 410519582864510926, + ]), + Fq::from_montgomery_limbs([ + 17697020347608707279, + 18087907458231569196, + 3102461787435620980, + 62537999126012536, + ]), + Fq::from_montgomery_limbs([ + 362067899505874664, + 14616460120599181344, + 15083851369654439268, + 631595353512390885, + ]), + Fq::from_montgomery_limbs([ + 1608981123540692261, + 8134210797420893342, + 15670126385653615755, + 1081728063194062498, + ]), + Fq::from_montgomery_limbs([ + 4703704396738392227, + 9402972062611023321, + 6453958957721258724, + 851572793112159638, + ]), + Fq::from_montgomery_limbs([ + 14824233911337383260, + 4597555368896294115, + 13023979643520645931, + 1222004100879652500, + ]), + Fq::from_montgomery_limbs([ + 2891695900391958118, + 5796773624231764530, + 15491428749654748662, + 1093937749145502896, + ]), + Fq::from_montgomery_limbs([ + 10646550323399881070, + 1003826136171019194, + 8409333161078783785, + 585473798721331047, + ]), + Fq::from_montgomery_limbs([ + 10406448549383730564, + 6135682111734731503, + 11700407245549915604, + 1085967648121639010, + ]), + Fq::from_montgomery_limbs([ + 1292557270730948407, + 18351657967081052852, + 2678776828196945632, + 959596399484615466, + ]), + Fq::from_montgomery_limbs([ + 17438835186806351279, + 5684764232294129700, + 10157135796976222869, + 221407997194324483, + ]), + Fq::from_montgomery_limbs([ + 7271080368260971730, + 12425374983903708199, + 12363525356310613233, + 1110769717996073345, + ]), + Fq::from_montgomery_limbs([ + 8776284918006632977, + 15535513105129775867, + 4863301670678022317, + 606408823553952292, + ]), + Fq::from_montgomery_limbs([ + 5066052630199551249, + 15751267872424382675, + 13216457812319899775, + 20357134061436216, + ]), + Fq::from_montgomery_limbs([ + 13075702753995571952, + 11742969640320942289, + 17235366015989204124, + 1150175744034062515, + ]), + Fq::from_montgomery_limbs([ + 5797072079034365870, + 17544469376997963633, + 14801627417863273010, + 1279229494278656541, + ]), + Fq::from_montgomery_limbs([ + 7831938700179984096, + 17180774215462038883, + 4412793878621746257, + 1256681412857074070, + ]), + Fq::from_montgomery_limbs([ + 12968148811839764483, + 16811480840776650012, + 8602422769386693728, + 382111204094941728, + ]), + Fq::from_montgomery_limbs([ + 13318317749693537082, + 3768328516420896241, + 142206933916635569, + 26627989124778159, + ]), + Fq::from_montgomery_limbs([ + 11933334459503099726, + 1065153861357867533, + 11936439423614846055, + 1149053547479723905, + ]), + Fq::from_montgomery_limbs([ + 2631481992765688259, + 16002912452516972398, + 2790213850442440167, + 971241800259043027, + ]), + Fq::from_montgomery_limbs([ + 13004331011283795828, + 14189721912689256843, + 6652832565990539996, + 452227668495405848, + ]), + Fq::from_montgomery_limbs([ + 11639365468700302967, + 13626754345549226066, + 5122223316448852115, + 1295194052532032537, + ]), + Fq::from_montgomery_limbs([ + 12503775634034454216, + 12484320064934540173, + 6283031731499175779, + 1142971827879478463, + ]), + Fq::from_montgomery_limbs([ + 18442309574762645474, + 16043706756922086064, + 1203583357081319117, + 289542689638807443, + ]), + Fq::from_montgomery_limbs([ + 13599874590406072599, + 12311290605935601867, + 1953047606734609742, + 893071755833526513, + ]), + Fq::from_montgomery_limbs([ + 5038580414622442104, + 7706592482679500096, + 14281875320180208754, + 1311692136942617770, + ]), + Fq::from_montgomery_limbs([ + 9116924453968593592, + 4695211437329644351, + 122131672006113022, + 460639526001551111, + ]), + Fq::from_montgomery_limbs([ + 612695102453556953, + 17430917114440300568, + 3712227006774104749, + 434565107124519036, + ]), + Fq::from_montgomery_limbs([ + 2711460600386692082, + 5084507891975000066, + 8709631773769875914, + 701012049286425866, + ]), + Fq::from_montgomery_limbs([ + 11255000280507413421, + 5698447525751632608, + 12610021548558458685, + 1327688989507972423, + ]), + Fq::from_montgomery_limbs([ + 13754440516467115564, + 4761751981327990235, + 9432675603353781856, + 1033668598466658556, + ]), + Fq::from_montgomery_limbs([ + 2955363287632570334, + 7600733227996025654, + 12027057950170385287, + 940571561931822742, + ]), + Fq::from_montgomery_limbs([ + 9703552155773020694, + 5742947530758499792, + 15763297443315122579, + 930801506499582622, + ]), + Fq::from_montgomery_limbs([ + 12461619637026250391, + 11019870465191278910, + 15873529414143589982, + 972447937818380498, + ]), + Fq::from_montgomery_limbs([ + 14971502483088783044, + 7994961046161658478, + 1775531898359432051, + 206771972563020622, + ]), + Fq::from_montgomery_limbs([ + 4978085183441894637, + 6786252161551953403, + 1597833793868027214, + 752497765450057609, + ]), + Fq::from_montgomery_limbs([ + 8931448885295850487, + 14900305553280237157, + 2562728536608668150, + 820070530770563815, + ]), + Fq::from_montgomery_limbs([ + 11091196606428717904, + 4420547532075463625, + 6826607115289893546, + 339509882889855264, + ]), + Fq::from_montgomery_limbs([ + 17256856864641998223, + 7372887677193499350, + 3097849850460902989, + 1011516479262752115, + ]), + Fq::from_montgomery_limbs([ + 9808600647888735916, + 8803141348520645434, + 18015342816914135198, + 7277772948085899, + ]), + Fq::from_montgomery_limbs([ + 4255905157964142682, + 17462645559877710531, + 3560989839800268196, + 1096116226462923784, + ]), + Fq::from_montgomery_limbs([ + 4532426149332308403, + 5237561599212546024, + 9574446344492571337, + 1288985425094911641, + ]), + Fq::from_montgomery_limbs([ + 1967144278589690647, + 13201768465226207499, + 11675172852243609220, + 79359524195858682, + ]), + Fq::from_montgomery_limbs([ + 17074450551687194476, + 16589227351082498259, + 5830030722038791303, + 89110035164054224, + ]), + Fq::from_montgomery_limbs([ + 3452204926739135764, + 5895291203558274423, + 3429941105331217419, + 412361227440985099, + ]), + Fq::from_montgomery_limbs([ + 13210175262635268816, + 10104864748580005346, + 8240781084290164303, + 168682271830987859, + ]), + Fq::from_montgomery_limbs([ + 11525437706352653758, + 15971301990722544967, + 11793391563239286407, + 916031980478624773, + ]), + Fq::from_montgomery_limbs([ + 4389204516004340807, + 12441134604525330513, + 4580143368417059639, + 517606274666844106, + ]), + Fq::from_montgomery_limbs([ + 6072537589623190443, + 14275421712964513977, + 2053999455871445365, + 139159162484497428, + ]), + Fq::from_montgomery_limbs([ + 2238091790845791439, + 11897799578864713665, + 10598112979470640955, + 1188516484791317810, + ]), + Fq::from_montgomery_limbs([ + 13761995375578127219, + 14445881686168874002, + 8730842343343508106, + 75023619749953264, + ]), + Fq::from_montgomery_limbs([ + 1876841868458551114, + 9237020881271725184, + 16194471067922316805, + 1271526124614314943, + ]), + Fq::from_montgomery_limbs([ + 14877699808508013807, + 12080680751297116426, + 594057086705046692, + 93241042719742539, + ]), + Fq::from_montgomery_limbs([ + 12830970035552954850, + 16724821255552997190, + 6657724498740869088, + 1006163239038875246, + ]), + Fq::from_montgomery_limbs([ + 4789503842637643824, + 15837144161010273010, + 14535004913645399525, + 386886467210416122, + ]), + Fq::from_montgomery_limbs([ + 4113769938336656446, + 12767551034851750890, + 6208225444974425038, + 384107338921112388, + ]), + Fq::from_montgomery_limbs([ + 1457177616745477196, + 5817007768895882090, + 18403435531988633091, + 233268311946882765, + ]), + Fq::from_montgomery_limbs([ + 8504687346089992934, + 12196813988838752019, + 4423978201234255224, + 103085384776574023, + ]), + Fq::from_montgomery_limbs([ + 12001393905996299420, + 7906247193177979514, + 2548978637445902098, + 508311140484542625, + ]), + Fq::from_montgomery_limbs([ + 12545595986735188293, + 5025452441931542801, + 9681010628496985355, + 969281160594328671, + ]), + Fq::from_montgomery_limbs([ + 4476642231459795365, + 10130322522288542164, + 5504810838816131115, + 942197574992353703, + ]), + Fq::from_montgomery_limbs([ + 12725269033496721580, + 6143157215985784613, + 2563593607564735516, + 641845243083026263, + ]), + Fq::from_montgomery_limbs([ + 16567470293191015474, + 17979338546951754349, + 679740711221916675, + 389452091580807800, + ]), + Fq::from_montgomery_limbs([ + 11781729507075158888, + 16614033708022660131, + 8066891565891024775, + 1321986181569835272, + ]), + Fq::from_montgomery_limbs([ + 15263301520898366582, + 5379961920461128458, + 5298170819253721050, + 871089269493660926, + ]), + Fq::from_montgomery_limbs([ + 5741830111596365525, + 11415264909554107470, + 8692411149271156415, + 108534814929374467, + ]), + Fq::from_montgomery_limbs([ + 14889457972591320596, + 4443631419689297602, + 9576604194859673886, + 55036543682599971, + ]), + Fq::from_montgomery_limbs([ + 15281837068987139929, + 16419105318903348956, + 3445836523780143538, + 1293417868939267170, + ]), + Fq::from_montgomery_limbs([ + 17836346323317710151, + 12227034928325499140, + 2533213127903144227, + 888374169811671044, + ]), + Fq::from_montgomery_limbs([ + 17190507118724296154, + 11902410769486810674, + 1884965616619903297, + 288715797041361057, + ]), + Fq::from_montgomery_limbs([ + 3698781841092321912, + 12743575315417669826, + 2170730182690456487, + 1222843211331174337, + ]), + Fq::from_montgomery_limbs([ + 4016814140820935108, + 7695810038153355283, + 9484931309805354358, + 1136167194218052037, + ]), + Fq::from_montgomery_limbs([ + 14104529875826633218, + 4636945317611530138, + 9502367629041549061, + 1255556235831136969, + ]), + Fq::from_montgomery_limbs([ + 3761991760077630951, + 15074729225518792210, + 17745896690436879228, + 1023440924724847735, + ]), + Fq::from_montgomery_limbs([ + 15850125405934611308, + 14029919305144561597, + 18399969854542387983, + 1223450657234113398, + ]), + Fq::from_montgomery_limbs([ + 15153111831948502891, + 17514853580286890635, + 16559251203856754825, + 921126073718956725, + ]), + Fq::from_montgomery_limbs([ + 14464801899277986702, + 11416622266096337177, + 5506399331882969115, + 210576422101801202, + ]), + ]), + mds: MdsMatrix::<4, 3, 16, 9>::new_from_known([ + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + ]), + alpha: Alpha::Exponent(17), + rounds: RoundNumbers { r_P: 31, r_F: 8 }, + optimized_mds: OptimizedMdsMatrices { + M_hat: SquareMatrix::<3, 9>::new_from_known([ + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + ]), + v: Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + ]), + w: Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + ]), + M_prime: SquareMatrix::<4, 16>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + ]), + M_doubleprime: SquareMatrix::<4, 16>::new_from_known([ + Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 3912868093747842187, + 13891638599538547029, + 10034520463596988736, + 24923162524038143, + ]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12940192809323646256, + 10063211937356421632, + 16102475073289099807, + 635255441558029483, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13439545502292733320, + 8210365196597573290, + 10798232243990715182, + 209985169044052016, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + ]), + M_inverse: SquareMatrix::<4, 16>::new_from_known([ + Fq::from_montgomery_limbs([ + 9007339992229280139, + 10326424826243116856, + 5092355938437508509, + 1003135009120454797, + ]), + Fq::from_montgomery_limbs([ + 3793860473594899407, + 15568206114553404763, + 16793548156181542160, + 297017364836875886, + ]), + Fq::from_montgomery_limbs([ + 13118704239553060426, + 7548360664834135031, + 15187305571267045479, + 227114138088772868, + ]), + Fq::from_montgomery_limbs([ + 2709900338282071005, + 579150611132688193, + 11995391540129672972, + 212155260597768490, + ]), + Fq::from_montgomery_limbs([ + 3793860473594899407, + 15568206114553404763, + 16793548156181542160, + 297017364836875886, + ]), + Fq::from_montgomery_limbs([ + 928445210678486263, + 8868160626470841658, + 3755794146411517614, + 1205473917191967362, + ]), + Fq::from_montgomery_limbs([ + 10094677827265099397, + 10861765592258933950, + 11901484874902647424, + 945996443767726300, + ]), + Fq::from_montgomery_limbs([ + 5126644488318323641, + 9647529625230561771, + 1074775780748510466, + 567785345221932172, + ]), + Fq::from_montgomery_limbs([ + 13118704239553060426, + 7548360664834135031, + 15187305571267045479, + 227114138088772868, + ]), + Fq::from_montgomery_limbs([ + 10094677827265099397, + 10861765592258933950, + 11901484874902647424, + 945996443767726300, + ]), + Fq::from_montgomery_limbs([ + 824862419246658903, + 16129767034744593238, + 2170701329025733649, + 1301512370243790878, + ]), + Fq::from_montgomery_limbs([ + 3590917015388128985, + 13161152940282392610, + 1559289252300983907, + 436823818333081923, + ]), + Fq::from_montgomery_limbs([ + 2709900338282071005, + 579150611132688193, + 11995391540129672972, + 212155260597768490, + ]), + Fq::from_montgomery_limbs([ + 5126644488318323641, + 9647529625230561771, + 1074775780748510466, + 567785345221932172, + ]), + Fq::from_montgomery_limbs([ + 3590917015388128985, + 13161152940282392610, + 1559289252300983907, + 436823818333081923, + ]), + Fq::from_montgomery_limbs([ + 7790664405396569236, + 15096721329668270063, + 11927867068824539342, + 454228276177545737, + ]), + ]), + M_hat_inverse: SquareMatrix::<3, 9>::new_from_known([ + Fq::from_montgomery_limbs([ + 3075677070517273610, + 12935975526496926241, + 5413643861495614409, + 209652601170259502, + ]), + Fq::from_montgomery_limbs([ + 5785577408799344615, + 13515126137629614434, + 17409035401625287381, + 421807861768027992, + ]), + Fq::from_montgomery_limbs([ + 17408664359600548624, + 17034391550693366562, + 14790887709711326522, + 240850225403047528, + ]), + Fq::from_montgomery_limbs([ + 5785577408799344615, + 13515126137629614434, + 17409035401625287381, + 421807861768027992, + ]), + Fq::from_montgomery_limbs([ + 6563011294473575235, + 14911990801343518815, + 5387840296410814352, + 742514872555164941, + ]), + Fq::from_montgomery_limbs([ + 3251880405938485206, + 8073678362843046478, + 14394469848155607566, + 254586312717322188, + ]), + Fq::from_montgomery_limbs([ + 17408664359600548624, + 17034391550693366562, + 14790887709711326522, + 240850225403047528, + ]), + Fq::from_montgomery_limbs([ + 3251880405938485206, + 8073678362843046478, + 14394469848155607566, + 254586312717322188, + ]), + Fq::from_montgomery_limbs([ + 13824643481143691730, + 14179537619338997380, + 15459123094703748781, + 28520280494317649, + ]), + ]), + M_00: Fq::from_montgomery_limbs([ + 16270238816294404093, + 17510165790819614716, + 15988650198697570299, + 575844906362867708, + ]), + M_i: Matrix::<4, 4, 16>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15179341900948762797, + 11777292160962496113, + 5824707706538620273, + 936937875498611239, + ]), + Fq::from_montgomery_limbs([ + 1606954441813089504, + 12826102157655983484, + 14966661657048055395, + 819162019713750967, + ]), + Fq::from_montgomery_limbs([ + 18056108788388345532, + 17234016165201706377, + 6789576351003995708, + 125032483782692849, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1606954441813089504, + 12826102157655983484, + 14966661657048055395, + 819162019713750967, + ]), + Fq::from_montgomery_limbs([ + 11752092954103863583, + 5034202175795696722, + 3707413120985258698, + 30603057527914360, + ]), + Fq::from_montgomery_limbs([ + 9883657716457256646, + 10991555415607003281, + 6328965851154270623, + 1087433766327205373, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18056108788388345532, + 17234016165201706377, + 6789576351003995708, + 125032483782692849, + ]), + Fq::from_montgomery_limbs([ + 9883657716457256646, + 10991555415607003281, + 6328965851154270623, + 1087433766327205373, + ]), + Fq::from_montgomery_limbs([ + 9018019125940148120, + 4443737769172605648, + 9114883657740606330, + 325721335091457982, + ]), + ]), + v_collection: [ + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 3544248464247567155, + 2397127324301944422, + 9674390580977628774, + 1114449731390581691, + ]), + Fq::from_montgomery_limbs([ + 10793968004403082763, + 14776098320186757028, + 3926381262294758649, + 695945431440508002, + ]), + Fq::from_montgomery_limbs([ + 2462384498404250202, + 12590306298374345930, + 11038784733069574134, + 419995880141749771, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 13532986407775683895, + 9476195915097473266, + 1008114724683017572, + 545860035442724601, + ]), + Fq::from_montgomery_limbs([ + 16204216982352313226, + 12925674836598514697, + 6751896652466221822, + 941483813900869065, + ]), + Fq::from_montgomery_limbs([ + 17313019480228630806, + 566130559971125633, + 11091260944862748358, + 830377232140527827, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 13653317352261633777, + 10493929866956769626, + 8396755137825041221, + 1146048882209297127, + ]), + Fq::from_montgomery_limbs([ + 4132278932442914408, + 14861671218963566328, + 7959790402925606057, + 1318243553399078199, + ]), + Fq::from_montgomery_limbs([ + 13456767915419596367, + 17246911423899751971, + 5711218416857391278, + 35403035103928169, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 12907160498704673184, + 12152379198293294711, + 9252679699965582400, + 1224554265731421992, + ]), + Fq::from_montgomery_limbs([ + 13419199242664167498, + 13891452473958728318, + 13543072901518191311, + 1037106053989502131, + ]), + Fq::from_montgomery_limbs([ + 16666897222883125359, + 12131730689573449836, + 13003710399516055414, + 648272461984720515, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 13991351580088989461, + 17864339801785851041, + 11695126599066872867, + 921749339582652232, + ]), + Fq::from_montgomery_limbs([ + 11906579800297278037, + 11470441940361903448, + 15097374289742739909, + 275174984759910272, + ]), + Fq::from_montgomery_limbs([ + 18232546040145726314, + 14147307759659284922, + 991776681097878315, + 1065560959455072221, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 3117800866767190184, + 1873664776760606669, + 13118797281780700540, + 918694694774008673, + ]), + Fq::from_montgomery_limbs([ + 16198059297050513347, + 8432506190058226772, + 9370514214732897655, + 212402421053033076, + ]), + Fq::from_montgomery_limbs([ + 2518782581476945766, + 6771388879653376635, + 1394823901821599775, + 786725020056686548, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 4999125751846201369, + 9316583554979616827, + 11717167420397718381, + 1066546495878431233, + ]), + Fq::from_montgomery_limbs([ + 1873871365393108203, + 11936414467331150546, + 11113449918732250015, + 317274884289334993, + ]), + Fq::from_montgomery_limbs([ + 5753682051272078512, + 3471409429911499297, + 5526758011092646462, + 1323229023757477097, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 2662759502586109043, + 1695416312126819095, + 1012723056571339871, + 933004606031207884, + ]), + Fq::from_montgomery_limbs([ + 16642301735251917773, + 1183412391970839036, + 3358256470522122468, + 496531810743047820, + ]), + Fq::from_montgomery_limbs([ + 14229377213726726413, + 17261160081985153069, + 9576276288950416830, + 700741200569462595, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 6784297665956970408, + 11357803791388406129, + 11332180445619439434, + 1106781037719016960, + ]), + Fq::from_montgomery_limbs([ + 73464770077821962, + 229820375535861605, + 4835258747884954879, + 991229687813626051, + ]), + Fq::from_montgomery_limbs([ + 10226838402609267711, + 357277105338386461, + 10898037771405216876, + 738876256175427730, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 12081508766912259869, + 15930347767913903841, + 8853663281043083447, + 10038595465753804, + ]), + Fq::from_montgomery_limbs([ + 112737203409514332, + 16114412090287437958, + 6856032020202317595, + 113207183629292293, + ]), + Fq::from_montgomery_limbs([ + 16338645855580340203, + 2107869018362076089, + 12567383037519742350, + 815641356564041922, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 12125233544299543001, + 11893476647476625145, + 15457331543628022009, + 800448530217165123, + ]), + Fq::from_montgomery_limbs([ + 16675745322148137368, + 1493849644880660500, + 8185984318393084462, + 138242285432587533, + ]), + Fq::from_montgomery_limbs([ + 17724307965454702231, + 4807522038799077672, + 8746642154843823745, + 883881308868446414, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 5656989936467702279, + 3451526239075705633, + 12473714456419681817, + 720076561380511801, + ]), + Fq::from_montgomery_limbs([ + 2752710254647861908, + 11030634120397179297, + 7520710074325720708, + 849095153678924863, + ]), + Fq::from_montgomery_limbs([ + 15714192245785854425, + 1934486269946887645, + 249860026764225808, + 1186606499687026685, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 1065442882426850105, + 18187640339393109068, + 8850384031746892082, + 317569289072515041, + ]), + Fq::from_montgomery_limbs([ + 1837681773828322091, + 10850972211403707738, + 336406577412961307, + 885368386317519809, + ]), + Fq::from_montgomery_limbs([ + 15758214746904074141, + 11583431684684102838, + 7662385228843486433, + 217065657978291661, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 2532634061285367793, + 4387885387692314654, + 12158131981630891597, + 230565483900354414, + ]), + Fq::from_montgomery_limbs([ + 13346419382798549501, + 18280976687063744023, + 5606331118089126185, + 273578743992252446, + ]), + Fq::from_montgomery_limbs([ + 17577657789855982030, + 9630457784692257422, + 12902853055721181839, + 36459624765202074, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 9935908372408102992, + 14641284087709280054, + 17684292083487177951, + 1155088959507788459, + ]), + Fq::from_montgomery_limbs([ + 541701721303367728, + 3959174565794182274, + 18151179085562458542, + 340776254243440974, + ]), + Fq::from_montgomery_limbs([ + 17690336527687088662, + 10937885152973991052, + 3836836874424836886, + 1090509013794447238, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 12310573214022515884, + 3043141462744167127, + 7406092407251694082, + 9160197655286166, + ]), + Fq::from_montgomery_limbs([ + 5101804845510497503, + 7081024525590050191, + 11990249650950760548, + 264716438448155623, + ]), + Fq::from_montgomery_limbs([ + 14013782434072143361, + 18031550597362521222, + 4176916092795610844, + 1008783913934215313, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 5197923006462389769, + 10850213912970425984, + 6236288807254229677, + 381647096775612803, + ]), + Fq::from_montgomery_limbs([ + 16904562081938006603, + 1107639524721847015, + 12857487247803522951, + 271937989000148046, + ]), + Fq::from_montgomery_limbs([ + 7013951325055848953, + 17628406277137302222, + 10293198099660764650, + 1028289934164465192, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 9440252581760876632, + 13906337780931242750, + 7219961419517025615, + 863594454449643923, + ]), + Fq::from_montgomery_limbs([ + 12415229001429896965, + 11797271759794076948, + 1936084790537971337, + 467019200964667988, + ]), + Fq::from_montgomery_limbs([ + 13553333187067381210, + 1913316352777824197, + 2458517210763467943, + 416174277494956025, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 7868885723930814728, + 3969684852222006688, + 847603129181085226, + 823204710257787357, + ]), + Fq::from_montgomery_limbs([ + 2624306993317474736, + 1804999503475194353, + 13323117091522537138, + 113213718216814537, + ]), + Fq::from_montgomery_limbs([ + 13028853788877299982, + 16207030875451345887, + 2928890708384561735, + 948835740600760535, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 10332479856281518610, + 5461907926022368118, + 7566281008880752185, + 864542613737871414, + ]), + Fq::from_montgomery_limbs([ + 11550343341750412987, + 1921332364560602185, + 10690162369512005698, + 600190744590186860, + ]), + Fq::from_montgomery_limbs([ + 11343163367577472637, + 7523233831279170268, + 14378595658429552329, + 120678106820511750, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 1497803481831246817, + 7312638636652871954, + 34925480233639111, + 44726202564591048, + ]), + Fq::from_montgomery_limbs([ + 6152756361006073958, + 6090155380815116625, + 6481578954979806710, + 476190110671401465, + ]), + Fq::from_montgomery_limbs([ + 18102241645952999143, + 12827175776728527569, + 10917946848969687318, + 1031360619507992497, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 10479806376196948796, + 1250933353292865403, + 9714052636425979898, + 724896984716198201, + ]), + Fq::from_montgomery_limbs([ + 3536451958691514845, + 3820878089540374661, + 1602865878357815152, + 303292371629072230, + ]), + Fq::from_montgomery_limbs([ + 2647458017961703424, + 14255003531541688237, + 9264134941484745925, + 1144438898154277748, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 14896674334234435047, + 6601140327636410720, + 11594733032791631077, + 947808208377648736, + ]), + Fq::from_montgomery_limbs([ + 93857753711709862, + 17114219253807441153, + 16571911382240086620, + 644986335071170285, + ]), + Fq::from_montgomery_limbs([ + 11491045973623638105, + 5832623718891215316, + 4637897368334583442, + 1270136782835782403, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 12059760086965268413, + 2104859632417338119, + 3074047925029609319, + 208685506241841351, + ]), + Fq::from_montgomery_limbs([ + 507458650320731749, + 9076652763882528689, + 10828995108044982790, + 52861166057592230, + ]), + Fq::from_montgomery_limbs([ + 5221245564257429544, + 602546441039285868, + 15463515802777952068, + 500262458682360187, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 7894603091209534363, + 5963299443776147743, + 13622917766282071553, + 713444535504669723, + ]), + Fq::from_montgomery_limbs([ + 4707822806056225947, + 13008601324591260598, + 6664196336989843628, + 361594494120552721, + ]), + Fq::from_montgomery_limbs([ + 7234555332968855468, + 13223173585719696534, + 305242624856210053, + 317409461914184558, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 11052531972415731524, + 6240249964832493008, + 4690512975789608724, + 274300931659090955, + ]), + Fq::from_montgomery_limbs([ + 12865203614941348009, + 13629535421935003532, + 14381802801123693296, + 1108602536075241162, + ]), + Fq::from_montgomery_limbs([ + 5342089493189303187, + 11299417329134660514, + 10437815285599784456, + 224625807758727328, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 9419019633707904193, + 17287104400249488354, + 2449834218878066498, + 880784160362712225, + ]), + Fq::from_montgomery_limbs([ + 1290387194510150606, + 300217878573287348, + 14712510331530271944, + 675169241465258261, + ]), + Fq::from_montgomery_limbs([ + 4319449301091482228, + 6604997191961440301, + 3677473832318302588, + 1226257433999087430, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 9534885027294214845, + 4233504142154122132, + 671184154419538440, + 588715198189399632, + ]), + Fq::from_montgomery_limbs([ + 7834331777517711657, + 12046762886677754640, + 12085017871628461830, + 1280695769450865349, + ]), + Fq::from_montgomery_limbs([ + 17051048636914562332, + 9931763496822042016, + 812132922227142181, + 1215806818267015733, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 10248407954863227910, + 6765342538198222232, + 3376905111922655053, + 689295470605671650, + ]), + Fq::from_montgomery_limbs([ + 852480703421168492, + 12355793660799378618, + 6731311636032405498, + 552777249330804449, + ]), + Fq::from_montgomery_limbs([ + 1991623127336121727, + 6505031450361927139, + 15924460190557187785, + 1320271660125443798, + ]), + ]), + Matrix::<1, 3, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 17438135180680113454, + 12154982230827864980, + 10857096699189529725, + 334861850663499479, + ]), + Fq::from_montgomery_limbs([ + 12624059910780607141, + 14938141535714956518, + 10243410760322861612, + 175466020402160466, + ]), + Fq::from_montgomery_limbs([ + 11857086838875231849, + 16760011700969259517, + 8560727830203057188, + 152554536976681898, + ]), + ]), + ], + w_hat_collection: [ + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 3912868093747842187, + 13891638599538547029, + 10034520463596988736, + 24923162524038143, + ]), + Fq::from_montgomery_limbs([ + 12940192809323646256, + 10063211937356421632, + 16102475073289099807, + 635255441558029483, + ]), + Fq::from_montgomery_limbs([ + 13439545502292733320, + 8210365196597573290, + 10798232243990715182, + 209985169044052016, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 5751631526606014397, + 8462191803631620224, + 10509863267471683158, + 447861109114791478, + ]), + Fq::from_montgomery_limbs([ + 1437717886047567450, + 16559126213892176045, + 11375302712551931442, + 1010730393746897317, + ]), + Fq::from_montgomery_limbs([ + 1032470319927068309, + 9033645067614029358, + 18086293033601348125, + 304884835659797125, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 10030163671426435897, + 10038896509362625400, + 11411437429949289797, + 606845429174704889, + ]), + Fq::from_montgomery_limbs([ + 13498048305505589045, + 14368156343173972859, + 5751396272374329581, + 1272023166617958572, + ]), + Fq::from_montgomery_limbs([ + 9805803927184323301, + 13425206131835998785, + 13841345243897428245, + 615350201809158017, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 14956193223177978026, + 4328965669156513709, + 1332264507148878686, + 908612595539291972, + ]), + Fq::from_montgomery_limbs([ + 15512085810689995447, + 1278811290279093247, + 9713635222980865549, + 89918473543807263, + ]), + Fq::from_montgomery_limbs([ + 10908982736163998884, + 10522718116611575026, + 15481410495350859749, + 209345561210183580, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 11298966019883739719, + 3737954136375979756, + 15666428783954356951, + 93322090349950905, + ]), + Fq::from_montgomery_limbs([ + 10237667835076512281, + 12325953953570405613, + 12285254403281429040, + 507107093264211690, + ]), + Fq::from_montgomery_limbs([ + 14936641530723543297, + 12684654093637137182, + 6573648560098330931, + 479128193670708215, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 4665624059074225901, + 569773391663140707, + 8039376161136700750, + 305908263293765813, + ]), + Fq::from_montgomery_limbs([ + 12181552876023559131, + 7764448317943448064, + 10288520924018884818, + 1103852203169073095, + ]), + Fq::from_montgomery_limbs([ + 15135999239214672948, + 10790616626797062588, + 17724896909590777918, + 1127104704406195421, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 6486714260719829146, + 11040751111500249834, + 8958297661837625585, + 504881187176923268, + ]), + Fq::from_montgomery_limbs([ + 9943503409323924620, + 9519655296534470798, + 10031214880424175980, + 880224541550113700, + ]), + Fq::from_montgomery_limbs([ + 2137123775246483621, + 14575781645937393202, + 6082200831828333306, + 319693495256136311, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 18213874187166503017, + 7357620257182256357, + 12753979462901781784, + 653327632081049969, + ]), + Fq::from_montgomery_limbs([ + 5648402480861501803, + 1298801804080198935, + 16361566576947818947, + 92096317293783223, + ]), + Fq::from_montgomery_limbs([ + 17945395108017238106, + 3498558197841053284, + 7092504945026653103, + 372132312547601421, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 15622147422254947733, + 250116726000401472, + 8318204049018604061, + 866935352572882912, + ]), + Fq::from_montgomery_limbs([ + 18241804623807754966, + 4053430455599371737, + 4911593924672747195, + 915087345052626509, + ]), + Fq::from_montgomery_limbs([ + 4269143728338544596, + 14357201884344458328, + 903006646797065399, + 462454343275509581, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 16493823488007719206, + 14779329128742765495, + 18378884619527915493, + 360610956997885799, + ]), + Fq::from_montgomery_limbs([ + 8231956009608211607, + 2237272948977110346, + 11234918376541957482, + 211807215316292218, + ]), + Fq::from_montgomery_limbs([ + 4694295422393950539, + 494515799644279017, + 16377559543581347883, + 1023664249665260398, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 269632147881481827, + 17676834172042717446, + 13502391546248246285, + 158178875674850167, + ]), + Fq::from_montgomery_limbs([ + 854535799571654664, + 4436276133137563398, + 12250035363748361097, + 569847052981690503, + ]), + Fq::from_montgomery_limbs([ + 8356573900420286918, + 3943111982741005596, + 6690528014909196681, + 100899612597296936, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 12053108327360532468, + 2215278670095839574, + 18310257358516903189, + 507153778977982696, + ]), + Fq::from_montgomery_limbs([ + 15548327836627863789, + 11669395097045425760, + 16626297677851084169, + 692658363999722441, + ]), + Fq::from_montgomery_limbs([ + 5590241427234064239, + 15193192965574703365, + 7643293374071077424, + 502287078265137211, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 7121109350102790552, + 3842989306298966953, + 15442678426893498207, + 43682019324253859, + ]), + Fq::from_montgomery_limbs([ + 8543065120635606147, + 17618464589270231617, + 4296924638616724859, + 409105874035239827, + ]), + Fq::from_montgomery_limbs([ + 12676854185827013572, + 13888077538347807744, + 7139127667431143175, + 1225243047885808896, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 4347759847866483265, + 5855881520281836030, + 5505541235252858831, + 976243446170017999, + ]), + Fq::from_montgomery_limbs([ + 1880808402247115426, + 943890821775946445, + 12000264441794154793, + 12973763854532988, + ]), + Fq::from_montgomery_limbs([ + 8496845738719301602, + 11057791601996073401, + 18430915991403133806, + 442312408397388928, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 4597591998391646042, + 17549544536524741100, + 7632675978077243758, + 789227364575351796, + ]), + Fq::from_montgomery_limbs([ + 6247914330752058188, + 17379927947827819186, + 459262613159719376, + 17669136651242999, + ]), + Fq::from_montgomery_limbs([ + 4416622626270946808, + 9011173931926497864, + 2385315687804767815, + 1100085754679242026, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 2858027675101851698, + 15199707771225336894, + 6912007903404713737, + 1195736020550467109, + ]), + Fq::from_montgomery_limbs([ + 16536374087395040861, + 11905207237145903612, + 6114638606661711198, + 227197704829902271, + ]), + Fq::from_montgomery_limbs([ + 3076102373056113184, + 9532492163005512122, + 6930666801042367372, + 359947620632631939, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 9440427530838662463, + 13085976282871216533, + 11609820600896955445, + 51192596107359503, + ]), + Fq::from_montgomery_limbs([ + 17890235474475849352, + 12861769158994967907, + 17199388852287681020, + 1318104728008794611, + ]), + Fq::from_montgomery_limbs([ + 9609805589266211410, + 1670962659820459283, + 9562963939311936174, + 688275382419503341, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 11167389070307520429, + 13977359843749392350, + 18441644755473839422, + 290366407278115355, + ]), + Fq::from_montgomery_limbs([ + 12443632002797775505, + 4654520606670285598, + 7306556664291017650, + 1327633699432541153, + ]), + Fq::from_montgomery_limbs([ + 8092706722129444827, + 3658752323492067072, + 4793508300996597563, + 747223853807345138, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 2950573641865927995, + 8127787636945490240, + 13677031676353641065, + 158618420355845681, + ]), + Fq::from_montgomery_limbs([ + 11307462183326711698, + 4564920402521666764, + 14622180354087693631, + 1336492508958389172, + ]), + Fq::from_montgomery_limbs([ + 4173008676431506498, + 17674916393358760276, + 12680688896701595449, + 968385841042257188, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 15472538886056214069, + 16032473331676368569, + 16841883688877890652, + 857731186179030920, + ]), + Fq::from_montgomery_limbs([ + 3288920438915728986, + 5565335638237954732, + 16168717028973711379, + 557711450924669146, + ]), + Fq::from_montgomery_limbs([ + 2265592654319698024, + 3205443269480017209, + 18001932803255029483, + 256652906325487142, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 281001495283692254, + 13790290956215242906, + 864387281468051063, + 1176693997057782923, + ]), + Fq::from_montgomery_limbs([ + 5123560649935846987, + 5199616350359672235, + 1101436586367673740, + 39975262197625469, + ]), + Fq::from_montgomery_limbs([ + 6484555314181403346, + 13702935644386089262, + 1070288899201945043, + 1275458004049976710, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 98165037936801382, + 7473654891184825762, + 349134079485996919, + 938092578927267223, + ]), + Fq::from_montgomery_limbs([ + 14188791834503488423, + 18250342088521722141, + 2040654749291153960, + 926512896204558398, + ]), + Fq::from_montgomery_limbs([ + 15224380743676270964, + 10786962884449555555, + 11361613959686699022, + 1210280746834414029, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 11759988830619476554, + 8373507443143532317, + 3120367880452859596, + 1169296147393250270, + ]), + Fq::from_montgomery_limbs([ + 2846578710538047768, + 1316160842247957353, + 13088400622784413268, + 408653118294756083, + ]), + Fq::from_montgomery_limbs([ + 17205667740934035850, + 3622944266683523375, + 9638129797382886543, + 994379064072552476, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 10882825922057764254, + 14418568533897154353, + 491214512167095700, + 433897962559667772, + ]), + Fq::from_montgomery_limbs([ + 35128611736586842, + 16389786149729784671, + 10083558142637806972, + 137127276176467702, + ]), + Fq::from_montgomery_limbs([ + 6798031404470581862, + 17848651283256458296, + 16222358536010933656, + 803683331342998490, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 6972405454939855920, + 4552281101007467397, + 7264795943490057443, + 864688899960148444, + ]), + Fq::from_montgomery_limbs([ + 13927481061475209845, + 15489762958527206567, + 6189983331269957882, + 547789234607264680, + ]), + Fq::from_montgomery_limbs([ + 3562534859757502067, + 1843985785467419577, + 4386226263096503262, + 1115671597351053159, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 12278022351526165705, + 17770191387101388710, + 10802565891039662934, + 1075900781773362211, + ]), + Fq::from_montgomery_limbs([ + 9958371080654925973, + 11831887817395699647, + 1304723427562418477, + 354927743406208632, + ]), + Fq::from_montgomery_limbs([ + 7902693975921282234, + 10693029805943046522, + 8006364623005626891, + 336833334808426575, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 16076162621220796497, + 11613654344612125103, + 18364396485836487261, + 865751367130059847, + ]), + Fq::from_montgomery_limbs([ + 177169936881514673, + 15617655321830945408, + 2675644582344792450, + 813774581927626127, + ]), + Fq::from_montgomery_limbs([ + 10024256268223083204, + 4626025808735980516, + 15602381466554927909, + 372989881235976309, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 15323355670275250642, + 18066772602049731907, + 11033816093504217490, + 425723417069229499, + ]), + Fq::from_montgomery_limbs([ + 13530227036238294143, + 4726864651116558793, + 11836084010804535503, + 345580619383028526, + ]), + Fq::from_montgomery_limbs([ + 9033276785296979553, + 8015158493901738529, + 7685612975844433499, + 646369922266692941, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 6106858674192767659, + 6489383503992760141, + 15104627566688873842, + 967007977448094027, + ]), + Fq::from_montgomery_limbs([ + 15940025338744316838, + 9550216566045214897, + 11499601007486969156, + 519967031225120334, + ]), + Fq::from_montgomery_limbs([ + 4457318900167954816, + 12351443184813817360, + 14113262131954548168, + 753463690543950206, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 1881864483835241252, + 13219574080686529684, + 10918646441166728772, + 345526905812511168, + ]), + Fq::from_montgomery_limbs([ + 16713317497695859602, + 11594535032725047066, + 8614425525972045100, + 729458370408931167, + ]), + Fq::from_montgomery_limbs([ + 2382365843901650484, + 13640386342346411833, + 2679421435014953531, + 1060573086709931927, + ]), + ]), + Matrix::<3, 1, 3>::new_from_known([ + Fq::from_montgomery_limbs([ + 17434826777667612735, + 2365065059007002287, + 12113557410986701552, + 486906253608904981, + ]), + Fq::from_montgomery_limbs([ + 15422260981332801416, + 11687068808662228912, + 15340447593430286694, + 1095477751721025581, + ]), + Fq::from_montgomery_limbs([ + 3067136625363818837, + 15414947239083578872, + 4357451922062335136, + 670849424861114413, + ]), + ]), + ], + }, + optimized_arc: OptimizedArcMatrix::<39, 4, 156>::new_from_known([ + Fq::from_montgomery_limbs([ + 15748480026335769443, + 10026984616551622801, + 2063724428730618452, + 1110463257231131824, + ]), + Fq::from_montgomery_limbs([ + 9405142820695944635, + 11887146523697465657, + 7764829263011233272, + 10688178588086322, + ]), + Fq::from_montgomery_limbs([ + 7160766575090090422, + 13093321275956005400, + 4459692368517809830, + 1324823328343033307, + ]), + Fq::from_montgomery_limbs([ + 8967803866417976527, + 10882703683899587484, + 12604355713142717837, + 913362872025451921, + ]), + Fq::from_montgomery_limbs([ + 15434913893282099231, + 3277411989792281453, + 17050922401305883749, + 1246396795570595652, + ]), + Fq::from_montgomery_limbs([ + 16287493285262395377, + 5813955731335134269, + 4301474317614585594, + 257520225036445364, + ]), + Fq::from_montgomery_limbs([ + 6906749939426292513, + 6186370802689597769, + 13121713652409052978, + 974279291569484389, + ]), + Fq::from_montgomery_limbs([ + 8879700369639612352, + 13618625792929032624, + 3907123048620659133, + 13234475218016492, + ]), + Fq::from_montgomery_limbs([ + 8645743306703223161, + 2649437454338131787, + 1563690154181407289, + 1014186398941703531, + ]), + Fq::from_montgomery_limbs([ + 3215833110701720679, + 2309636887892103305, + 8098930435412331037, + 874663616929857835, + ]), + Fq::from_montgomery_limbs([ + 12979468067887852608, + 5086746922420764336, + 15129738790560069297, + 751939553752695744, + ]), + Fq::from_montgomery_limbs([ + 2977455406847333432, + 16814711076234176662, + 2052393181081329017, + 1025504667378050833, + ]), + Fq::from_montgomery_limbs([ + 7769933776177646251, + 18381610027802955757, + 14883656026535111760, + 810712025708758153, + ]), + Fq::from_montgomery_limbs([ + 17772168373864941552, + 6465821213265847266, + 13630379320513469760, + 377801609900980707, + ]), + Fq::from_montgomery_limbs([ + 15796194027949120118, + 344995813018918925, + 1773993772309248477, + 495371203446902105, + ]), + Fq::from_montgomery_limbs([ + 2372367672613269254, + 1881994507861568925, + 12499063082888296383, + 198183890354307133, + ]), + Fq::from_montgomery_limbs([ + 8560339202466452135, + 4674741842794783289, + 2295938056459737653, + 1305584587019963566, + ]), + Fq::from_montgomery_limbs([ + 5894698623250752231, + 11196686474075291940, + 319786488005502847, + 976772307367475705, + ]), + Fq::from_montgomery_limbs([ + 9900044152758269451, + 6382301581301578495, + 486281876073250633, + 71881436776511649, + ]), + Fq::from_montgomery_limbs([ + 8858083304247561548, + 5671107377399080192, + 14186551763070529190, + 1191940751561414494, + ]), + Fq::from_montgomery_limbs([ + 11388935853995478114, + 12687122290317818660, + 14863371661788062147, + 1158919028776138907, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10994187684158036079, + 6365622770188053181, + 9403760573784657161, + 1146936259121378165, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10359734611031618397, + 6788070320086383195, + 6870540987465879902, + 1154055204589981421, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6567270162376125909, + 13203968161919606288, + 7529228388954710988, + 1019437133634541415, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17083543156205069093, + 11374420946242035033, + 18049715002122120090, + 906131070047943878, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2206466804129196608, + 7840059231658610949, + 18148556368765089670, + 985832054058842554, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15160443716672326145, + 3977221634341810924, + 11902494952164999188, + 990146605314032630, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15193334268554411388, + 16206854972517382356, + 12905310888333022888, + 513326483567402639, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5576504557462251248, + 8125452713587662843, + 16486629117159905898, + 293174270601514481, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17062406856052799045, + 4903125714753109748, + 8990920239472029770, + 936892459427742133, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6584002420364695129, + 10284681536623141870, + 7366280281192288180, + 305633769889978939, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6566050072214065144, + 10806265958907184854, + 2902594108468871307, + 927316604280713413, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9252557727477672981, + 3306161630265918351, + 179799263786823209, + 104291884324148129, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16542259604895379638, + 11861465458652059930, + 2193746946143577162, + 159871979033281704, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1973639865256742476, + 12494642903985355205, + 12678561251384262826, + 1063132847474762378, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16335431452481000471, + 3819468482480263699, + 13079543972531520553, + 161635515931478039, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6649676330206378374, + 170192309920289600, + 12660537932851201431, + 875374125882958636, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18237532705140415183, + 5538703501092204277, + 12946255801995328124, + 1087375767378395044, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1012766659404803227, + 13885920911268862504, + 11108883550523828802, + 162298092776208930, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2714322473297105009, + 249945166940002912, + 12698583590562308965, + 394261012891088761, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11185042895155911424, + 15268539255422683750, + 7532909772946377585, + 463947154991508934, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2052933093431843614, + 1295021459124440371, + 8148559147565678653, + 89295276853247542, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12899268934677529381, + 16307080267150235665, + 10898130171280001197, + 518068384980908314, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 993244798968596356, + 11096685116364920579, + 8750430116109558950, + 9308397748705116, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5953598583374622076, + 16232619257237216458, + 17798149940250628730, + 654505929641861550, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11857053641605556992, + 4354078495412090273, + 4158908777158450718, + 1170888300956232550, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12321182200541779000, + 10436914785964154798, + 4712843605747406852, + 790686269705752315, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11380659121996065200, + 7281347105742142276, + 13205980178228421104, + 804622887165645998, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5152043905886227057, + 17756682668953288347, + 10695990401739553448, + 1061486419247893614, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13186025127373894323, + 16210743521572602678, + 17903754729019377882, + 874061397244045546, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12725269033496721580, + 6143157215985784613, + 2563593607564735516, + 641845243083026263, + ]), + Fq::from_montgomery_limbs([ + 16567470293191015474, + 17979338546951754349, + 679740711221916675, + 389452091580807800, + ]), + Fq::from_montgomery_limbs([ + 11781729507075158888, + 16614033708022660131, + 8066891565891024775, + 1321986181569835272, + ]), + Fq::from_montgomery_limbs([ + 15263301520898366582, + 5379961920461128458, + 5298170819253721050, + 871089269493660926, + ]), + Fq::from_montgomery_limbs([ + 5741830111596365525, + 11415264909554107470, + 8692411149271156415, + 108534814929374467, + ]), + Fq::from_montgomery_limbs([ + 14889457972591320596, + 4443631419689297602, + 9576604194859673886, + 55036543682599971, + ]), + Fq::from_montgomery_limbs([ + 15281837068987139929, + 16419105318903348956, + 3445836523780143538, + 1293417868939267170, + ]), + Fq::from_montgomery_limbs([ + 17836346323317710151, + 12227034928325499140, + 2533213127903144227, + 888374169811671044, + ]), + Fq::from_montgomery_limbs([ + 17190507118724296154, + 11902410769486810674, + 1884965616619903297, + 288715797041361057, + ]), + Fq::from_montgomery_limbs([ + 3698781841092321912, + 12743575315417669826, + 2170730182690456487, + 1222843211331174337, + ]), + Fq::from_montgomery_limbs([ + 4016814140820935108, + 7695810038153355283, + 9484931309805354358, + 1136167194218052037, + ]), + Fq::from_montgomery_limbs([ + 14104529875826633218, + 4636945317611530138, + 9502367629041549061, + 1255556235831136969, + ]), + Fq::from_montgomery_limbs([ + 3761991760077630951, + 15074729225518792210, + 17745896690436879228, + 1023440924724847735, + ]), + Fq::from_montgomery_limbs([ + 15850125405934611308, + 14029919305144561597, + 18399969854542387983, + 1223450657234113398, + ]), + Fq::from_montgomery_limbs([ + 15153111831948502891, + 17514853580286890635, + 16559251203856754825, + 921126073718956725, + ]), + Fq::from_montgomery_limbs([ + 14464801899277986702, + 11416622266096337177, + 5506399331882969115, + 210576422101801202, + ]), + ]), + } +} diff --git a/poseidon377/src/params/rate_4.rs b/poseidon377/src/params/rate_4.rs new file mode 100644 index 0000000..8dd15f7 --- /dev/null +++ b/poseidon377/src/params/rate_4.rs @@ -0,0 +1,4250 @@ +use decaf377::Fq; +use poseidon_parameters::v1::{ + Alpha, ArcMatrix, Matrix, MdsMatrix, OptimizedArcMatrix, OptimizedMdsMatrices, + PoseidonParameters, RoundNumbers, SquareMatrix, +}; + +/// Parameters for the rate-4 instance of Poseidon. +pub const fn rate_4() -> PoseidonParameters<5, 4, 25, 16, 39, 5, 195, 31> { + PoseidonParameters { + M: 128, + arc: ArcMatrix::<39, 5, 195>::new_from_known([ + Fq::from_montgomery_limbs([ + 9886223877583555338, + 2726526174642559934, + 4587790518566470505, + 576729411659255749, + ]), + Fq::from_montgomery_limbs([ + 8635683872171027649, + 6178568763530680712, + 4049298017970875225, + 1010899895527016760, + ]), + Fq::from_montgomery_limbs([ + 4386287284362214114, + 15794275297560972982, + 13426231751965312445, + 1202171528338027358, + ]), + Fq::from_montgomery_limbs([ + 748088700594287215, + 1472010505444622065, + 17517940238534715767, + 284646916897302179, + ]), + Fq::from_montgomery_limbs([ + 10279507610927218934, + 8427605231324569630, + 5256766482183491681, + 599767801296570400, + ]), + Fq::from_montgomery_limbs([ + 5616532683870270019, + 16714573776517987780, + 2780158541662869274, + 82005381951989400, + ]), + Fq::from_montgomery_limbs([ + 628047193644056282, + 3081927050412275131, + 16607349608647881262, + 723666033729227034, + ]), + Fq::from_montgomery_limbs([ + 4014053105906402474, + 8516064025130570203, + 16439212471763340654, + 1066408903228028504, + ]), + Fq::from_montgomery_limbs([ + 3781775891997454435, + 16784197273788891439, + 15993490775706321548, + 1246974369195687342, + ]), + Fq::from_montgomery_limbs([ + 13315871439997102610, + 1360174578976506509, + 1935727712649190133, + 888928512483410116, + ]), + Fq::from_montgomery_limbs([ + 8976641770861237410, + 6687451940339132521, + 18044907108310696377, + 1207869807557250559, + ]), + Fq::from_montgomery_limbs([ + 4528878922761055500, + 7463187218610955446, + 4533754848507645556, + 35071527712858390, + ]), + Fq::from_montgomery_limbs([ + 2054133897613963099, + 8179564031063470525, + 1531556284029346638, + 874298192527556148, + ]), + Fq::from_montgomery_limbs([ + 18305580017782407596, + 2150793914184610589, + 17311607174845242499, + 959373557899881125, + ]), + Fq::from_montgomery_limbs([ + 11483900964553043288, + 12487129025031613244, + 15391908241276224492, + 269335905993702128, + ]), + Fq::from_montgomery_limbs([ + 8338971145620331245, + 12372781419517678375, + 2199283600481834995, + 349132078387032325, + ]), + Fq::from_montgomery_limbs([ + 16711498854962897180, + 964757925282058102, + 2534475787702313401, + 879174178299686832, + ]), + Fq::from_montgomery_limbs([ + 9948612635577575267, + 10310004629375851550, + 14569008704673249814, + 698796675030817938, + ]), + Fq::from_montgomery_limbs([ + 11983101385647491113, + 6756494718617323834, + 3986787822213493305, + 810568397631777742, + ]), + Fq::from_montgomery_limbs([ + 263703597816264419, + 5391923373962277868, + 8069762938958691329, + 167001460324522424, + ]), + Fq::from_montgomery_limbs([ + 12719698031922087137, + 3635206538516773241, + 14946573674542408006, + 904022619675467349, + ]), + Fq::from_montgomery_limbs([ + 7591285109719266048, + 2608578391556572711, + 6779676185899908036, + 1086161713062740129, + ]), + Fq::from_montgomery_limbs([ + 7176467193518589709, + 1343509363976199891, + 347002617743548581, + 1018914054223433368, + ]), + Fq::from_montgomery_limbs([ + 13908207388458176389, + 2971345816230697916, + 17116412495128514758, + 1092556723789729092, + ]), + Fq::from_montgomery_limbs([ + 10011741275583553910, + 13515359725579218496, + 16173962293465169995, + 826500423001616558, + ]), + Fq::from_montgomery_limbs([ + 11642763221775816104, + 5316502523761667274, + 6723960157854782715, + 713280922101966669, + ]), + Fq::from_montgomery_limbs([ + 881130788153084344, + 5010739439291725858, + 1147743103863894058, + 177980102031055407, + ]), + Fq::from_montgomery_limbs([ + 13975378739354834601, + 8684941252608197282, + 5694396386436962583, + 439479504891747047, + ]), + Fq::from_montgomery_limbs([ + 13363133397626440278, + 8130502609775906914, + 13414583350549819329, + 524823840910770289, + ]), + Fq::from_montgomery_limbs([ + 11945840925799863259, + 8524159476864402062, + 9210577373238759816, + 710975425722615141, + ]), + Fq::from_montgomery_limbs([ + 12814581100646910424, + 15849784230008994303, + 12637788340215337664, + 597941999161438829, + ]), + Fq::from_montgomery_limbs([ + 16525908361603394009, + 2846177558600817179, + 7575467056141022092, + 437642443252490173, + ]), + Fq::from_montgomery_limbs([ + 15329913684605210914, + 12070525736245629573, + 13074341668722432469, + 1044151030746490873, + ]), + Fq::from_montgomery_limbs([ + 3538323630603591241, + 10279517124841541304, + 5324030032202346672, + 902072318757121155, + ]), + Fq::from_montgomery_limbs([ + 13596574972337588658, + 16541340016857780345, + 8104153165370753035, + 245861939922053923, + ]), + Fq::from_montgomery_limbs([ + 5030454205469646742, + 13132624601605397879, + 14758125164075453800, + 378384125390441388, + ]), + Fq::from_montgomery_limbs([ + 8906593348835760654, + 11904421032273004937, + 14965461596408947669, + 632859340380426495, + ]), + Fq::from_montgomery_limbs([ + 7850130346408635539, + 13532701351370547975, + 3820560789332903656, + 1092318130445796576, + ]), + Fq::from_montgomery_limbs([ + 12997377171057711408, + 4471729792070708333, + 7305494049349150657, + 1115063797383463496, + ]), + Fq::from_montgomery_limbs([ + 15145625851690108440, + 17698022295267189243, + 9861950554713946731, + 1205401165408515638, + ]), + Fq::from_montgomery_limbs([ + 11309649707041239663, + 667445592132876816, + 943153015419280868, + 1206714849836553688, + ]), + Fq::from_montgomery_limbs([ + 9026152062944983955, + 11204530926199479297, + 6289885248657301247, + 512955645767342309, + ]), + Fq::from_montgomery_limbs([ + 11717849647660086747, + 3612602895588115533, + 9744929507384815356, + 982549568060514738, + ]), + Fq::from_montgomery_limbs([ + 6744201323279553111, + 18111540114747698086, + 11979166811283670034, + 386105814260185338, + ]), + Fq::from_montgomery_limbs([ + 13303196293759203285, + 14344592278022456277, + 4239798340739261853, + 800405056318133701, + ]), + Fq::from_montgomery_limbs([ + 6737138017975582894, + 8531016178828592243, + 13684944430980743706, + 22255530611110264, + ]), + Fq::from_montgomery_limbs([ + 1997271207334772541, + 9079547000593471061, + 16047065352656029242, + 101416793857725065, + ]), + Fq::from_montgomery_limbs([ + 17029188205686654069, + 8951964272054585217, + 15302569091334378903, + 761854968911808356, + ]), + Fq::from_montgomery_limbs([ + 2745767110751783932, + 14853302747509920417, + 1606999108376858338, + 891318834157837360, + ]), + Fq::from_montgomery_limbs([ + 3640580010003203721, + 12123462912736402051, + 18295135460895849345, + 520752965734877132, + ]), + Fq::from_montgomery_limbs([ + 83933521946714737, + 17971579355265751841, + 7352708691986307901, + 183907669014565798, + ]), + Fq::from_montgomery_limbs([ + 9276458973572472320, + 1300682705964188558, + 13756551032393705489, + 645082867954998576, + ]), + Fq::from_montgomery_limbs([ + 15074599786611123042, + 8980910692416969440, + 16790312992523154465, + 44198431582091186, + ]), + Fq::from_montgomery_limbs([ + 1480148269351616164, + 5990826399027670160, + 7437498150356539259, + 427144700677710781, + ]), + Fq::from_montgomery_limbs([ + 5507196835477653383, + 7336613593633132046, + 1280426316557546233, + 958933701992800913, + ]), + Fq::from_montgomery_limbs([ + 18241053245813744236, + 10472459532627362617, + 2012134575489914517, + 1256037774783607417, + ]), + Fq::from_montgomery_limbs([ + 14372359421802781886, + 13729700187444703363, + 17989800816636154572, + 967621319286277758, + ]), + Fq::from_montgomery_limbs([ + 90392410009690887, + 14047860931061415491, + 12494400053046916745, + 1187807817979142164, + ]), + Fq::from_montgomery_limbs([ + 7469394458896125080, + 4994833117952945329, + 5178970336138815548, + 547357110341709620, + ]), + Fq::from_montgomery_limbs([ + 14626262512784894880, + 8498143648146630667, + 14635776379295784646, + 279017425979939457, + ]), + Fq::from_montgomery_limbs([ + 2948938230818109264, + 13256829255392710280, + 3603261726988560613, + 293293722534360282, + ]), + Fq::from_montgomery_limbs([ + 14726913360355627661, + 11044693867323537781, + 7626109275678740243, + 758908383357559345, + ]), + Fq::from_montgomery_limbs([ + 12150373031774230138, + 8891964881341264351, + 4517018861706300919, + 551820964652107008, + ]), + Fq::from_montgomery_limbs([ + 16891048323407180721, + 7536596905792994544, + 3059846088325366943, + 865178483316339067, + ]), + Fq::from_montgomery_limbs([ + 2690083733968939863, + 1769064765331202923, + 999446336742885656, + 164907716251699548, + ]), + Fq::from_montgomery_limbs([ + 8580460058188302985, + 3991751878635809753, + 4547376216267480360, + 560815723873147432, + ]), + Fq::from_montgomery_limbs([ + 1883267897877590583, + 9283747140977722829, + 4336519897183919570, + 1098112532343628461, + ]), + Fq::from_montgomery_limbs([ + 18229193288997288391, + 1416710191385219951, + 786091488678520329, + 897579186089258101, + ]), + Fq::from_montgomery_limbs([ + 9679787806770955465, + 13476526545223689774, + 9613302347536604785, + 1170985601196245246, + ]), + Fq::from_montgomery_limbs([ + 11408485967127642435, + 15775267434451831783, + 5963102841687207642, + 610143165002891320, + ]), + Fq::from_montgomery_limbs([ + 2742110483607649666, + 8238870973637978146, + 8505321265665046273, + 991146636847773959, + ]), + Fq::from_montgomery_limbs([ + 2700417284944988347, + 9333179215703947174, + 17483497014148443293, + 564598335909606701, + ]), + Fq::from_montgomery_limbs([ + 10710073701127297870, + 6322555675999590600, + 11771028831440425797, + 728539264888274353, + ]), + Fq::from_montgomery_limbs([ + 5185688551847854621, + 17136427433029749827, + 13939786699270995224, + 1198719082185444207, + ]), + Fq::from_montgomery_limbs([ + 7749447179538401980, + 4793600318555081413, + 10327393242917365028, + 25438094261901103, + ]), + Fq::from_montgomery_limbs([ + 16840187061708384569, + 10530669475422628524, + 217939404244531614, + 1125926086827923821, + ]), + Fq::from_montgomery_limbs([ + 15218288013305045082, + 5438912048142917445, + 235470087288523129, + 923231700809438641, + ]), + Fq::from_montgomery_limbs([ + 2194576126536460830, + 7891341442170590444, + 6378643390383758255, + 310989935666358535, + ]), + Fq::from_montgomery_limbs([ + 2638919532368561416, + 18196222360720320566, + 6610525316889549022, + 1047682654438730344, + ]), + Fq::from_montgomery_limbs([ + 16494294820597583678, + 4823636307697140628, + 9839058803503271101, + 362713889140891969, + ]), + Fq::from_montgomery_limbs([ + 2973315077205527383, + 16505948923072751536, + 12726716204894385324, + 760067983544631044, + ]), + Fq::from_montgomery_limbs([ + 7041027454525309806, + 14484049096926673324, + 11711536155919984779, + 830352844598884205, + ]), + Fq::from_montgomery_limbs([ + 8226667178177935298, + 16330330634634519739, + 16819545565758577360, + 929449491579086457, + ]), + Fq::from_montgomery_limbs([ + 3366407172182263301, + 16494428895759921285, + 7731107796203549240, + 987879550276572952, + ]), + Fq::from_montgomery_limbs([ + 9958698182000492538, + 15462783131464999925, + 11113071922629363034, + 701467612820830963, + ]), + Fq::from_montgomery_limbs([ + 6144224708909855422, + 10834457042169331467, + 11287058958850316926, + 1312825012143929910, + ]), + Fq::from_montgomery_limbs([ + 17921397628564368555, + 10985573093809787040, + 14340644029187071972, + 59000721534311183, + ]), + Fq::from_montgomery_limbs([ + 1630018632512830166, + 16311976715006973397, + 18074431391508993129, + 155692271434089392, + ]), + Fq::from_montgomery_limbs([ + 2746677638438958053, + 17878267615510669310, + 1082275588904648896, + 1184432411754581729, + ]), + Fq::from_montgomery_limbs([ + 1202686691857012174, + 2234596977877372457, + 3307488575050929625, + 1256758603403004831, + ]), + Fq::from_montgomery_limbs([ + 7601867427459401741, + 13070585820383544138, + 11356438762852655489, + 943118894834427377, + ]), + Fq::from_montgomery_limbs([ + 8684748127362653242, + 4743911555278887170, + 11396974372791841950, + 826700742908426413, + ]), + Fq::from_montgomery_limbs([ + 17452888945877951639, + 9839615283788288179, + 12867459466655328363, + 1007543359739410437, + ]), + Fq::from_montgomery_limbs([ + 12264143824974096166, + 14381191422662810752, + 3641096965851024808, + 480946059636473070, + ]), + Fq::from_montgomery_limbs([ + 11435949141961302837, + 710354890461232526, + 7844293650067273203, + 123004845212098500, + ]), + Fq::from_montgomery_limbs([ + 11045998304335767176, + 3942503358896124422, + 12585149699076876402, + 285027589169677300, + ]), + Fq::from_montgomery_limbs([ + 15820797401199028229, + 16962821466020830153, + 8107747291692774042, + 480489353941649738, + ]), + Fq::from_montgomery_limbs([ + 9217962315784549500, + 14370528537254478239, + 11836250330534571325, + 1139451976529383887, + ]), + Fq::from_montgomery_limbs([ + 11835990522743135120, + 10169548464484669696, + 17221670999568737002, + 533302488612773058, + ]), + Fq::from_montgomery_limbs([ + 17879618715206022981, + 10660797039341031940, + 1930610719106570064, + 964350742947937820, + ]), + Fq::from_montgomery_limbs([ + 1169235639972562417, + 17479840192056268380, + 10586924611389711708, + 103636186478545263, + ]), + Fq::from_montgomery_limbs([ + 9864560133117702439, + 12891182307324408638, + 9236711602457989544, + 490202994419177997, + ]), + Fq::from_montgomery_limbs([ + 524004209204114745, + 12014044939530800435, + 17303597221467190420, + 1259834854717402694, + ]), + Fq::from_montgomery_limbs([ + 2041228093468029194, + 5279491032753715877, + 2237512127849739422, + 1301989577140851954, + ]), + Fq::from_montgomery_limbs([ + 13532558374939940477, + 11861615008285507752, + 15035422035697406898, + 1142796203357719412, + ]), + Fq::from_montgomery_limbs([ + 14953432173925601791, + 10389362430177185816, + 845064825159375048, + 1172521244035119080, + ]), + Fq::from_montgomery_limbs([ + 11975318177053547084, + 3435333234872828662, + 13963241498174514126, + 286783134590930070, + ]), + Fq::from_montgomery_limbs([ + 14455835521486462998, + 2048669311632423555, + 17279316794410156816, + 50616703474729287, + ]), + Fq::from_montgomery_limbs([ + 8193872068862108327, + 3772516384619180657, + 13641128299057093189, + 905697595997810178, + ]), + Fq::from_montgomery_limbs([ + 16454110340578030875, + 2152604389456932301, + 8465973362037387798, + 833666687765914967, + ]), + Fq::from_montgomery_limbs([ + 14250990663149816130, + 10003002447016613703, + 2580052265102394487, + 760659830843235379, + ]), + Fq::from_montgomery_limbs([ + 1290457731274356164, + 2510039619580464600, + 2426168528296515695, + 1254551442283207078, + ]), + Fq::from_montgomery_limbs([ + 16309488082193928736, + 7601298284363534660, + 5163919981174564632, + 65819575671802258, + ]), + Fq::from_montgomery_limbs([ + 12743534580838976593, + 6143776853938743851, + 13386193122986779929, + 423668519394498160, + ]), + Fq::from_montgomery_limbs([ + 3811484717633006447, + 1349919791689722695, + 10297821437600310682, + 68521037802427679, + ]), + Fq::from_montgomery_limbs([ + 1049969810634121052, + 16728941075068531596, + 16094121280131115468, + 82606214892022031, + ]), + Fq::from_montgomery_limbs([ + 5360234823572670745, + 17757096254232659981, + 5717208405019750556, + 809486485814479609, + ]), + Fq::from_montgomery_limbs([ + 1927630004992622799, + 11649924430204711735, + 14978212641988016519, + 1108831164145357066, + ]), + Fq::from_montgomery_limbs([ + 4587868477439641052, + 4737040880169689015, + 639327313806380645, + 693944328643709356, + ]), + Fq::from_montgomery_limbs([ + 11087993010676539653, + 10020352685294943192, + 10076106363570629377, + 297641291282727232, + ]), + Fq::from_montgomery_limbs([ + 3081981335203353498, + 13021314745733708666, + 5449753531105554695, + 227963405559900828, + ]), + Fq::from_montgomery_limbs([ + 15635794702109421502, + 6527818235965294785, + 7659508407838394834, + 492292453862401661, + ]), + Fq::from_montgomery_limbs([ + 3164777360703179827, + 5768214351744839625, + 7163272775096466422, + 261059424264025774, + ]), + Fq::from_montgomery_limbs([ + 8844860905568377954, + 18132135522818541971, + 6960467923389772345, + 221535360909084069, + ]), + Fq::from_montgomery_limbs([ + 17964326599819457995, + 14751755360522114153, + 15283771895792774696, + 1271886438859126545, + ]), + Fq::from_montgomery_limbs([ + 15437118549753387043, + 3510619079633075969, + 16603794516758219723, + 756776079410359543, + ]), + Fq::from_montgomery_limbs([ + 17209588410857048072, + 16141684401935979017, + 5301689933884631523, + 38432519687640810, + ]), + Fq::from_montgomery_limbs([ + 10547445465275366949, + 16846768059763163090, + 6977180887290525070, + 405538698331204120, + ]), + Fq::from_montgomery_limbs([ + 921006661797204039, + 11021425780686556666, + 5587777062950060423, + 248159859513377465, + ]), + Fq::from_montgomery_limbs([ + 13398830594908962848, + 5602568332953722680, + 3299388522313110637, + 411509104649500576, + ]), + Fq::from_montgomery_limbs([ + 10390204826472811537, + 7554738663131013749, + 7526120458731579280, + 905519991871142014, + ]), + Fq::from_montgomery_limbs([ + 10358091385270219586, + 7049055062932694342, + 17159322295344631236, + 1074016100024519392, + ]), + Fq::from_montgomery_limbs([ + 7057719272669022427, + 6716307074733016448, + 8792057977815871320, + 862532343552836131, + ]), + Fq::from_montgomery_limbs([ + 11368373309109150033, + 7045990182385141009, + 2025222109349847460, + 387848901695703654, + ]), + Fq::from_montgomery_limbs([ + 327056937244728359, + 9704535108452812502, + 5199220103603000900, + 619215360838520470, + ]), + Fq::from_montgomery_limbs([ + 5395528494255463572, + 389959326360615418, + 3978563775598752142, + 991544641697560783, + ]), + Fq::from_montgomery_limbs([ + 8458772479849525654, + 10186585336117207122, + 12880133936401676976, + 1149756384964578292, + ]), + Fq::from_montgomery_limbs([ + 17528423621923070034, + 15935520090452344119, + 11404975526251493884, + 412409734887795934, + ]), + Fq::from_montgomery_limbs([ + 14596531415737149993, + 4946255316940312726, + 12454931841173483338, + 731911136838063220, + ]), + Fq::from_montgomery_limbs([ + 6585417567105755410, + 16822761287245263930, + 2131635032458361338, + 606343045824968234, + ]), + Fq::from_montgomery_limbs([ + 10214561078664282874, + 5025761289800218565, + 12783805018122678662, + 1311486665373386005, + ]), + Fq::from_montgomery_limbs([ + 15901739284283459461, + 11286837212400137496, + 1712557444614142874, + 121870715794602643, + ]), + Fq::from_montgomery_limbs([ + 3911984102306673570, + 648245110634922383, + 15751439518857509618, + 216258856571958927, + ]), + Fq::from_montgomery_limbs([ + 4848434841412269574, + 7349989464327588429, + 9911978981083826344, + 1211881330257404603, + ]), + Fq::from_montgomery_limbs([ + 9800713739756815796, + 10304754660712109617, + 6380491042931330586, + 362406823863024713, + ]), + Fq::from_montgomery_limbs([ + 7720465361240795301, + 12020672868813473796, + 2701475003865340607, + 1252909626545536881, + ]), + Fq::from_montgomery_limbs([ + 9120215925903958009, + 16370286948728342393, + 8726225975134153794, + 874972214722679027, + ]), + Fq::from_montgomery_limbs([ + 13359293481675756526, + 17413992610381724082, + 17127717448613492326, + 618162979844611485, + ]), + Fq::from_montgomery_limbs([ + 4457989176113381477, + 5428904048964818159, + 12898272303960788094, + 1093655686680753194, + ]), + Fq::from_montgomery_limbs([ + 18405830374587328631, + 6168069285842580322, + 1496453003489992656, + 1017841256875975398, + ]), + Fq::from_montgomery_limbs([ + 12466116854493845937, + 2160195132816359286, + 1767040459956452231, + 109568514856013791, + ]), + Fq::from_montgomery_limbs([ + 100951306495757880, + 114976701465995050, + 15766758379995858204, + 1057219425251474865, + ]), + Fq::from_montgomery_limbs([ + 5298457659833054856, + 7285306064847886866, + 12795862070238100636, + 261515234811290770, + ]), + Fq::from_montgomery_limbs([ + 7319581837975344773, + 15042040386610023107, + 16457831289989790825, + 154915683796793087, + ]), + Fq::from_montgomery_limbs([ + 13545480776153695910, + 13196378744888296667, + 5616833430312197722, + 463371887282511984, + ]), + Fq::from_montgomery_limbs([ + 4373255717409396971, + 7992661231611740992, + 2555455907700438592, + 419602657573298182, + ]), + Fq::from_montgomery_limbs([ + 3838228082130987093, + 16958961529135702054, + 12819669670360648617, + 359497681438954782, + ]), + Fq::from_montgomery_limbs([ + 6515161084577348825, + 3970441889569271383, + 607156398571973799, + 547713787201516126, + ]), + Fq::from_montgomery_limbs([ + 1627146883145613872, + 10573887756656254297, + 13653780278064282619, + 524933908746351261, + ]), + Fq::from_montgomery_limbs([ + 10179158874602797540, + 2320694878046972755, + 13108212213196896821, + 823608765090614102, + ]), + Fq::from_montgomery_limbs([ + 10002922236139274212, + 17696271073832748193, + 8923379405797021551, + 708982901731254704, + ]), + Fq::from_montgomery_limbs([ + 5839866296962221086, + 17583077663905506748, + 12216298901080800460, + 487361936596221908, + ]), + Fq::from_montgomery_limbs([ + 14341245248157744737, + 3199487087597809010, + 1135767560538489843, + 927313269278877142, + ]), + Fq::from_montgomery_limbs([ + 16632797622220954476, + 9703590888871525194, + 1377123634707768418, + 1246534655674358846, + ]), + Fq::from_montgomery_limbs([ + 4754517168201404309, + 2647290700202563552, + 1690983820051979673, + 7714150076274415, + ]), + Fq::from_montgomery_limbs([ + 11569692557961925140, + 10228174840463393187, + 8150598622710748207, + 513567317704368092, + ]), + Fq::from_montgomery_limbs([ + 1881301196632560204, + 6035626362054951305, + 8515508636781928884, + 523264698133540944, + ]), + Fq::from_montgomery_limbs([ + 10026556150015580882, + 12588661207673568544, + 8778049799575991497, + 1135429816709585919, + ]), + Fq::from_montgomery_limbs([ + 15355804768759996831, + 17109742989524070851, + 18394344475321513045, + 694458701321276154, + ]), + Fq::from_montgomery_limbs([ + 13235216837990437070, + 2617348320939314758, + 13129875399290619987, + 562279832760519450, + ]), + Fq::from_montgomery_limbs([ + 10230390803193447564, + 13314863672162400633, + 17075894283494146616, + 375924473565310089, + ]), + Fq::from_montgomery_limbs([ + 12059482537459401199, + 10372277014464995984, + 13657463670572718949, + 68415488536176259, + ]), + Fq::from_montgomery_limbs([ + 4866792775300295481, + 4662805139390376964, + 1084624083313912193, + 283924614466318758, + ]), + Fq::from_montgomery_limbs([ + 682031803653902614, + 2785175410597900576, + 10466522391392735273, + 982491227853418333, + ]), + Fq::from_montgomery_limbs([ + 1657190274082326701, + 15794239529824430696, + 11562429870540813013, + 30597476268276403, + ]), + Fq::from_montgomery_limbs([ + 11433643047469980018, + 1276670802646402384, + 7225445039450827835, + 1320607862737647658, + ]), + Fq::from_montgomery_limbs([ + 9049650314779674715, + 15332775679178116922, + 10916059016321665268, + 1115159218126791192, + ]), + Fq::from_montgomery_limbs([ + 5320499112936763732, + 11250539854586634824, + 12063947087263213252, + 710935487070228339, + ]), + Fq::from_montgomery_limbs([ + 18379608258942880321, + 15727113804916673274, + 10498320535108511002, + 845002076776323646, + ]), + Fq::from_montgomery_limbs([ + 6828593483180812035, + 1682481325156526923, + 14049047336459608184, + 1126148273021080778, + ]), + Fq::from_montgomery_limbs([ + 3872917422679565944, + 1271915972458656550, + 1092693023912110895, + 1298968277402891756, + ]), + Fq::from_montgomery_limbs([ + 7814132502258843917, + 8078742423972593556, + 8536158594561933049, + 191277843487617954, + ]), + Fq::from_montgomery_limbs([ + 5652311561512870887, + 16495461651672765449, + 11098657231551158518, + 493087321946801171, + ]), + Fq::from_montgomery_limbs([ + 6368409936062697439, + 792796763844864197, + 5610460501625398581, + 546867399856191995, + ]), + Fq::from_montgomery_limbs([ + 3038217149528838505, + 8627484827600343283, + 7414393357134479493, + 985381996389905690, + ]), + Fq::from_montgomery_limbs([ + 14953970136252134871, + 295452924685135549, + 11287279099077480718, + 617093465173114131, + ]), + Fq::from_montgomery_limbs([ + 140435627222783551, + 17855535656574994648, + 5022512547318532764, + 473386213985532003, + ]), + Fq::from_montgomery_limbs([ + 7030554896034226352, + 6441059691989760702, + 581099786512472761, + 1269259459863271622, + ]), + Fq::from_montgomery_limbs([ + 6770052323275442396, + 12901743183408121797, + 13004549993560303547, + 969914125748537569, + ]), + Fq::from_montgomery_limbs([ + 11435239377991792553, + 14044046789306606033, + 11369816462011584822, + 1239930404010674345, + ]), + Fq::from_montgomery_limbs([ + 2621636762951244377, + 7758290588105338214, + 14625731574391580682, + 7696703746211481, + ]), + Fq::from_montgomery_limbs([ + 8270493924131469556, + 15946263820341678216, + 6122109191607485742, + 1119062509985100783, + ]), + Fq::from_montgomery_limbs([ + 11252124749266599346, + 8413749501404755931, + 9936257142296575431, + 189818330075783365, + ]), + Fq::from_montgomery_limbs([ + 1537275707366966513, + 2232381660897701103, + 2870196216416932989, + 1271177660936312287, + ]), + Fq::from_montgomery_limbs([ + 1398814984843324301, + 15240858180305901997, + 14386262707998656254, + 1102388553837536368, + ]), + ]), + mds: MdsMatrix::<5, 4, 25, 16>::new_from_known([ + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + ]), + alpha: Alpha::Exponent(17), + rounds: RoundNumbers { r_P: 31, r_F: 8 }, + optimized_mds: OptimizedMdsMatrices { + M_hat: SquareMatrix::<4, 16>::new_from_known([ + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + ]), + v: Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + ]), + w: Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + ]), + M_prime: SquareMatrix::<5, 25>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + ]), + M_doubleprime: SquareMatrix::<5, 25>::new_from_known([ + Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 8008150737402636880, + 4488734692587776588, + 1547555191554943536, + 1006206882335955987, + ]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4174856959927929341, + 6956702737728349555, + 11313218605335544685, + 1279701926361717254, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14997388866253338116, + 17951148788181031565, + 14101804784614517907, + 65578444326456143, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6853363902592985329, + 4486369932351851910, + 65610707319252285, + 873172475563117547, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + ]), + M_inverse: SquareMatrix::<5, 25>::new_from_known([ + Fq::from_montgomery_limbs([ + 16044777359948080167, + 6379307166694554861, + 762089046052004585, + 1183646996043825654, + ]), + Fq::from_montgomery_limbs([ + 8310126474924308909, + 16838376826344772735, + 14456183264230470132, + 629129040732927162, + ]), + Fq::from_montgomery_limbs([ + 10591481161139814707, + 3864831283854097767, + 6360339012538312403, + 727156441545813699, + ]), + Fq::from_montgomery_limbs([ + 8580764665041452750, + 2596276168345731737, + 607940303702198574, + 618123929142359699, + ]), + Fq::from_montgomery_limbs([ + 18272933275584544879, + 10491562475845979009, + 9925929908400688531, + 449428766487123474, + ]), + Fq::from_montgomery_limbs([ + 8310126474924308909, + 16838376826344772735, + 14456183264230470132, + 629129040732927162, + ]), + Fq::from_montgomery_limbs([ + 11903154552578817451, + 8808508453785624876, + 14068444835231129096, + 1259276684968074962, + ]), + Fq::from_montgomery_limbs([ + 2548615176746366879, + 17237354895530185263, + 1797488250903408702, + 291026391931997698, + ]), + Fq::from_montgomery_limbs([ + 13620574122907011204, + 15580574422211693049, + 7152880373115697056, + 985573542184802400, + ]), + Fq::from_montgomery_limbs([ + 3137742302926509693, + 15046605844466714305, + 1991063102869025961, + 261841845081961819, + ]), + Fq::from_montgomery_limbs([ + 10591481161139814707, + 3864831283854097767, + 6360339012538312403, + 727156441545813699, + ]), + Fq::from_montgomery_limbs([ + 2548615176746366879, + 17237354895530185263, + 1797488250903408702, + 291026391931997698, + ]), + Fq::from_montgomery_limbs([ + 4501910777217553532, + 15462242547553693695, + 10499850527346203608, + 185455733513899003, + ]), + Fq::from_montgomery_limbs([ + 16090235568988980360, + 8762996204253883831, + 17672444665847082580, + 116738187400143515, + ]), + Fq::from_montgomery_limbs([ + 10965139192629135304, + 2507527262352232221, + 7729853937802466392, + 18035572639182151, + ]), + Fq::from_montgomery_limbs([ + 8580764665041452750, + 2596276168345731737, + 607940303702198574, + 618123929142359699, + ]), + Fq::from_montgomery_limbs([ + 13620574122907011204, + 15580574422211693049, + 7152880373115697056, + 985573542184802400, + ]), + Fq::from_montgomery_limbs([ + 16090235568988980360, + 8762996204253883831, + 17672444665847082580, + 116738187400143515, + ]), + Fq::from_montgomery_limbs([ + 10167016895964480411, + 16734919608152084608, + 17983964361753590390, + 420319954536647974, + ]), + Fq::from_montgomery_limbs([ + 15950905455332638974, + 10638510376174954245, + 6190824109415358469, + 365471410765096812, + ]), + Fq::from_montgomery_limbs([ + 18272933275584544879, + 10491562475845979009, + 9925929908400688531, + 449428766487123474, + ]), + Fq::from_montgomery_limbs([ + 3137742302926509693, + 15046605844466714305, + 1991063102869025961, + 261841845081961819, + ]), + Fq::from_montgomery_limbs([ + 10965139192629135304, + 2507527262352232221, + 7729853937802466392, + 18035572639182151, + ]), + Fq::from_montgomery_limbs([ + 15950905455332638974, + 10638510376174954245, + 6190824109415358469, + 365471410765096812, + ]), + Fq::from_montgomery_limbs([ + 1117314920009271201, + 4543364499625431390, + 17867254861738919934, + 199268313635132044, + ]), + ]), + M_hat_inverse: SquareMatrix::<4, 16>::new_from_known([ + Fq::from_montgomery_limbs([ + 2912843796488841427, + 2986203785403700346, + 8782906370300679609, + 72348807101562454, + ]), + Fq::from_montgomery_limbs([ + 9009169579583668122, + 13163254771921611656, + 12500476150373767268, + 206041309714119899, + ]), + Fq::from_montgomery_limbs([ + 7160019720069709961, + 1207930472110715040, + 14896636547354890107, + 1070558624402680198, + ]), + Fq::from_montgomery_limbs([ + 769834061306938378, + 434866968268652066, + 13507727459817144106, + 1015899670515829318, + ]), + Fq::from_montgomery_limbs([ + 9009169579583668122, + 13163254771921611656, + 12500476150373767268, + 206041309714119899, + ]), + Fq::from_montgomery_limbs([ + 18105737139400699747, + 17092832644263385296, + 11448292449964576346, + 97503347880002371, + ]), + Fq::from_montgomery_limbs([ + 2486409206805834145, + 7132406107544192230, + 16724002743228709842, + 204690573034040147, + ]), + Fq::from_montgomery_limbs([ + 15517856203532702535, + 6456985507109804621, + 5236564190669238024, + 1219448662068878427, + ]), + Fq::from_montgomery_limbs([ + 7160019720069709961, + 1207930472110715040, + 14896636547354890107, + 1070558624402680198, + ]), + Fq::from_montgomery_limbs([ + 2486409206805834145, + 7132406107544192230, + 16724002743228709842, + 204690573034040147, + ]), + Fq::from_montgomery_limbs([ + 5324099184438075010, + 18365509704861776210, + 485662210662411512, + 332367568902751343, + ]), + Fq::from_montgomery_limbs([ + 12123690196900787584, + 13150159583617211350, + 15652393172789097814, + 509338692023573934, + ]), + Fq::from_montgomery_limbs([ + 769834061306938378, + 434866968268652066, + 13507727459817144106, + 1015899670515829318, + ]), + Fq::from_montgomery_limbs([ + 15517856203532702535, + 6456985507109804621, + 5236564190669238024, + 1219448662068878427, + ]), + Fq::from_montgomery_limbs([ + 12123690196900787584, + 13150159583617211350, + 15652393172789097814, + 509338692023573934, + ]), + Fq::from_montgomery_limbs([ + 3535747919942277633, + 17013697925000670341, + 11660128334245281, + 1118907618677696094, + ]), + ]), + M_00: Fq::from_montgomery_limbs([ + 2093244959304135473, + 7921656493611837028, + 14184576022206158435, + 729731999227928846, + ]), + M_i: Matrix::<5, 5, 25>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3550241294482541299, + 4181806201361874488, + 12479811686471816403, + 855474765552047927, + ]), + Fq::from_montgomery_limbs([ + 10733696657462375354, + 9051038123237754612, + 15768789564108221449, + 598829465077611102, + ]), + Fq::from_montgomery_limbs([ + 4780090151550846061, + 8840309929769970773, + 7282912445741669386, + 1146189173642481065, + ]), + Fq::from_montgomery_limbs([ + 4412170182102677248, + 3666416784507971023, + 16978031500730235082, + 244755965167984938, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10733696657462375354, + 9051038123237754612, + 15768789564108221449, + 598829465077611102, + ]), + Fq::from_montgomery_limbs([ + 1513630470854066869, + 4677614225413309486, + 10111857031931978945, + 500911903228030067, + ]), + Fq::from_montgomery_limbs([ + 3055507272271008448, + 8821455708710032658, + 11214733806280933596, + 435072795685184507, + ]), + Fq::from_montgomery_limbs([ + 2339289121714728061, + 16657308061121398565, + 2111925237313832617, + 572507462955239974, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4780090151550846061, + 8840309929769970773, + 7282912445741669386, + 1146189173642481065, + ]), + Fq::from_montgomery_limbs([ + 3055507272271008448, + 8821455708710032658, + 11214733806280933596, + 435072795685184507, + ]), + Fq::from_montgomery_limbs([ + 13866627529171609781, + 9361176355530684294, + 17598610984186907476, + 148068116833355292, + ]), + Fq::from_montgomery_limbs([ + 1636007787860515509, + 13796006064476623473, + 8087234008724486427, + 424300075186376057, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4412170182102677248, + 3666416784507971023, + 16978031500730235082, + 244755965167984938, + ]), + Fq::from_montgomery_limbs([ + 2339289121714728061, + 16657308061121398565, + 2111925237313832617, + 572507462955239974, + ]), + Fq::from_montgomery_limbs([ + 1636007787860515509, + 13796006064476623473, + 8087234008724486427, + 424300075186376057, + ]), + Fq::from_montgomery_limbs([ + 17138718893438209806, + 3832598667291101348, + 16820316856178316520, + 934255170445228361, + ]), + ]), + v_collection: [ + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([ + 16333313215653526970, + 2040802123570873567, + 13606956490394234585, + 551256550916377040, + ]), + Fq::from_montgomery_limbs([ + 5062406009186596704, + 16529967443609096569, + 8069040895545372020, + 1221611533051627754, + ]), + Fq::from_montgomery_limbs([ + 8776932849639973133, + 4157275033105063229, + 5219893242165609753, + 441476373599490172, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 11152363693389150632, + 7168263193567282683, + 1452700946751769356, + 436217109073156792, + ]), + Fq::from_montgomery_limbs([ + 13970337958464724119, + 17109877554760172091, + 12788764852517710407, + 839284445089847973, + ]), + Fq::from_montgomery_limbs([ + 15163746983822199844, + 11654724925143124644, + 9602216610999473293, + 519210689768164370, + ]), + Fq::from_montgomery_limbs([ + 10182434037205209725, + 9621286367095233356, + 8404025194304421834, + 344727351078320731, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 16755358458570043164, + 10280398262063275743, + 17321778533676321974, + 143546509776638006, + ]), + Fq::from_montgomery_limbs([ + 9894685689427310276, + 13317494114689924797, + 8039678456153006986, + 320726242987073750, + ]), + Fq::from_montgomery_limbs([ + 10892251073208715123, + 9975233878611449982, + 11944979761650688031, + 279665888955724801, + ]), + Fq::from_montgomery_limbs([ + 2806869061497062911, + 16847498917844641241, + 12155099785802870367, + 612418149303740633, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 1943262751829125522, + 12763321846226199313, + 6747770469779104151, + 951539986961178929, + ]), + Fq::from_montgomery_limbs([ + 16058796408745659861, + 17170055100384124922, + 1586157489739998203, + 1036791847629253806, + ]), + Fq::from_montgomery_limbs([ + 2170272984479571023, + 39206051687503551, + 73036971397233251, + 323555571475294666, + ]), + Fq::from_montgomery_limbs([ + 13939509715106692697, + 9339647999495962035, + 11925062741591314295, + 1167415533183673898, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 6979434117673847033, + 3048055255536618747, + 13743910631909977125, + 783906807780161297, + ]), + Fq::from_montgomery_limbs([ + 17010292649383249624, + 7578772047158193525, + 1259524131029379452, + 241494970118020102, + ]), + Fq::from_montgomery_limbs([ + 8104232396866985927, + 12510732557073130064, + 9629433082008929246, + 1035242752646990544, + ]), + Fq::from_montgomery_limbs([ + 16796634656430258298, + 14112008759289957096, + 6452208208519466013, + 1048584847398376572, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 15748961458778365618, + 8601741670573679852, + 9437158324168441506, + 977044327661253334, + ]), + Fq::from_montgomery_limbs([ + 5158908350016140691, + 8596065138269817166, + 4752647801985797199, + 1176021914613979688, + ]), + Fq::from_montgomery_limbs([ + 17831888852747325597, + 9652101022265686283, + 1555288054471442793, + 65814168324416153, + ]), + Fq::from_montgomery_limbs([ + 10495561656210166211, + 10989451257550783972, + 8015055214453272328, + 409799830087238982, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 2331967402451752193, + 2109682558241205572, + 1825337663297053092, + 878857572660922318, + ]), + Fq::from_montgomery_limbs([ + 12336449333325242432, + 5499382277476614407, + 11404022977159740856, + 478044609105512850, + ]), + Fq::from_montgomery_limbs([ + 10790217870923516271, + 10590091398034592831, + 2798879849340254683, + 1097244195350236928, + ]), + Fq::from_montgomery_limbs([ + 13063047010146157876, + 14542415641892323856, + 17083019212457052807, + 1089087010292700700, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 1931130401025711378, + 11841912731002402383, + 12257729010461348591, + 475921619378996396, + ]), + Fq::from_montgomery_limbs([ + 2043623821806520253, + 6264756844797844292, + 9140556588049529897, + 357097751413650712, + ]), + Fq::from_montgomery_limbs([ + 13748314028353391771, + 7554401384369793136, + 15484455053202687098, + 1015396556130205108, + ]), + Fq::from_montgomery_limbs([ + 12112322445843745250, + 9643021818792026083, + 7010640491952178418, + 912560635387385014, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 15884856584565086050, + 4328763398811725844, + 2194324022836935036, + 564940183680880064, + ]), + Fq::from_montgomery_limbs([ + 10368325909078307315, + 16258151264498137456, + 12821855576160737507, + 168843008052784532, + ]), + Fq::from_montgomery_limbs([ + 6775860316590005410, + 1587081089529470620, + 12761600899048989463, + 547743431636452378, + ]), + Fq::from_montgomery_limbs([ + 5499459000866536496, + 17225191771611977200, + 15501710310620154491, + 515684463452344496, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 12129682192729323843, + 8486777067374758801, + 1157895296096676184, + 662132892983063060, + ]), + Fq::from_montgomery_limbs([ + 174757932292384330, + 3152593721116333206, + 12164153154782094245, + 1099436573600079710, + ]), + Fq::from_montgomery_limbs([ + 615845028898507200, + 4670618999889700824, + 12443454676890805497, + 518935605666369522, + ]), + Fq::from_montgomery_limbs([ + 16912386391968429424, + 5290244798379778177, + 11209464492300379874, + 586454799338251353, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 12080638299294159093, + 1960331238298728784, + 2898980097890331004, + 921670658451130495, + ]), + Fq::from_montgomery_limbs([ + 16215351708207141464, + 7345269023494330137, + 12994383926037492649, + 224185396018231372, + ]), + Fq::from_montgomery_limbs([ + 3554838652407488913, + 6074835006636416927, + 15656375499922407950, + 15940578339816345, + ]), + Fq::from_montgomery_limbs([ + 7221246958182853009, + 6510601905224702473, + 12824776152597435860, + 725837117656279675, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 13527778764121271275, + 1030490900095715048, + 12857340760482021894, + 936580603253300439, + ]), + Fq::from_montgomery_limbs([ + 12930617827781800730, + 3249690311936291363, + 1303559984190780453, + 990745867675858343, + ]), + Fq::from_montgomery_limbs([ + 10347830123499261941, + 14744724164671532382, + 15017413323955480611, + 865517056617574158, + ]), + Fq::from_montgomery_limbs([ + 13222342262320869452, + 930250546901263311, + 6148846827329484586, + 816792556508332788, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 270522433778958450, + 9810558015885994375, + 12801721076082256784, + 428014500155741958, + ]), + Fq::from_montgomery_limbs([ + 17216419355251603785, + 16776182263454362660, + 17464958086342114244, + 1020854289329138282, + ]), + Fq::from_montgomery_limbs([ + 14583513917939718723, + 16464432348709798589, + 5524662795591881534, + 504799586387620122, + ]), + Fq::from_montgomery_limbs([ + 9494047844709044490, + 9514125194357777841, + 9204079242382538181, + 1326388421861125510, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 7051493540766021999, + 14714874558861007051, + 12179359128314955274, + 431397382988804936, + ]), + Fq::from_montgomery_limbs([ + 14285688927589864668, + 8964657502437295762, + 10607145890133654906, + 644415764475289967, + ]), + Fq::from_montgomery_limbs([ + 9070138432342296337, + 17136148269824501435, + 16709615536037568565, + 1088774414904578634, + ]), + Fq::from_montgomery_limbs([ + 9017804360060337869, + 5120895363411029290, + 14759539588564342239, + 251323438509473927, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 614700763379600159, + 12518761935375538118, + 4440750989807847128, + 10689910160914840, + ]), + Fq::from_montgomery_limbs([ + 16233894446868518964, + 232968488158620891, + 3648936371760108401, + 87053101363493664, + ]), + Fq::from_montgomery_limbs([ + 4682437298124427841, + 10048101470247329816, + 5838396498674936533, + 76707223622697042, + ]), + Fq::from_montgomery_limbs([ + 4844729186655784101, + 5073462805990634750, + 369364776025047222, + 1205067782666401609, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 11811297399794142233, + 1367273165695851273, + 9482096466685101348, + 278101973543607386, + ]), + Fq::from_montgomery_limbs([ + 700938287003557444, + 10784390521545837670, + 652198576027059045, + 1257111617232546179, + ]), + Fq::from_montgomery_limbs([ + 7023353639663907189, + 844196405846330427, + 3670187877020232969, + 467197560404961638, + ]), + Fq::from_montgomery_limbs([ + 3255328098459903221, + 1373891119440715166, + 9229957119786296543, + 511813603491106053, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 7074698954249379124, + 597938652890685454, + 4893589759540026630, + 13821006431840376, + ]), + Fq::from_montgomery_limbs([ + 9050360858429500710, + 712154751922466901, + 2783564310815451475, + 361791763218230554, + ]), + Fq::from_montgomery_limbs([ + 2543657380738906130, + 7730539901174656512, + 9349888058233016421, + 1105296308578399874, + ]), + Fq::from_montgomery_limbs([ + 12462195693380123490, + 9135340915133672169, + 2529249849635714105, + 1028662249374476992, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 3997059354097159592, + 14396586541557506890, + 15126937915868653526, + 1190014880085637787, + ]), + Fq::from_montgomery_limbs([ + 71730461663727489, + 6481482986298961851, + 2863781531983795764, + 676732583839455648, + ]), + Fq::from_montgomery_limbs([ + 11976979288710790629, + 18385617837556037683, + 2427331777175576996, + 271478597561256238, + ]), + Fq::from_montgomery_limbs([ + 14665157190813807512, + 4593895870413934871, + 17259515554442068841, + 822957347764507743, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 7149525206288877270, + 17921481572667347774, + 2621958866898809461, + 1253764315637746764, + ]), + Fq::from_montgomery_limbs([ + 3409735133900390936, + 136473863329815600, + 15309385832522383920, + 1169764220492589436, + ]), + Fq::from_montgomery_limbs([ + 7033172430223502268, + 240255878942338808, + 6398794669496471317, + 628797443576353581, + ]), + Fq::from_montgomery_limbs([ + 7953065623402270259, + 8501997013689665019, + 5960083925037855492, + 295456887863221215, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 15195370696120832657, + 17781142206152991864, + 2238407181422098285, + 841138092128746233, + ]), + Fq::from_montgomery_limbs([ + 12824831901012180308, + 12167693598895623388, + 11028443174628128031, + 11577460208414501, + ]), + Fq::from_montgomery_limbs([ + 3327689546198888048, + 12391493112771759962, + 307868198412140618, + 1159504727071219081, + ]), + Fq::from_montgomery_limbs([ + 3049104073000031564, + 17357418971393386361, + 996987970433781915, + 116813261500484748, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 10884166330331702882, + 17425353526410834453, + 13326907998045201293, + 413735914240279347, + ]), + Fq::from_montgomery_limbs([ + 12473777284989231213, + 17638157720713586222, + 7280940291577634976, + 165394770300217809, + ]), + Fq::from_montgomery_limbs([ + 6075495009078142294, + 15423443319709019929, + 10104593150500616837, + 356519351756886421, + ]), + Fq::from_montgomery_limbs([ + 4453851468262956706, + 17578058950978353938, + 5693306616848551388, + 65029682653071572, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 8478514957045721547, + 1837595243779150041, + 2731509554274646589, + 1330775784497928083, + ]), + Fq::from_montgomery_limbs([ + 5199974098799727027, + 4404072971729349177, + 9646912483549069990, + 218329131799988219, + ]), + Fq::from_montgomery_limbs([ + 660001227897806842, + 8207988798347696530, + 13044592656758679072, + 480823461712968712, + ]), + Fq::from_montgomery_limbs([ + 2124249976672750300, + 16810194224873279051, + 8413199247867349887, + 252618070410064009, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 4556458494955145970, + 14725473799943575915, + 6762752380673415129, + 1316259551723935370, + ]), + Fq::from_montgomery_limbs([ + 16979681563871369563, + 5158090131973535020, + 2347846896725164220, + 295285400051150767, + ]), + Fq::from_montgomery_limbs([ + 13585313619033311504, + 16684285379674594726, + 6119191656194738492, + 455955275887010759, + ]), + Fq::from_montgomery_limbs([ + 3454774308783696473, + 10535559679543981910, + 15358478203203343679, + 240649127531759812, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 16198893952998692648, + 7621510146767446726, + 5423085782991616007, + 484917335576147571, + ]), + Fq::from_montgomery_limbs([ + 12418560142694938034, + 9630762732922483573, + 11756502878189980458, + 1064509096436490989, + ]), + Fq::from_montgomery_limbs([ + 6432783853572915686, + 8373421070941771076, + 9999207991110274176, + 227092656935087544, + ]), + Fq::from_montgomery_limbs([ + 2481263986424351332, + 5524660820856664127, + 1844129905336978496, + 940613905523784942, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 16138212250303786584, + 7239588475022848974, + 10699859199281641521, + 591755207097992795, + ]), + Fq::from_montgomery_limbs([ + 12068127359176715698, + 9201897464239423846, + 16468376872261041490, + 4468311430440924, + ]), + Fq::from_montgomery_limbs([ + 4076476707186060475, + 17992082137333534347, + 6815132661837439512, + 278384059575851924, + ]), + Fq::from_montgomery_limbs([ + 17018342029879137108, + 15055574099156300093, + 11677650203572471840, + 144664137444733523, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 8317396731115292545, + 18067636204720558118, + 14890417508627474416, + 793524012844400414, + ]), + Fq::from_montgomery_limbs([ + 13379864138421857399, + 362217527193745219, + 15798919921502256623, + 1097917902435666499, + ]), + Fq::from_montgomery_limbs([ + 12810510919435274272, + 14423646849331158587, + 9841501271852473232, + 725922426352114610, + ]), + Fq::from_montgomery_limbs([ + 17018030548797472114, + 14895024219584398144, + 12492061782442092972, + 762315198620019019, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 1701906145521012707, + 10296626786628438399, + 10754570760997467096, + 336488969849416237, + ]), + Fq::from_montgomery_limbs([ + 254576632745845475, + 16526828097705762792, + 14770819661184367983, + 243834243852718897, + ]), + Fq::from_montgomery_limbs([ + 4102931554245931369, + 16027764780080619999, + 8334572247339515265, + 368246411244951631, + ]), + Fq::from_montgomery_limbs([ + 4561744176382664009, + 2911477542790161454, + 3011707291091124269, + 556376879137998058, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 3296358868716422366, + 9039393853864308074, + 17847711501823630457, + 1005226492488439642, + ]), + Fq::from_montgomery_limbs([ + 4031069363410182489, + 7351394901266043534, + 16764075333050932509, + 1335716800346461455, + ]), + Fq::from_montgomery_limbs([ + 7923744999493545562, + 5624877492918299446, + 1035450251487215992, + 66195541204638202, + ]), + Fq::from_montgomery_limbs([ + 10021219165650904780, + 11526735379442916846, + 15137554942549712865, + 220711145305168309, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 17539749312900092691, + 1394325220480450609, + 8427780606119340085, + 214541826368037298, + ]), + Fq::from_montgomery_limbs([ + 14979072356738539172, + 8588389061504370168, + 17185566872280556497, + 1119865054078041, + ]), + Fq::from_montgomery_limbs([ + 13832855658344903569, + 17699617991822202836, + 12719246950037163765, + 809144901785178492, + ]), + Fq::from_montgomery_limbs([ + 5258746201047632203, + 16795607952264798969, + 12589457419107454073, + 852487165526431816, + ]), + ]), + Matrix::<1, 4, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 18017611145361501469, + 17582515812396321648, + 2919031829448009162, + 551871759286894908, + ]), + Fq::from_montgomery_limbs([ + 15370904975677001433, + 7214748906490449079, + 16152167407980539558, + 1171554702393986442, + ]), + Fq::from_montgomery_limbs([ + 10634655764649983482, + 15431077074812693397, + 2552280196567255, + 712776250826311075, + ]), + Fq::from_montgomery_limbs([ + 13708388833019942700, + 491334836724789600, + 11731367761263890755, + 1197388142335296709, + ]), + ]), + ], + w_hat_collection: [ + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 8008150737402636880, + 4488734692587776588, + 1547555191554943536, + 1006206882335955987, + ]), + Fq::from_montgomery_limbs([ + 4174856959927929341, + 6956702737728349555, + 11313218605335544685, + 1279701926361717254, + ]), + Fq::from_montgomery_limbs([ + 14997388866253338116, + 17951148788181031565, + 14101804784614517907, + 65578444326456143, + ]), + Fq::from_montgomery_limbs([ + 6853363902592985329, + 4486369932351851910, + 65610707319252285, + 873172475563117547, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 579603889306395083, + 2560608140709899462, + 18146698412336151881, + 60258495702968472, + ]), + Fq::from_montgomery_limbs([ + 9924506099485967285, + 14841337095946012878, + 6550473620052701980, + 355439357201872457, + ]), + Fq::from_montgomery_limbs([ + 12531688174264614033, + 3629799128760975880, + 14801960216155767350, + 1064176756880888081, + ]), + Fq::from_montgomery_limbs([ + 10680016211572180547, + 7640186196594536338, + 6573062001669273848, + 464429714610594606, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 18417588127792957015, + 16444529523188187364, + 12084138139912705579, + 16805794537696529, + ]), + Fq::from_montgomery_limbs([ + 13339545413024956285, + 12462761674569060732, + 10134406054826483261, + 583754886928078523, + ]), + Fq::from_montgomery_limbs([ + 6246845195152016496, + 16016738864936728009, + 5667948898993596155, + 948927193584489029, + ]), + Fq::from_montgomery_limbs([ + 17388237537280169500, + 14688406879934192659, + 9909558203923179050, + 70400508517387223, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 5474861045381340177, + 7686087527544521306, + 11338593297362199268, + 1021856532337771510, + ]), + Fq::from_montgomery_limbs([ + 8052444443922943850, + 4009271504061137276, + 5568866554849053281, + 1340081542973701928, + ]), + Fq::from_montgomery_limbs([ + 13718366036845239510, + 18043008954918195926, + 9743799172723723811, + 242610881533123775, + ]), + Fq::from_montgomery_limbs([ + 12288963833321771774, + 11144465775025909714, + 3141275767114171625, + 895525891428781574, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 12404021506369929265, + 14478431220710638983, + 16528978820778867199, + 1337150421852075847, + ]), + Fq::from_montgomery_limbs([ + 14269177948606518010, + 14317366494171555302, + 17781066350959942798, + 197359887673063489, + ]), + Fq::from_montgomery_limbs([ + 12899528200685423645, + 1817678529746564917, + 2099502764987009011, + 1116816677457497135, + ]), + Fq::from_montgomery_limbs([ + 6364946926969012391, + 15881033552478042103, + 16127504872579347712, + 382615667735657086, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 11058646051271038745, + 6859926553724662452, + 14087301393004364310, + 933306102477549317, + ]), + Fq::from_montgomery_limbs([ + 1055047094489815101, + 4078033726602170946, + 12892578489024905517, + 1281158139572661976, + ]), + Fq::from_montgomery_limbs([ + 5359943878923586203, + 16376042868862104786, + 5637680489769528437, + 274508389146665774, + ]), + Fq::from_montgomery_limbs([ + 9466887184987077213, + 12707324624592417252, + 5674722778664167831, + 495915214907561344, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 5559270171112387908, + 18090552370541844697, + 4468532076227855438, + 987685496358074261, + ]), + Fq::from_montgomery_limbs([ + 10757975082173786027, + 17106276533668884653, + 16008494306379137448, + 1236424776827918502, + ]), + Fq::from_montgomery_limbs([ + 12651630831207509026, + 9201507732813618723, + 16271105479151831696, + 1088028967768313039, + ]), + Fq::from_montgomery_limbs([ + 1230449153550648107, + 265047928608104139, + 14808043482234569955, + 325688046287390058, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 13141399420347535214, + 10323718706655672545, + 5271972852381490754, + 698174654390126163, + ]), + Fq::from_montgomery_limbs([ + 372444215127449162, + 6596103022703759073, + 1647706108480519163, + 886941719362299906, + ]), + Fq::from_montgomery_limbs([ + 5032445406852833227, + 3216505841560606858, + 6517925226383774397, + 1070169747543143371, + ]), + Fq::from_montgomery_limbs([ + 606117931900595268, + 11653697130177906902, + 16942600493441083920, + 207641435432611378, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 10156513900929988871, + 10530356278918523762, + 14822893961039084664, + 161451167716228232, + ]), + Fq::from_montgomery_limbs([ + 5121741770267475287, + 15513755736291034019, + 15586246947451164544, + 318686326614228424, + ]), + Fq::from_montgomery_limbs([ + 10544893749060569045, + 16634377462455718128, + 15424965125419130088, + 421312194245698247, + ]), + Fq::from_montgomery_limbs([ + 11266056403263964991, + 12568371609374858109, + 3531321490936409191, + 508836381468284493, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 14899630606893874181, + 6378344959523143322, + 5326343488656073582, + 678256632460809235, + ]), + Fq::from_montgomery_limbs([ + 8604354652434330145, + 15276531567938090768, + 4221676591098543719, + 887292207042946940, + ]), + Fq::from_montgomery_limbs([ + 10167720299639556674, + 4032113283136195884, + 15412529848138749452, + 21416729784789829, + ]), + Fq::from_montgomery_limbs([ + 1744850832220109759, + 13008821337905939469, + 11071631382001010551, + 788542992044475498, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 2588487693831923600, + 819162455518477850, + 14502680861403887785, + 203676022757604871, + ]), + Fq::from_montgomery_limbs([ + 15050651530407319810, + 5238818184223155551, + 10359161461431902961, + 163152244193461490, + ]), + Fq::from_montgomery_limbs([ + 11621410489163276959, + 8095296962816118406, + 17382993292008629559, + 830965834513277734, + ]), + Fq::from_montgomery_limbs([ + 4679845673800762002, + 11732742802677067267, + 5456637834111887652, + 399639723348579854, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 2687561395762377863, + 2742745916341259698, + 3044301131411393039, + 723385064584425062, + ]), + Fq::from_montgomery_limbs([ + 7499903664201677436, + 10700255296173911735, + 9370120751716629255, + 519782401388716596, + ]), + Fq::from_montgomery_limbs([ + 12815697858642806748, + 3589518328364739416, + 5217556848154698002, + 1289540407776785865, + ]), + Fq::from_montgomery_limbs([ + 5916520816310451970, + 9082425633134247720, + 12382542148805970812, + 992107013138241122, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 6236639905261224386, + 843729385509220216, + 910784084401746031, + 557709047224682096, + ]), + Fq::from_montgomery_limbs([ + 15307210632392180298, + 15607334968149180484, + 9709374798094721055, + 911705022776362835, + ]), + Fq::from_montgomery_limbs([ + 565211768823822757, + 4304458791623152845, + 10249442774709061676, + 1097659357675265239, + ]), + Fq::from_montgomery_limbs([ + 12205146530944986348, + 2116986434579909283, + 4201175271170209969, + 992267258612987371, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 12458858951338998496, + 4060946816566081281, + 4815111439256220560, + 889585388579716031, + ]), + Fq::from_montgomery_limbs([ + 13330737697681975741, + 14306352519046153100, + 6792373522794028640, + 181857489562014553, + ]), + Fq::from_montgomery_limbs([ + 9910876762206447536, + 2419056950848665021, + 5515306838952911504, + 400668493068602121, + ]), + Fq::from_montgomery_limbs([ + 4501996026292399474, + 3944405189426212415, + 2099089514371618361, + 339943583855773594, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 2693369834887763486, + 5226235063818719501, + 1134958389215915674, + 216164169472267996, + ]), + Fq::from_montgomery_limbs([ + 11481921067854847814, + 3619328605795306677, + 1172215419425542958, + 698824999301654900, + ]), + Fq::from_montgomery_limbs([ + 5583148815732609314, + 7533776866599928206, + 4700764388317654893, + 795419583657348713, + ]), + Fq::from_montgomery_limbs([ + 17490171026965334038, + 511945728425642245, + 7365182481044577047, + 220760401169961586, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 3475090391351524558, + 14779509624823172685, + 3424268588547377302, + 807300922038386992, + ]), + Fq::from_montgomery_limbs([ + 2661498283128546182, + 8564296373141310570, + 1331354831148546679, + 288633548378759086, + ]), + Fq::from_montgomery_limbs([ + 160646850906444279, + 16524505359942069161, + 907391002106299867, + 559294066232203259, + ]), + Fq::from_montgomery_limbs([ + 15868970648699916119, + 4564623492190132505, + 13103059063354872833, + 100862674768271570, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 1221307603989354164, + 12587043720970902174, + 16895819776297027028, + 145062209314500623, + ]), + Fq::from_montgomery_limbs([ + 16353516398818965607, + 14353195469809830563, + 6413743319392341778, + 328149786789847495, + ]), + Fq::from_montgomery_limbs([ + 18408500173092127083, + 15531422165208984882, + 15085140826729156921, + 838526002683321237, + ]), + Fq::from_montgomery_limbs([ + 17044208833349483673, + 4186851180160463186, + 18439292304841373891, + 635623871921935831, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 12010244824104902831, + 7094652480399574006, + 4750126738460582225, + 989637526032941486, + ]), + Fq::from_montgomery_limbs([ + 4441078329722014290, + 13429060628884043553, + 17809157578144273686, + 434244385592794118, + ]), + Fq::from_montgomery_limbs([ + 6991808242812880086, + 9244601469821298803, + 240701800791269362, + 709808634005480046, + ]), + Fq::from_montgomery_limbs([ + 13857085282532288295, + 308678407453354502, + 15922558612862651645, + 851414952912951519, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 5101399957442677481, + 2142578709995607628, + 15743510483605305349, + 666733543413083275, + ]), + Fq::from_montgomery_limbs([ + 4873022314864281149, + 13307090161474032822, + 14158291996867903752, + 938052837538358985, + ]), + Fq::from_montgomery_limbs([ + 1546160817298626130, + 10540049778787005713, + 3368713709127751691, + 363188968017269367, + ]), + Fq::from_montgomery_limbs([ + 672262991009706902, + 12218048109997218244, + 13699765194488826580, + 1084475947638507828, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 18346923840081698634, + 12943712128874619670, + 4019790911633783753, + 1100400008744250128, + ]), + Fq::from_montgomery_limbs([ + 17812255713702828327, + 18006780541970109111, + 15638439909761933062, + 607605721282836799, + ]), + Fq::from_montgomery_limbs([ + 2146046584044097439, + 13101190276266477217, + 13417007043729135623, + 306909505181101092, + ]), + Fq::from_montgomery_limbs([ + 5881505764977051707, + 9027582737682954755, + 13113110745761042063, + 498156427767794980, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 18445494826303215741, + 1922640032275348520, + 18401753303151108255, + 413700892364628288, + ]), + Fq::from_montgomery_limbs([ + 5713551333083111944, + 13466982107671483604, + 18052718879288026086, + 606241695332365536, + ]), + Fq::from_montgomery_limbs([ + 5341312667566345417, + 15999363884279236272, + 3859963172427206256, + 137512694474664211, + ]), + Fq::from_montgomery_limbs([ + 17490177364963826654, + 14543044352686070271, + 16150001646614169348, + 704698259553703393, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 9727568846190657427, + 14417114472564400058, + 9365197390786121627, + 794983300027476088, + ]), + Fq::from_montgomery_limbs([ + 12997373201110860726, + 14246380874068335614, + 13296665919577048738, + 1098745640843188596, + ]), + Fq::from_montgomery_limbs([ + 7228530868527339586, + 15583029622716990094, + 8861208517089803667, + 82901497917931480, + ]), + Fq::from_montgomery_limbs([ + 13638279809916295410, + 128790733739477632, + 8417886451161888027, + 991255423238702330, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 11087968183222739640, + 2587511469422769048, + 14523312587696220059, + 192146587408207716, + ]), + Fq::from_montgomery_limbs([ + 8412996681904903641, + 11887442821301638447, + 3370639369565289246, + 53949002610311715, + ]), + Fq::from_montgomery_limbs([ + 14762391536874926895, + 10740959434718252074, + 1226825919833891779, + 365160723178298573, + ]), + Fq::from_montgomery_limbs([ + 1555330760834900970, + 1518370310210703133, + 1735267998098714592, + 1025622291285303779, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 1334503499975428364, + 10717052295534688524, + 7361984650156075053, + 844791857359624202, + ]), + Fq::from_montgomery_limbs([ + 16941837112843173147, + 2487213732723210497, + 6266342779648955295, + 833823163972637517, + ]), + Fq::from_montgomery_limbs([ + 17244221202450562885, + 9683927217285200288, + 17625214279845872049, + 72929072308819687, + ]), + Fq::from_montgomery_limbs([ + 17322021997939023067, + 12230087119796208396, + 18396814271884812695, + 813805950829206789, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 15948063285113474855, + 10770603797800150235, + 6677092062918475126, + 1088103102296276139, + ]), + Fq::from_montgomery_limbs([ + 7711244693099635983, + 3166785488663936361, + 4922456695483615993, + 430831973502880121, + ]), + Fq::from_montgomery_limbs([ + 3809367189852072520, + 9855677685061821074, + 945495584216248446, + 909359350460583709, + ]), + Fq::from_montgomery_limbs([ + 8110395815872458853, + 1514592973182402061, + 790829722054948037, + 353129076761034824, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 4490522698778351596, + 14224519981854920216, + 17099540428194228219, + 339422077308612769, + ]), + Fq::from_montgomery_limbs([ + 5639095254854416487, + 1620715418926540453, + 2533378178940440961, + 1219281352481947332, + ]), + Fq::from_montgomery_limbs([ + 10638608741850236276, + 6613656335866104958, + 7688920349526656377, + 267050381048915175, + ]), + Fq::from_montgomery_limbs([ + 3036522849970263675, + 6507669881427436695, + 17574949570571358776, + 1277705835314573728, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 2222484869463773519, + 6808168746395796147, + 4421285536548949511, + 221502296849107896, + ]), + Fq::from_montgomery_limbs([ + 13864906390918380841, + 14542080963104347726, + 4946615231209518707, + 410716390051665697, + ]), + Fq::from_montgomery_limbs([ + 17342164341678591250, + 2157153117836804364, + 17774122463652037556, + 1045677158150316262, + ]), + Fq::from_montgomery_limbs([ + 1897195111902571201, + 7441808212794130262, + 14230292566113962566, + 158679422354435267, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 12385311968994581122, + 13994070371431075240, + 8808495601965357849, + 1021378877363492133, + ]), + Fq::from_montgomery_limbs([ + 6493128916407973417, + 7997830985039481850, + 7096965712368312908, + 1047173662891619916, + ]), + Fq::from_montgomery_limbs([ + 4284147259360490869, + 16041408471489150031, + 7607939514063442430, + 829626684549401311, + ]), + Fq::from_montgomery_limbs([ + 1856817747001420784, + 16357946393175270201, + 9210719327832581050, + 1018175197760234391, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 5500145050367041469, + 3840984581227276122, + 3431832361289319237, + 260564656886891183, + ]), + Fq::from_montgomery_limbs([ + 14712945504944782403, + 15039214861617765141, + 11103751083365574273, + 113689317515455733, + ]), + Fq::from_montgomery_limbs([ + 701726807475653267, + 14140055316542680948, + 3011442975075019770, + 584361997905323533, + ]), + Fq::from_montgomery_limbs([ + 17748483580890358752, + 10604246296825603311, + 13033470142003819820, + 599441163676514743, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 5299230594859812716, + 16638780731660150925, + 952927811712562861, + 498189305785932392, + ]), + Fq::from_montgomery_limbs([ + 4432890524542841769, + 1996216122820571178, + 12192741690714508643, + 764076413945664713, + ]), + Fq::from_montgomery_limbs([ + 13089352217465064175, + 15801731950730062998, + 16367845731547800506, + 315925055121715682, + ]), + Fq::from_montgomery_limbs([ + 4079387977856382544, + 9219169523776319636, + 17133435751310074522, + 1287156460338158966, + ]), + ]), + Matrix::<4, 1, 4>::new_from_known([ + Fq::from_montgomery_limbs([ + 14473285560728073066, + 3618147328828088415, + 4933194636388348895, + 391722132844625282, + ]), + Fq::from_montgomery_limbs([ + 13555572770500462469, + 12796156150384677031, + 16297295557264104694, + 523410635806816263, + ]), + Fq::from_montgomery_limbs([ + 6170968086362616849, + 306706920248086968, + 4382856058195592988, + 1226950348108880303, + ]), + Fq::from_montgomery_limbs([ + 3093606516563139647, + 4131257826299546810, + 10588085520003095457, + 1310373646887997506, + ]), + ]), + ], + }, + optimized_arc: OptimizedArcMatrix::<39, 5, 195>::new_from_known([ + Fq::from_montgomery_limbs([ + 9886223877583555338, + 2726526174642559934, + 4587790518566470505, + 576729411659255749, + ]), + Fq::from_montgomery_limbs([ + 8635683872171027649, + 6178568763530680712, + 4049298017970875225, + 1010899895527016760, + ]), + Fq::from_montgomery_limbs([ + 4386287284362214114, + 15794275297560972982, + 13426231751965312445, + 1202171528338027358, + ]), + Fq::from_montgomery_limbs([ + 748088700594287215, + 1472010505444622065, + 17517940238534715767, + 284646916897302179, + ]), + Fq::from_montgomery_limbs([ + 10279507610927218934, + 8427605231324569630, + 5256766482183491681, + 599767801296570400, + ]), + Fq::from_montgomery_limbs([ + 5616532683870270019, + 16714573776517987780, + 2780158541662869274, + 82005381951989400, + ]), + Fq::from_montgomery_limbs([ + 628047193644056282, + 3081927050412275131, + 16607349608647881262, + 723666033729227034, + ]), + Fq::from_montgomery_limbs([ + 4014053105906402474, + 8516064025130570203, + 16439212471763340654, + 1066408903228028504, + ]), + Fq::from_montgomery_limbs([ + 3781775891997454435, + 16784197273788891439, + 15993490775706321548, + 1246974369195687342, + ]), + Fq::from_montgomery_limbs([ + 13315871439997102610, + 1360174578976506509, + 1935727712649190133, + 888928512483410116, + ]), + Fq::from_montgomery_limbs([ + 8976641770861237410, + 6687451940339132521, + 18044907108310696377, + 1207869807557250559, + ]), + Fq::from_montgomery_limbs([ + 4528878922761055500, + 7463187218610955446, + 4533754848507645556, + 35071527712858390, + ]), + Fq::from_montgomery_limbs([ + 2054133897613963099, + 8179564031063470525, + 1531556284029346638, + 874298192527556148, + ]), + Fq::from_montgomery_limbs([ + 18305580017782407596, + 2150793914184610589, + 17311607174845242499, + 959373557899881125, + ]), + Fq::from_montgomery_limbs([ + 11483900964553043288, + 12487129025031613244, + 15391908241276224492, + 269335905993702128, + ]), + Fq::from_montgomery_limbs([ + 8338971145620331245, + 12372781419517678375, + 2199283600481834995, + 349132078387032325, + ]), + Fq::from_montgomery_limbs([ + 16711498854962897180, + 964757925282058102, + 2534475787702313401, + 879174178299686832, + ]), + Fq::from_montgomery_limbs([ + 9948612635577575267, + 10310004629375851550, + 14569008704673249814, + 698796675030817938, + ]), + Fq::from_montgomery_limbs([ + 11983101385647491113, + 6756494718617323834, + 3986787822213493305, + 810568397631777742, + ]), + Fq::from_montgomery_limbs([ + 263703597816264419, + 5391923373962277868, + 8069762938958691329, + 167001460324522424, + ]), + Fq::from_montgomery_limbs([ + 12719698031922087137, + 3635206538516773241, + 14946573674542408006, + 904022619675467349, + ]), + Fq::from_montgomery_limbs([ + 6762216158719169172, + 9642199571024567935, + 5142823812984968700, + 1291046148927292666, + ]), + Fq::from_montgomery_limbs([ + 16680204203505507730, + 8087548591244649631, + 15438619206653090081, + 1223574451283768225, + ]), + Fq::from_montgomery_limbs([ + 15843265781989514164, + 11764842050278291695, + 5504272762074655066, + 1332848573377839351, + ]), + Fq::from_montgomery_limbs([ + 14629863041087566865, + 13982939885426451475, + 4404573463578858817, + 228759527459751766, + ]), + Fq::from_montgomery_limbs([ + 5809286761889033537, + 11277370821793444978, + 3107117479578979614, + 305735955848689987, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13948409934814415504, + 9820154694698383592, + 15339478710638889187, + 228350902630534490, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9065604528638698957, + 3194171905752976735, + 3352166936878863002, + 1231275645191263862, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8579200991377095094, + 9015821969914095981, + 3670786722209097686, + 925402881763579823, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11761775895269121220, + 12572917397999688032, + 10698111778021992718, + 739030648247632040, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1406476064536236033, + 9641904169359584691, + 209897974740814668, + 1004730517253795328, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18342895263686664503, + 17441455493733274041, + 5057199659823690304, + 1191886919996393979, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18290582194527069827, + 6852353546873280582, + 14232314971261025505, + 754530050701193486, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6721150425319195661, + 13696483494608803551, + 14639895569983779179, + 190432279900459470, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2285783420521743219, + 14591994399938496304, + 12535886408060618378, + 501101710489306684, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7822724896156552074, + 7689777522145170361, + 9730977649721376401, + 311055255784537528, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1834958024306476590, + 16605000872934730848, + 8734772715942251355, + 1026168817960127241, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5790287081621506475, + 18067297368696384877, + 1971894623462079455, + 497112957651892314, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8621725523835646269, + 12965774417410118256, + 14706095127353190822, + 1142857683996139025, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15741284293667530319, + 12915384592541106208, + 10337602748724507139, + 621400944646732378, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10418600921631639086, + 13969232505211882397, + 6670084530256782375, + 589250133235990401, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13301798549602548743, + 5096901969148881844, + 14446280392699573069, + 437782466408137787, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14260778386751756941, + 15721044723566323721, + 9992114336939362025, + 1127453549788190537, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9374740633145639151, + 2749992728162535287, + 324605534042342541, + 875415928381457928, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 267437928690707389, + 15443945850723586497, + 12627722626447870588, + 76078095185201612, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10923993363806369263, + 18267784178840739395, + 14630481450219570438, + 378947118067140053, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11403976482284459978, + 16272983986590444793, + 3765503922077751896, + 79364539722273290, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11448721382876703681, + 14847931759131246244, + 7128092965784075415, + 180922588002186450, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12703693405537318683, + 17809616441104653297, + 1356025434738010042, + 678042696111256776, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1581134933636608728, + 8974334562566747609, + 13981094886159927949, + 879338632538017255, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13448202253461902078, + 6113850066861673560, + 8363760165130703945, + 430895863395699323, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11364646780735898548, + 18310352822657651209, + 1715448934469054774, + 373623735103410086, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5160483194403952864, + 5269789810582188597, + 7949343741254368028, + 648244985265401351, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2578613260896705768, + 16973829270463026541, + 1007269524128147481, + 588832280601996335, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18113257874564708980, + 4260053189158561988, + 17013073166096369676, + 79169829782754517, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11433643047469980018, + 1276670802646402384, + 7225445039450827835, + 1320607862737647658, + ]), + Fq::from_montgomery_limbs([ + 9049650314779674715, + 15332775679178116922, + 10916059016321665268, + 1115159218126791192, + ]), + Fq::from_montgomery_limbs([ + 5320499112936763732, + 11250539854586634824, + 12063947087263213252, + 710935487070228339, + ]), + Fq::from_montgomery_limbs([ + 18379608258942880321, + 15727113804916673274, + 10498320535108511002, + 845002076776323646, + ]), + Fq::from_montgomery_limbs([ + 6828593483180812035, + 1682481325156526923, + 14049047336459608184, + 1126148273021080778, + ]), + Fq::from_montgomery_limbs([ + 3872917422679565944, + 1271915972458656550, + 1092693023912110895, + 1298968277402891756, + ]), + Fq::from_montgomery_limbs([ + 7814132502258843917, + 8078742423972593556, + 8536158594561933049, + 191277843487617954, + ]), + Fq::from_montgomery_limbs([ + 5652311561512870887, + 16495461651672765449, + 11098657231551158518, + 493087321946801171, + ]), + Fq::from_montgomery_limbs([ + 6368409936062697439, + 792796763844864197, + 5610460501625398581, + 546867399856191995, + ]), + Fq::from_montgomery_limbs([ + 3038217149528838505, + 8627484827600343283, + 7414393357134479493, + 985381996389905690, + ]), + Fq::from_montgomery_limbs([ + 14953970136252134871, + 295452924685135549, + 11287279099077480718, + 617093465173114131, + ]), + Fq::from_montgomery_limbs([ + 140435627222783551, + 17855535656574994648, + 5022512547318532764, + 473386213985532003, + ]), + Fq::from_montgomery_limbs([ + 7030554896034226352, + 6441059691989760702, + 581099786512472761, + 1269259459863271622, + ]), + Fq::from_montgomery_limbs([ + 6770052323275442396, + 12901743183408121797, + 13004549993560303547, + 969914125748537569, + ]), + Fq::from_montgomery_limbs([ + 11435239377991792553, + 14044046789306606033, + 11369816462011584822, + 1239930404010674345, + ]), + Fq::from_montgomery_limbs([ + 2621636762951244377, + 7758290588105338214, + 14625731574391580682, + 7696703746211481, + ]), + Fq::from_montgomery_limbs([ + 8270493924131469556, + 15946263820341678216, + 6122109191607485742, + 1119062509985100783, + ]), + Fq::from_montgomery_limbs([ + 11252124749266599346, + 8413749501404755931, + 9936257142296575431, + 189818330075783365, + ]), + Fq::from_montgomery_limbs([ + 1537275707366966513, + 2232381660897701103, + 2870196216416932989, + 1271177660936312287, + ]), + Fq::from_montgomery_limbs([ + 1398814984843324301, + 15240858180305901997, + 14386262707998656254, + 1102388553837536368, + ]), + ]), + } +} diff --git a/poseidon377/src/params/rate_5.rs b/poseidon377/src/params/rate_5.rs new file mode 100644 index 0000000..178118f --- /dev/null +++ b/poseidon377/src/params/rate_5.rs @@ -0,0 +1,5315 @@ +use decaf377::Fq; +use poseidon_parameters::v1::{ + Alpha, ArcMatrix, Matrix, MdsMatrix, OptimizedArcMatrix, OptimizedMdsMatrices, + PoseidonParameters, RoundNumbers, SquareMatrix, +}; + +/// Parameters for the rate-5 instance of Poseidon. +pub const fn rate_5() -> PoseidonParameters<6, 5, 36, 25, 39, 6, 234, 31> { + PoseidonParameters { + M: 128, + arc: ArcMatrix::<39, 6, 234>::new_from_known([ + Fq::from_montgomery_limbs([ + 11114527869315019992, + 204777424233041404, + 11091912519069240090, + 121969426625488706, + ]), + Fq::from_montgomery_limbs([ + 11602548353808217299, + 6197238791893869094, + 15622579320964543388, + 1298930792120594487, + ]), + Fq::from_montgomery_limbs([ + 838896996119702820, + 9307552859605174720, + 8035142733069793771, + 274230695041989171, + ]), + Fq::from_montgomery_limbs([ + 3026923182969617970, + 17802669379857452552, + 12317599963821296502, + 1025681681724348483, + ]), + Fq::from_montgomery_limbs([ + 5608950751956253759, + 13524340746668180438, + 15318090696011006995, + 777019565914500344, + ]), + Fq::from_montgomery_limbs([ + 1158035626778037273, + 17664260243497899213, + 16296355254226759288, + 950557495952381678, + ]), + Fq::from_montgomery_limbs([ + 11235491782021601934, + 3148198093287396523, + 17540068057551648414, + 246938399961631601, + ]), + Fq::from_montgomery_limbs([ + 17389082769676787279, + 4715116371725704005, + 680633748837086801, + 1023507596971258305, + ]), + Fq::from_montgomery_limbs([ + 7398967334233665984, + 13695483063991186800, + 18171031240540141567, + 1071188377250033509, + ]), + Fq::from_montgomery_limbs([ + 8901013324099486427, + 14221538804433703579, + 421845258270117661, + 1118364576196477055, + ]), + Fq::from_montgomery_limbs([ + 3792995620986947754, + 8295286409031689804, + 7023787899825757992, + 899023674461718667, + ]), + Fq::from_montgomery_limbs([ + 8793784762096018942, + 15222981485936247095, + 17829285903963587033, + 104381350073974926, + ]), + Fq::from_montgomery_limbs([ + 11268502072074030331, + 4494658873172678747, + 10565307326465463378, + 784696444351308107, + ]), + Fq::from_montgomery_limbs([ + 13330824150800116849, + 4890131204868069348, + 16795432331983276560, + 678123243378284364, + ]), + Fq::from_montgomery_limbs([ + 16154775053781645033, + 5239747136963640569, + 16611876759537507645, + 759623577554638126, + ]), + Fq::from_montgomery_limbs([ + 8392188723943358220, + 16791142993973140668, + 13297749232586734563, + 426701908934618073, + ]), + Fq::from_montgomery_limbs([ + 17606532937509352288, + 2853753027669231277, + 1878611917293492305, + 643977045852461225, + ]), + Fq::from_montgomery_limbs([ + 5784332265294899224, + 10677876800438676900, + 18301919197560353192, + 1242300655560067148, + ]), + Fq::from_montgomery_limbs([ + 11412543805884713089, + 4404535555399600518, + 4605611364617586616, + 706261397170793623, + ]), + Fq::from_montgomery_limbs([ + 2724614443579353257, + 12190950292326203757, + 12944786940879400957, + 90707148364678769, + ]), + Fq::from_montgomery_limbs([ + 16664686769040599810, + 7492639236725157146, + 1787480043672337070, + 1043615315016757716, + ]), + Fq::from_montgomery_limbs([ + 4392261116480034202, + 16508253691140740970, + 1257682754845069496, + 1301148167322522764, + ]), + Fq::from_montgomery_limbs([ + 139213556258184346, + 16303671450556136664, + 10342805884525342231, + 508792166529776861, + ]), + Fq::from_montgomery_limbs([ + 14643711485787161846, + 5395142180975966192, + 12467589421402803020, + 144762579288366866, + ]), + Fq::from_montgomery_limbs([ + 15255437222491521014, + 14721462158275437977, + 2057221655333534074, + 1325734657361576891, + ]), + Fq::from_montgomery_limbs([ + 10286355773254745653, + 8339495471482876116, + 7453999146298511805, + 300469360378533737, + ]), + Fq::from_montgomery_limbs([ + 2229249064542236808, + 3252881241602061127, + 17948673955112458282, + 251981777265729122, + ]), + Fq::from_montgomery_limbs([ + 1422075247142054873, + 8352700063552546507, + 3488191142699771311, + 539185901306414217, + ]), + Fq::from_montgomery_limbs([ + 12740149804027925426, + 5586599109404648568, + 8527372678942371978, + 115816006301850856, + ]), + Fq::from_montgomery_limbs([ + 6406078249694103685, + 13837513268450501788, + 17900428335249812847, + 459347554819743617, + ]), + Fq::from_montgomery_limbs([ + 456851906250247004, + 7370389193990924655, + 1807458787636143704, + 398667578735753852, + ]), + Fq::from_montgomery_limbs([ + 9788417460696232352, + 5540502179845655224, + 11753539559261255021, + 1240756247017913507, + ]), + Fq::from_montgomery_limbs([ + 14537927489871028819, + 8847897852622601733, + 7522585085117894620, + 375913426199509068, + ]), + Fq::from_montgomery_limbs([ + 14308316144026398062, + 8381587303995226137, + 14032256210407832529, + 689401812725544360, + ]), + Fq::from_montgomery_limbs([ + 13627669936560791680, + 15960253582647842471, + 10281350312743054371, + 150904336199250478, + ]), + Fq::from_montgomery_limbs([ + 5265938544355635125, + 14011142295917522514, + 3457190839889849022, + 965417711506858707, + ]), + Fq::from_montgomery_limbs([ + 16926111367909514992, + 15173362371822436547, + 14933443732208301060, + 434526341180358604, + ]), + Fq::from_montgomery_limbs([ + 14967648454927618569, + 3291387031545538855, + 8588581828915048287, + 792649357850563702, + ]), + Fq::from_montgomery_limbs([ + 15353334048989602273, + 17774561716206146119, + 15636104655753091025, + 1121698680267776671, + ]), + Fq::from_montgomery_limbs([ + 7352303644457020849, + 11873784571663633568, + 14627146015402136109, + 1299084319993956489, + ]), + Fq::from_montgomery_limbs([ + 16915421385818843283, + 6574617383150910264, + 11422646729677132251, + 929867690867770500, + ]), + Fq::from_montgomery_limbs([ + 2727877432502627942, + 15580341544991113874, + 3099990664581009583, + 1240423234600344359, + ]), + Fq::from_montgomery_limbs([ + 14109846450233510521, + 14674455181378475527, + 1052605710857317529, + 1170659366228378647, + ]), + Fq::from_montgomery_limbs([ + 1487646680354896463, + 4928492219250082356, + 5905478662916155907, + 544460360269702126, + ]), + Fq::from_montgomery_limbs([ + 6341346323512196011, + 5734973448691058326, + 7525099077854354763, + 538464447227753960, + ]), + Fq::from_montgomery_limbs([ + 2970148736135554232, + 8050550381279637505, + 12092286293721047612, + 120114654914049590, + ]), + Fq::from_montgomery_limbs([ + 17316363606963256567, + 5533183240747888359, + 585663312963257979, + 139248346646491863, + ]), + Fq::from_montgomery_limbs([ + 10174847279006068180, + 2997987744513078474, + 10464913671214968471, + 524965683820736700, + ]), + Fq::from_montgomery_limbs([ + 54341264868687362, + 5421004392946502713, + 747264896093234142, + 211411280351915374, + ]), + Fq::from_montgomery_limbs([ + 5185489921536036071, + 4704724361069451071, + 4676129525140851232, + 1120503850587310053, + ]), + Fq::from_montgomery_limbs([ + 5188148333232019565, + 9844624880738531087, + 11083931443628660795, + 48712959222331590, + ]), + Fq::from_montgomery_limbs([ + 18132794403501755308, + 4996277675320572821, + 8426233139227882210, + 1136120772510480448, + ]), + Fq::from_montgomery_limbs([ + 6688066783162319874, + 16812397130378746446, + 1563788939072390863, + 94078802559039860, + ]), + Fq::from_montgomery_limbs([ + 7277685347797685095, + 16873547601164190596, + 14751852483076367538, + 14675244398420571, + ]), + Fq::from_montgomery_limbs([ + 10079144247912409743, + 8202707283781100239, + 14357029383013329671, + 1339785338742424059, + ]), + Fq::from_montgomery_limbs([ + 9634622379571234742, + 10124148039561860757, + 12959569757638734172, + 595623221777036788, + ]), + Fq::from_montgomery_limbs([ + 12438115909232101952, + 6692144523221973376, + 98330004458373230, + 1289698894538748039, + ]), + Fq::from_montgomery_limbs([ + 12584838405775095951, + 2233721579825914515, + 4679507125597853910, + 1005456515702813230, + ]), + Fq::from_montgomery_limbs([ + 3938302556839502700, + 9759499277811028830, + 3296175630346274937, + 981342338929693494, + ]), + Fq::from_montgomery_limbs([ + 13584588304331907697, + 14901744669564308257, + 10189694356059299380, + 146229118527659864, + ]), + Fq::from_montgomery_limbs([ + 7977203115766932089, + 5348595991272040666, + 7916441407055787565, + 414015970121354410, + ]), + Fq::from_montgomery_limbs([ + 6344869167182666748, + 87274177081813667, + 3736796951764034882, + 288116208326542090, + ]), + Fq::from_montgomery_limbs([ + 6782489206655080598, + 619325409304332178, + 17888946015733998246, + 1225153807687734600, + ]), + Fq::from_montgomery_limbs([ + 2843050123299780857, + 1857078695470833828, + 13790121543731752592, + 415443237864035468, + ]), + Fq::from_montgomery_limbs([ + 8596983925472337433, + 7326755327579826593, + 12756860599564365858, + 584181157037447809, + ]), + Fq::from_montgomery_limbs([ + 6624979411473108702, + 17481608711835432073, + 9326170883700217913, + 284274034447147537, + ]), + Fq::from_montgomery_limbs([ + 13805074074198365820, + 16654885628813400888, + 11514371967468509966, + 343666476001683468, + ]), + Fq::from_montgomery_limbs([ + 13412135478858616067, + 17972587362145489837, + 3471900644097496495, + 1303815283631151979, + ]), + Fq::from_montgomery_limbs([ + 5393982013204945472, + 2134584020773499203, + 673466067189783026, + 383197328076308992, + ]), + Fq::from_montgomery_limbs([ + 12690627402887821729, + 10714862615705492405, + 1068799421694466319, + 1005549471897715563, + ]), + Fq::from_montgomery_limbs([ + 2794121834599689269, + 9403898257934234871, + 15645249730625359588, + 717133247159915483, + ]), + Fq::from_montgomery_limbs([ + 3750258937835721096, + 2056713754904073328, + 13343956241265388204, + 978687562686928642, + ]), + Fq::from_montgomery_limbs([ + 6693505246665395198, + 321305738310940343, + 8242276846147342531, + 437988437080106004, + ]), + Fq::from_montgomery_limbs([ + 13067453044702788796, + 16549020754244348848, + 14781963588087090141, + 661082564029228628, + ]), + Fq::from_montgomery_limbs([ + 17540644026388671794, + 8922891784689421140, + 9379310092907018870, + 765574007581740165, + ]), + Fq::from_montgomery_limbs([ + 17168415590631158212, + 4967864494403905256, + 8557026071391060461, + 1317676192546642661, + ]), + Fq::from_montgomery_limbs([ + 15849602569050873376, + 937817756067670930, + 9256527416398591608, + 860235003543784933, + ]), + Fq::from_montgomery_limbs([ + 7543632918105704930, + 12541439592576801019, + 13144951089707956772, + 41901740621632050, + ]), + Fq::from_montgomery_limbs([ + 6730944509314595369, + 6308132304102632805, + 9824188815073657306, + 947447793188743941, + ]), + Fq::from_montgomery_limbs([ + 8027042707746962490, + 11823228291757902961, + 13058185285098764358, + 336308269362966457, + ]), + Fq::from_montgomery_limbs([ + 17668761980666590381, + 916900473222809342, + 9032902696647999656, + 1206798077709834757, + ]), + Fq::from_montgomery_limbs([ + 2575943430919555647, + 6982422138755698722, + 17906452816315642240, + 1040285465480518609, + ]), + Fq::from_montgomery_limbs([ + 4676245288580428747, + 1286234536026906032, + 15834455733024512963, + 173462824491942276, + ]), + Fq::from_montgomery_limbs([ + 14308731880491479014, + 10228826088867441356, + 15499426016798380851, + 1315964678542897961, + ]), + Fq::from_montgomery_limbs([ + 6124462188383628200, + 13994025204959010105, + 2282493343669790508, + 1065454428927664041, + ]), + Fq::from_montgomery_limbs([ + 988926009518969200, + 15417015929087482085, + 5998393954402084482, + 540400810650613669, + ]), + Fq::from_montgomery_limbs([ + 5764104729040907699, + 2863356645440240472, + 9968438238837920675, + 633210980814249702, + ]), + Fq::from_montgomery_limbs([ + 10763147411954484876, + 4870204607771977448, + 6480512614473978867, + 683494642222622007, + ]), + Fq::from_montgomery_limbs([ + 4440852407455748277, + 8762659822349541955, + 18263541095190090147, + 585043470445066748, + ]), + Fq::from_montgomery_limbs([ + 16911785709988001751, + 3581411532501811046, + 1478440133608885243, + 1164133149174128766, + ]), + Fq::from_montgomery_limbs([ + 1426558755494224529, + 12516949196047728033, + 17132752269246428290, + 356208126695477134, + ]), + Fq::from_montgomery_limbs([ + 14896569372479444141, + 1449669928198367982, + 12457553693255423792, + 902793672204828469, + ]), + Fq::from_montgomery_limbs([ + 3369226999454999348, + 11158810537103910265, + 2808006375302756684, + 719861372102939033, + ]), + Fq::from_montgomery_limbs([ + 3246518112410208054, + 13944200025301723446, + 764003656536121000, + 81035000333546312, + ]), + Fq::from_montgomery_limbs([ + 480604143483617458, + 15146610571181935768, + 10342031106972296681, + 321939937748541484, + ]), + Fq::from_montgomery_limbs([ + 3823315055653922623, + 1544133407778019995, + 8339678284115967093, + 340405582859069416, + ]), + Fq::from_montgomery_limbs([ + 14521487749042353090, + 2741200029829353725, + 15404416537140680175, + 224317571319525964, + ]), + Fq::from_montgomery_limbs([ + 9111107875572394601, + 14812080039988879021, + 11740909323457275498, + 1142849951174245079, + ]), + Fq::from_montgomery_limbs([ + 6315394863492521922, + 15290263181571711160, + 8361458214310627912, + 1120819345406699978, + ]), + Fq::from_montgomery_limbs([ + 7541199882669497715, + 686266139368081655, + 3486408502495110410, + 305571836806477895, + ]), + Fq::from_montgomery_limbs([ + 11194602393992127889, + 4823164490358819269, + 2963098888089596977, + 127467430759375185, + ]), + Fq::from_montgomery_limbs([ + 13401323458715176749, + 7526519102807969052, + 11500838828688844175, + 593796521014294359, + ]), + Fq::from_montgomery_limbs([ + 11177320531756391055, + 4080502600305034702, + 2571892269998531885, + 231632967099830080, + ]), + Fq::from_montgomery_limbs([ + 6149939798770351609, + 18287517033582086432, + 5338242308958263460, + 328048786757923732, + ]), + Fq::from_montgomery_limbs([ + 15458540156643766751, + 1400997897599319292, + 7413209173172832967, + 100478538984542434, + ]), + Fq::from_montgomery_limbs([ + 15303231637131188474, + 12210183127521607378, + 16044977891049973821, + 772905068623323043, + ]), + Fq::from_montgomery_limbs([ + 10785654084122827601, + 2211259386857104245, + 16649012282872525368, + 102071913196144291, + ]), + Fq::from_montgomery_limbs([ + 2881174213450719659, + 12014311740982782554, + 12475890147035428875, + 1060652822280359969, + ]), + Fq::from_montgomery_limbs([ + 5168530618588372608, + 12645871097945809310, + 12679814118712019422, + 757227039744328626, + ]), + Fq::from_montgomery_limbs([ + 16723583453861051889, + 13217434832318564597, + 17167491729232777306, + 750899259017645156, + ]), + Fq::from_montgomery_limbs([ + 11975166328753770827, + 5021170043599009847, + 8130600622535160737, + 1210833522054518385, + ]), + Fq::from_montgomery_limbs([ + 11828331664533985829, + 5744074093878888180, + 13572294236110601484, + 741336438516605705, + ]), + Fq::from_montgomery_limbs([ + 9092803352234031294, + 16991861971006998540, + 12590210254184326397, + 163020812219371078, + ]), + Fq::from_montgomery_limbs([ + 15150825267514654715, + 7582420113892720781, + 11021538006069969553, + 514128026898157287, + ]), + Fq::from_montgomery_limbs([ + 257730274965307694, + 15941247979209339081, + 12550718099618824836, + 926747662553501853, + ]), + Fq::from_montgomery_limbs([ + 16021060490791077863, + 18399937961097236925, + 12479381244109581994, + 958161696800711416, + ]), + Fq::from_montgomery_limbs([ + 5656070927198127166, + 13673864766172609613, + 7854541344260335717, + 433926247460842256, + ]), + Fq::from_montgomery_limbs([ + 3081498096075015625, + 5114063565662711844, + 6016747140135578647, + 200080044486646757, + ]), + Fq::from_montgomery_limbs([ + 8668474263754820542, + 5150418979667712870, + 671591932121595684, + 387641243292135089, + ]), + Fq::from_montgomery_limbs([ + 9867452618101888436, + 9573741750129271560, + 11870983264768155164, + 672361345937806490, + ]), + Fq::from_montgomery_limbs([ + 2794280237383234509, + 8511976920647235700, + 12240900835121281355, + 5009064961478580, + ]), + Fq::from_montgomery_limbs([ + 12481235113884027566, + 5693342786405429686, + 2966752082111199656, + 878902670166036876, + ]), + Fq::from_montgomery_limbs([ + 14240267055971916647, + 10396848562787560462, + 5518035894864045572, + 1179757559875500073, + ]), + Fq::from_montgomery_limbs([ + 14962737666094847614, + 10739908350874416157, + 4895620174233055664, + 321666060863471221, + ]), + Fq::from_montgomery_limbs([ + 13445218619283341504, + 5092610038400904148, + 2968853296034188758, + 835336201072079364, + ]), + Fq::from_montgomery_limbs([ + 10233520240960919680, + 5959452117994239475, + 16491909337703133675, + 891169556062643417, + ]), + Fq::from_montgomery_limbs([ + 2834888386861055650, + 7604409413887743592, + 13030269578665703653, + 401509353262871810, + ]), + Fq::from_montgomery_limbs([ + 2704145273060684739, + 1774123728738332116, + 4451847378072935255, + 539946861082459083, + ]), + Fq::from_montgomery_limbs([ + 10338036189104724495, + 5463305924257293228, + 7871975511799681863, + 487399285329040504, + ]), + Fq::from_montgomery_limbs([ + 10282365810457753854, + 4875136836869467005, + 8167065600132017137, + 612538811597081600, + ]), + Fq::from_montgomery_limbs([ + 11956552275263932784, + 2910596066147194639, + 1653383919024312564, + 917094813414419045, + ]), + Fq::from_montgomery_limbs([ + 7847733681848392968, + 17061053188234229069, + 4327647852405514270, + 201342973946798656, + ]), + Fq::from_montgomery_limbs([ + 12402208752860149978, + 5942639276189211897, + 8650838259976493487, + 93208955821879002, + ]), + Fq::from_montgomery_limbs([ + 4359686047010863164, + 1740657266406964854, + 14400992892832573055, + 600962517221943370, + ]), + Fq::from_montgomery_limbs([ + 7871068409103488505, + 12092947390480615881, + 15236005069504836910, + 1219304791403246439, + ]), + Fq::from_montgomery_limbs([ + 2331767746054493290, + 15439688574017229593, + 2624671321035938496, + 196664992671490503, + ]), + Fq::from_montgomery_limbs([ + 6984766032236094336, + 4199333161186836907, + 6966733218962904660, + 828131141266688191, + ]), + Fq::from_montgomery_limbs([ + 18198492961367884206, + 4075548382228621731, + 7120869279096377960, + 1112174665656009203, + ]), + Fq::from_montgomery_limbs([ + 15188354035011941657, + 1528404887014191153, + 7644022124588184416, + 656794906545005738, + ]), + Fq::from_montgomery_limbs([ + 3703805022276205448, + 11543145569483730813, + 2304402099650902209, + 823592775762696951, + ]), + Fq::from_montgomery_limbs([ + 5142351354334489771, + 10763765166551123043, + 17450746794319983955, + 960731944967042935, + ]), + Fq::from_montgomery_limbs([ + 9913254528380233461, + 6379270468481813387, + 4130926869587487310, + 610795545512520772, + ]), + Fq::from_montgomery_limbs([ + 17898556710819263490, + 7911122569140186326, + 5516730092468208963, + 664379227085230598, + ]), + Fq::from_montgomery_limbs([ + 10616973143833638020, + 17471880607893344822, + 1128145204777244976, + 337394536883295972, + ]), + Fq::from_montgomery_limbs([ + 6661544590953239315, + 15146532782491929291, + 4755596764817736061, + 545820584329603194, + ]), + Fq::from_montgomery_limbs([ + 60806500798869004, + 15736128091162195183, + 5715198746929749021, + 446174552562569645, + ]), + Fq::from_montgomery_limbs([ + 5425873532207787318, + 7464087132630945791, + 5476589627464471901, + 457480423296188143, + ]), + Fq::from_montgomery_limbs([ + 9013993650827414321, + 2350031823838640206, + 11034300868488958302, + 388596567345343643, + ]), + Fq::from_montgomery_limbs([ + 6468567377966650967, + 13590648265578243490, + 15927509019046836214, + 1009388599057851509, + ]), + Fq::from_montgomery_limbs([ + 172016905197246847, + 4035387207966104057, + 211325131413472824, + 1280387199047629664, + ]), + Fq::from_montgomery_limbs([ + 7689408096630419675, + 14584961804097092641, + 1127508416484176885, + 171502318968879609, + ]), + Fq::from_montgomery_limbs([ + 9294855872887423209, + 2005827460175726472, + 16783720225277999740, + 1082009637379471203, + ]), + Fq::from_montgomery_limbs([ + 17016200436476421122, + 12639043105124250806, + 6582000444620236323, + 508699111294885791, + ]), + Fq::from_montgomery_limbs([ + 14725203266650011970, + 13877962155717739891, + 9513649462380557047, + 642461852581041542, + ]), + Fq::from_montgomery_limbs([ + 9787931489031096184, + 7902836596315130785, + 78997879637635390, + 694120778750553576, + ]), + Fq::from_montgomery_limbs([ + 17889392554162858882, + 342322215215622448, + 4493824746279576258, + 312168636607671093, + ]), + Fq::from_montgomery_limbs([ + 8140513347694048696, + 12902641943590609873, + 14714848264461122064, + 1334963605704347157, + ]), + Fq::from_montgomery_limbs([ + 13240131887967600078, + 4407633827305492594, + 15540185952445554130, + 68037993503280515, + ]), + Fq::from_montgomery_limbs([ + 10497793217508245191, + 888682325286928065, + 15370448865727419266, + 733754751125624627, + ]), + Fq::from_montgomery_limbs([ + 7740533852108866287, + 17937493023745474932, + 7773801956856873664, + 504241230363210440, + ]), + Fq::from_montgomery_limbs([ + 11961891551527755983, + 17934542229987203026, + 1103543868067501932, + 687591834971622190, + ]), + Fq::from_montgomery_limbs([ + 4127100989690868033, + 8900195718942322911, + 8226770865992890280, + 985029699319544839, + ]), + Fq::from_montgomery_limbs([ + 8227296419732771358, + 16053490579720323354, + 3654951897271203554, + 1041079676339451632, + ]), + Fq::from_montgomery_limbs([ + 8010548121403948512, + 1275465025143581354, + 2160211023041782235, + 1189169285314754196, + ]), + Fq::from_montgomery_limbs([ + 7530207327455925553, + 5703304996823784226, + 6548643313601850639, + 827356749854490373, + ]), + Fq::from_montgomery_limbs([ + 8316601172635772109, + 12370440707468203196, + 2939769182126754327, + 753180078630191546, + ]), + Fq::from_montgomery_limbs([ + 1143377137813871993, + 17312593164165222318, + 13705553886161524318, + 941885898262021576, + ]), + Fq::from_montgomery_limbs([ + 2112728878057216642, + 3892761102962286658, + 11417348492657537819, + 735668726979811860, + ]), + Fq::from_montgomery_limbs([ + 16782576336846005593, + 3624413749987727914, + 17968976872659530354, + 487897895994872800, + ]), + Fq::from_montgomery_limbs([ + 2484948819702640096, + 5387963240223549977, + 12687920099134049563, + 883350989149367893, + ]), + Fq::from_montgomery_limbs([ + 2858482485641078244, + 2714093515401288033, + 10455809282530923083, + 751664744246651868, + ]), + Fq::from_montgomery_limbs([ + 13617000549064485510, + 4455000600207656914, + 12777124443685982279, + 512862262303044909, + ]), + Fq::from_montgomery_limbs([ + 10570187078077272513, + 15758514759732880612, + 10690894638211880846, + 465609433405901497, + ]), + Fq::from_montgomery_limbs([ + 13236383050663721729, + 12125155130370039041, + 17253356752093433548, + 232625893933277711, + ]), + Fq::from_montgomery_limbs([ + 757191121931270989, + 9786533229648281558, + 7506322761488798421, + 219466670969587686, + ]), + Fq::from_montgomery_limbs([ + 11502539180279016827, + 10976808592365411679, + 14518853469755275814, + 189651093510465237, + ]), + Fq::from_montgomery_limbs([ + 7406145050063996705, + 5433107506103268286, + 4579059832807850831, + 292839512595959393, + ]), + Fq::from_montgomery_limbs([ + 242050570766254477, + 16090627413832777930, + 8503088905690880687, + 844834299854905528, + ]), + Fq::from_montgomery_limbs([ + 15972066311454464627, + 12186767479971029668, + 2392334865506711034, + 617078040284954179, + ]), + Fq::from_montgomery_limbs([ + 6210271142236644282, + 6562036542656589429, + 8025274330376993547, + 762526438011303745, + ]), + Fq::from_montgomery_limbs([ + 14753366313850022795, + 5437791126426953356, + 14245062222537079752, + 150913805242227000, + ]), + Fq::from_montgomery_limbs([ + 4807021976023523388, + 16710746776370779475, + 7473038774703206777, + 172363022129389231, + ]), + Fq::from_montgomery_limbs([ + 7874676450184753436, + 2949898094916075783, + 630009569754295782, + 934898795281709342, + ]), + Fq::from_montgomery_limbs([ + 2596733933911644291, + 18211864913609597189, + 669972403590796856, + 1007790356294249019, + ]), + Fq::from_montgomery_limbs([ + 8847285884406092349, + 15810443671218046899, + 781303087795509610, + 175334333513747495, + ]), + Fq::from_montgomery_limbs([ + 5611124786858759575, + 7741270494085822523, + 1204252626273700461, + 831434023402198326, + ]), + Fq::from_montgomery_limbs([ + 17024841864111709876, + 10953422139928438, + 7108870425049447348, + 867000474059877218, + ]), + Fq::from_montgomery_limbs([ + 17254710881283625253, + 13619503273421245826, + 16524833801283537459, + 867017638279036320, + ]), + Fq::from_montgomery_limbs([ + 3047689304468185211, + 4544400348474807371, + 3340017855267764578, + 1089932391947236624, + ]), + Fq::from_montgomery_limbs([ + 944987404414691783, + 7324130194857674958, + 14960179948619727115, + 970290030783854962, + ]), + Fq::from_montgomery_limbs([ + 8156639230679108247, + 17055081218862987306, + 3045209940380371184, + 1025132464373554760, + ]), + Fq::from_montgomery_limbs([ + 18254963138764984051, + 12469634773213013819, + 6758329371646179128, + 349904494647494862, + ]), + Fq::from_montgomery_limbs([ + 6795371985529952899, + 17895939878048277876, + 16632557265478858928, + 387059669716455908, + ]), + Fq::from_montgomery_limbs([ + 1318357771340990990, + 12994552359569230566, + 16705716531436318589, + 763697275022015004, + ]), + Fq::from_montgomery_limbs([ + 16465052430714272962, + 13602787326604775722, + 15751371050932720313, + 138014004592597966, + ]), + Fq::from_montgomery_limbs([ + 15825638165970940054, + 9332212474670848079, + 7882594046477316711, + 290829412130665018, + ]), + Fq::from_montgomery_limbs([ + 6362195239856311490, + 4780237228875137807, + 14782630189115640960, + 704272740049173340, + ]), + Fq::from_montgomery_limbs([ + 6559278659646672166, + 6801036849757997540, + 8000231443027455180, + 656562251428831486, + ]), + Fq::from_montgomery_limbs([ + 913435484006780831, + 4148347286870754245, + 15429895160407091360, + 481581552746677021, + ]), + Fq::from_montgomery_limbs([ + 3201617625256301842, + 17959683725889804366, + 12477328746136434592, + 804751930331318023, + ]), + Fq::from_montgomery_limbs([ + 8260268643263772682, + 564990144864143113, + 3819503561945572420, + 589166794945624703, + ]), + Fq::from_montgomery_limbs([ + 1468345889510338758, + 12133722777278260983, + 2225753638037198615, + 983608944845547502, + ]), + Fq::from_montgomery_limbs([ + 16667974706419349718, + 12656033986103589392, + 16476477987437165475, + 328446031568129583, + ]), + Fq::from_montgomery_limbs([ + 10832018960089362233, + 15872202042944916671, + 1542413852742137668, + 856769655034004351, + ]), + Fq::from_montgomery_limbs([ + 1248584674224513873, + 10955885710253485131, + 690903013823109733, + 586986955236732406, + ]), + Fq::from_montgomery_limbs([ + 7801056996972321718, + 10731441130229109668, + 1309104763613854723, + 168690751356355485, + ]), + Fq::from_montgomery_limbs([ + 863448993500386948, + 12860067037622976516, + 4075953973254780281, + 1092718826088125370, + ]), + Fq::from_montgomery_limbs([ + 4083664853681447299, + 16294486273605038844, + 13502684468641213280, + 1231917587532627983, + ]), + Fq::from_montgomery_limbs([ + 17640823880561253607, + 17906844028095875120, + 16598825086926066591, + 1259468978780670799, + ]), + Fq::from_montgomery_limbs([ + 3915912471832963150, + 2878160052333009121, + 5137491367309860490, + 525959498882725072, + ]), + Fq::from_montgomery_limbs([ + 624108744920628033, + 7222337173749652537, + 6177234009439253836, + 1305879330650409183, + ]), + Fq::from_montgomery_limbs([ + 4047186108818890838, + 8293278676301284463, + 45421248765572143, + 11849077013826147, + ]), + Fq::from_montgomery_limbs([ + 13734838437817111564, + 14067107962177066014, + 6283538344938866018, + 943068615468766850, + ]), + Fq::from_montgomery_limbs([ + 9459753653362225504, + 13412221550119657532, + 11719554885145159458, + 1038210702444171410, + ]), + Fq::from_montgomery_limbs([ + 17258590752825572441, + 4422385439615665045, + 10963985232294213328, + 673097344483052623, + ]), + Fq::from_montgomery_limbs([ + 4350910935437581306, + 17071656780821887075, + 17526744607642225290, + 489524084357985818, + ]), + Fq::from_montgomery_limbs([ + 8703107470067448452, + 734592437454660319, + 6370216058631913860, + 984849913832896286, + ]), + Fq::from_montgomery_limbs([ + 15847437253128917127, + 13204151715277535095, + 13151742340803361913, + 492775982398767260, + ]), + Fq::from_montgomery_limbs([ + 13378140148769271177, + 11023068523390522139, + 1729259508144916727, + 998491139322015796, + ]), + Fq::from_montgomery_limbs([ + 15868115462640964898, + 5808184910810487816, + 17891106563868657547, + 1273423536878729280, + ]), + Fq::from_montgomery_limbs([ + 17498572932499506726, + 4915375148198704347, + 16526318329827242193, + 172885368041045335, + ]), + Fq::from_montgomery_limbs([ + 12175858961476635194, + 8395097384299796850, + 16561947957716644135, + 118811035529307344, + ]), + Fq::from_montgomery_limbs([ + 1364632949773972783, + 5616500288305274826, + 2744828291285230257, + 1337220218752536168, + ]), + Fq::from_montgomery_limbs([ + 7125704632582034340, + 2413935880315792634, + 16253134495760827214, + 1013353907442898755, + ]), + Fq::from_montgomery_limbs([ + 9926413936648370716, + 9286244748248440505, + 5620697470790885637, + 1050126432920929832, + ]), + Fq::from_montgomery_limbs([ + 2286190222160729638, + 1205027650655862007, + 284571302335235840, + 754838472987631454, + ]), + Fq::from_montgomery_limbs([ + 18032942241472576701, + 12877723516371231014, + 5304401947346162660, + 638292803799023432, + ]), + Fq::from_montgomery_limbs([ + 1301734909908791963, + 3999021096443686109, + 8224194566860360743, + 975889756225576945, + ]), + Fq::from_montgomery_limbs([ + 13137758236377688944, + 15164889622744579310, + 9510882901247182860, + 507443416341514201, + ]), + Fq::from_montgomery_limbs([ + 7442629497476523514, + 15402336932582436695, + 12267702252685663951, + 406181490859224216, + ]), + Fq::from_montgomery_limbs([ + 3020913173034234370, + 7615906519537783167, + 14373843007930618441, + 268952515824125262, + ]), + Fq::from_montgomery_limbs([ + 8510711668693637739, + 16478737597936355688, + 4962621450185609628, + 274948738817040348, + ]), + Fq::from_montgomery_limbs([ + 175794307933344111, + 2355200265651483892, + 17868773626579092521, + 52492857067069690, + ]), + Fq::from_montgomery_limbs([ + 13918504549178190575, + 13563258972352289042, + 5310731325887509548, + 465559440844068311, + ]), + ]), + mds: MdsMatrix::<6, 5, 36, 25>::new_from_known([ + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + ]), + alpha: Alpha::Exponent(17), + rounds: RoundNumbers { r_P: 31, r_F: 8 }, + optimized_mds: OptimizedMdsMatrices { + M_hat: SquareMatrix::<5, 25>::new_from_known([ + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + ]), + v: Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + ]), + w: Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + ]), + M_prime: SquareMatrix::<6, 36>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + ]), + M_doubleprime: SquareMatrix::<6, 36>::new_from_known([ + Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 15152119682022281684, + 2079168917784381610, + 8548836536267236340, + 524962922610130041, + ]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16770218796354446865, + 6164915921600418774, + 18434642018604219177, + 984431242893424161, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12257484635811173124, + 3332345693021229804, + 9856107590709416500, + 1159223252431020322, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9979132349322887614, + 3961848182433907151, + 8799570660063224410, + 475862931364908156, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3872788615927669352, + 15152509537124089722, + 5205890896288656861, + 1231307161030894178, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + ]), + M_inverse: SquareMatrix::<6, 36>::new_from_known([ + Fq::from_montgomery_limbs([ + 9423078532813425529, + 2444734831186772378, + 13312700987643289865, + 1248785285043953466, + ]), + Fq::from_montgomery_limbs([ + 17268489821349265988, + 4381498102126941915, + 18059594369778317098, + 58369093700071757, + ]), + Fq::from_montgomery_limbs([ + 4554828072642644132, + 1444610657142044086, + 17449887890871798968, + 1155580816162940184, + ]), + Fq::from_montgomery_limbs([ + 14700875084405105752, + 9239241115023183874, + 7789802599827561984, + 594039389414401309, + ]), + Fq::from_montgomery_limbs([ + 17369961549732213951, + 17978420689641993214, + 5737613384797227392, + 899750828627372416, + ]), + Fq::from_montgomery_limbs([ + 11810971497921864966, + 13993073307646756902, + 8362406159543098387, + 1156913604397747244, + ]), + Fq::from_montgomery_limbs([ + 17268489821349265988, + 4381498102126941915, + 18059594369778317098, + 58369093700071757, + ]), + Fq::from_montgomery_limbs([ + 11035226460624215086, + 14239859242862966780, + 1132467188784037199, + 834550800812545516, + ]), + Fq::from_montgomery_limbs([ + 16880054357686407084, + 4825991163227954043, + 6215044494445833070, + 1088315875473995942, + ]), + Fq::from_montgomery_limbs([ + 18168083839917324524, + 16478236068428869610, + 13105126087642640896, + 34766978023081808, + ]), + Fq::from_montgomery_limbs([ + 17825669542785881313, + 12421462367159336603, + 2878814310510077253, + 503620314193006332, + ]), + Fq::from_montgomery_limbs([ + 8217239731080607569, + 6429369295863013371, + 9835418190294938624, + 157201591859370779, + ]), + Fq::from_montgomery_limbs([ + 4554828072642644132, + 1444610657142044086, + 17449887890871798968, + 1155580816162940184, + ]), + Fq::from_montgomery_limbs([ + 16880054357686407084, + 4825991163227954043, + 6215044494445833070, + 1088315875473995942, + ]), + Fq::from_montgomery_limbs([ + 11485023460188927874, + 2485551665474920570, + 6640923664201453737, + 128700539913813365, + ]), + Fq::from_montgomery_limbs([ + 8823818330539404675, + 14326485851202631671, + 17961953298539513959, + 284442003114632699, + ]), + Fq::from_montgomery_limbs([ + 9085308543112959065, + 2317720835922103388, + 3188272186429413269, + 623518145967541728, + ]), + Fq::from_montgomery_limbs([ + 1228919753536764212, + 8001001063597501895, + 1883429940342590902, + 229754754018256412, + ]), + Fq::from_montgomery_limbs([ + 14700875084405105752, + 9239241115023183874, + 7789802599827561984, + 594039389414401309, + ]), + Fq::from_montgomery_limbs([ + 18168083839917324524, + 16478236068428869610, + 13105126087642640896, + 34766978023081808, + ]), + Fq::from_montgomery_limbs([ + 8823818330539404675, + 14326485851202631671, + 17961953298539513959, + 284442003114632699, + ]), + Fq::from_montgomery_limbs([ + 9493025027446580308, + 5326008844078412686, + 17968627192349153669, + 636747921187750929, + ]), + Fq::from_montgomery_limbs([ + 4719209488067015380, + 3286149619947952216, + 5381059733444658429, + 751991172029274729, + ]), + Fq::from_montgomery_limbs([ + 671599285952310028, + 4063985053036137885, + 9646938041918321080, + 299288710064420029, + ]), + Fq::from_montgomery_limbs([ + 17369961549732213951, + 17978420689641993214, + 5737613384797227392, + 899750828627372416, + ]), + Fq::from_montgomery_limbs([ + 17825669542785881313, + 12421462367159336603, + 2878814310510077253, + 503620314193006332, + ]), + Fq::from_montgomery_limbs([ + 9085308543112959065, + 2317720835922103388, + 3188272186429413269, + 623518145967541728, + ]), + Fq::from_montgomery_limbs([ + 4719209488067015380, + 3286149619947952216, + 5381059733444658429, + 751991172029274729, + ]), + Fq::from_montgomery_limbs([ + 6563574222345881967, + 1281874181852671859, + 11466642440831414650, + 443077589787383810, + ]), + Fq::from_montgomery_limbs([ + 2252784982698758221, + 17647697801612484629, + 3564381744461717162, + 1112500262860291153, + ]), + Fq::from_montgomery_limbs([ + 11810971497921864966, + 13993073307646756902, + 8362406159543098387, + 1156913604397747244, + ]), + Fq::from_montgomery_limbs([ + 8217239731080607569, + 6429369295863013371, + 9835418190294938624, + 157201591859370779, + ]), + Fq::from_montgomery_limbs([ + 1228919753536764212, + 8001001063597501895, + 1883429940342590902, + 229754754018256412, + ]), + Fq::from_montgomery_limbs([ + 671599285952310028, + 4063985053036137885, + 9646938041918321080, + 299288710064420029, + ]), + Fq::from_montgomery_limbs([ + 2252784982698758221, + 17647697801612484629, + 3564381744461717162, + 1112500262860291153, + ]), + Fq::from_montgomery_limbs([ + 14444310640393871747, + 7159616422470945171, + 4259499542152695501, + 338890106485999353, + ]), + ]), + M_hat_inverse: SquareMatrix::<5, 25>::new_from_known([ + Fq::from_montgomery_limbs([ + 13904863849479527760, + 2515041799497956331, + 1093602514364610087, + 950491498045111042, + ]), + Fq::from_montgomery_limbs([ + 2579295949243395069, + 12030978017499995826, + 12080587065043491505, + 38868424124071283, + ]), + Fq::from_montgomery_limbs([ + 15092547513410891885, + 17256115361070971171, + 15459413513070879524, + 321960420545902323, + ]), + Fq::from_montgomery_limbs([ + 2229704028309941057, + 12072197468400244658, + 10950994247046669419, + 1297185510317020994, + ]), + Fq::from_montgomery_limbs([ + 12038262541350864619, + 6432253836569655322, + 13293017510951151922, + 464458410353108600, + ]), + Fq::from_montgomery_limbs([ + 2579295949243395069, + 12030978017499995826, + 12080587065043491505, + 38868424124071283, + ]), + Fq::from_montgomery_limbs([ + 10576000036529335161, + 13879266532014962184, + 16888595672184660747, + 1185164108096765058, + ]), + Fq::from_montgomery_limbs([ + 1279444508565403937, + 6039704410083424768, + 14409182292770989236, + 1032663778275682773, + ]), + Fq::from_montgomery_limbs([ + 10494653767401929635, + 7151674624434035414, + 113618062021286492, + 734991999940840872, + ]), + Fq::from_montgomery_limbs([ + 3733906304148166273, + 17683287484600659811, + 14933709177852827861, + 1249090649945868590, + ]), + Fq::from_montgomery_limbs([ + 15092547513410891885, + 17256115361070971171, + 15459413513070879524, + 321960420545902323, + ]), + Fq::from_montgomery_limbs([ + 1279444508565403937, + 6039704410083424768, + 14409182292770989236, + 1032663778275682773, + ]), + Fq::from_montgomery_limbs([ + 17854942931053508049, + 12379835822212862963, + 7917418649695695574, + 818127752736513102, + ]), + Fq::from_montgomery_limbs([ + 16713139695953442230, + 14827246597006708747, + 6565710292947236351, + 279636205695659750, + ]), + Fq::from_montgomery_limbs([ + 6021453437997963755, + 2434637845477546326, + 15808901861436069769, + 656837851837718215, + ]), + Fq::from_montgomery_limbs([ + 2229704028309941057, + 12072197468400244658, + 10950994247046669419, + 1297185510317020994, + ]), + Fq::from_montgomery_limbs([ + 10494653767401929635, + 7151674624434035414, + 113618062021286492, + 734991999940840872, + ]), + Fq::from_montgomery_limbs([ + 16713139695953442230, + 14827246597006708747, + 6565710292947236351, + 279636205695659750, + ]), + Fq::from_montgomery_limbs([ + 1817061708622591813, + 7842241796668241324, + 11705700881511613623, + 124703629193508345, + ]), + Fq::from_montgomery_limbs([ + 7645141843637222694, + 11261613033476609866, + 684978708883533390, + 1180658499202360863, + ]), + Fq::from_montgomery_limbs([ + 12038262541350864619, + 6432253836569655322, + 13293017510951151922, + 464458410353108600, + ]), + Fq::from_montgomery_limbs([ + 3733906304148166273, + 17683287484600659811, + 14933709177852827861, + 1249090649945868590, + ]), + Fq::from_montgomery_limbs([ + 6021453437997963755, + 2434637845477546326, + 15808901861436069769, + 656837851837718215, + ]), + Fq::from_montgomery_limbs([ + 7645141843637222694, + 11261613033476609866, + 684978708883533390, + 1180658499202360863, + ]), + Fq::from_montgomery_limbs([ + 6471109714169199028, + 651257754441033744, + 967849492968733845, + 881634047292451586, + ]), + ]), + M_00: Fq::from_montgomery_limbs([ + 17237574486256691881, + 7678231653376502440, + 12981859904545217192, + 832323394471302938, + ]), + M_i: Matrix::<6, 6, 36>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 525395534966640354, + 4649108525155679700, + 5611566907608735139, + 1157162242601075454, + ]), + Fq::from_montgomery_limbs([ + 4270514995051619857, + 9080682450539254193, + 11764444330152623833, + 1296452142209921646, + ]), + Fq::from_montgomery_limbs([ + 13085423902825236141, + 4106908764311471538, + 2111632228314415714, + 345239388869093745, + ]), + Fq::from_montgomery_limbs([ + 4739016182142013260, + 12433567496673952941, + 16956579312525014509, + 596646251662680532, + ]), + Fq::from_montgomery_limbs([ + 15744576121486695479, + 10597769634158624533, + 14136093497735719287, + 512698864094506675, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4270514995051619857, + 9080682450539254193, + 11764444330152623833, + 1296452142209921646, + ]), + Fq::from_montgomery_limbs([ + 14428417055342911695, + 8272271618979314579, + 5027159236098050530, + 724167566789085063, + ]), + Fq::from_montgomery_limbs([ + 3709734358196874918, + 11929487831132379323, + 16830563350788980501, + 398518023243913541, + ]), + Fq::from_montgomery_limbs([ + 899835313390383283, + 10922138075185035991, + 10399061813978257330, + 1225969452739805970, + ]), + Fq::from_montgomery_limbs([ + 6368857132124103246, + 3738999983005063047, + 6786228693787372954, + 743414762217018339, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13085423902825236141, + 4106908764311471538, + 2111632228314415714, + 345239388869093745, + ]), + Fq::from_montgomery_limbs([ + 3709734358196874918, + 11929487831132379323, + 16830563350788980501, + 398518023243913541, + ]), + Fq::from_montgomery_limbs([ + 9860604545813959634, + 6023137071889763432, + 18357541439838773826, + 267782511194587624, + ]), + Fq::from_montgomery_limbs([ + 5425553862160636710, + 10155674884481011840, + 8882505056945541629, + 629430891711291823, + ]), + Fq::from_montgomery_limbs([ + 5693655221984583188, + 5078045342146247458, + 8593703977821442979, + 40108457599127726, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4739016182142013260, + 12433567496673952941, + 16956579312525014509, + 596646251662680532, + ]), + Fq::from_montgomery_limbs([ + 899835313390383283, + 10922138075185035991, + 10399061813978257330, + 1225969452739805970, + ]), + Fq::from_montgomery_limbs([ + 5425553862160636710, + 10155674884481011840, + 8882505056945541629, + 629430891711291823, + ]), + Fq::from_montgomery_limbs([ + 1974709593969888668, + 3838580677334353595, + 4105349786837999128, + 16966368926604082, + ]), + Fq::from_montgomery_limbs([ + 16299857180872679507, + 9990704222165585528, + 17839066130443287287, + 1300929190020977365, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15744576121486695479, + 10597769634158624533, + 14136093497735719287, + 512698864094506675, + ]), + Fq::from_montgomery_limbs([ + 6368857132124103246, + 3738999983005063047, + 6786228693787372954, + 743414762217018339, + ]), + Fq::from_montgomery_limbs([ + 5693655221984583188, + 5078045342146247458, + 8593703977821442979, + 40108457599127726, + ]), + Fq::from_montgomery_limbs([ + 16299857180872679507, + 9990704222165585528, + 17839066130443287287, + 1300929190020977365, + ]), + Fq::from_montgomery_limbs([ + 14268832143359565128, + 14009303067203234749, + 1311318265344615584, + 224271541899878138, + ]), + ]), + v_collection: [ + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 15846042622821125949, + 5578170090212244723, + 14386484975980635087, + 1162081450610719662, + ]), + Fq::from_montgomery_limbs([ + 9425713365442649542, + 17724400577059603932, + 10835235343511845981, + 1179696731387397906, + ]), + Fq::from_montgomery_limbs([ + 15470398571621834328, + 8748455436620348445, + 11923882037413103894, + 147851229490754041, + ]), + Fq::from_montgomery_limbs([ + 3205030528550848740, + 11233883805951482885, + 4631904539047675327, + 85240573307222008, + ]), + Fq::from_montgomery_limbs([ + 4306955861584430579, + 2866573513612242948, + 5009794262667624955, + 295301720036234004, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 7251188616661835801, + 8810908530742177026, + 5438752491170217053, + 624809552915168399, + ]), + Fq::from_montgomery_limbs([ + 8041373032028091555, + 15486500451885216694, + 2640515848525906572, + 1101280997644118799, + ]), + Fq::from_montgomery_limbs([ + 1028894706146998760, + 13234395603487812099, + 310927904286248029, + 1284009513603315703, + ]), + Fq::from_montgomery_limbs([ + 15907405187752122338, + 7460014754810790101, + 3112115084952575259, + 1176166567473148345, + ]), + Fq::from_montgomery_limbs([ + 6667915961879815626, + 11892868641826580977, + 17153671363694122316, + 1080025318281387536, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 5168631598983031118, + 1709031240629846937, + 12176717122174422876, + 1133547231698905845, + ]), + Fq::from_montgomery_limbs([ + 6505284181050366169, + 6621303409684149204, + 14721846886395529985, + 756463071795143691, + ]), + Fq::from_montgomery_limbs([ + 10252599865552606113, + 8719458131520431579, + 4094128546015477610, + 154229004185959046, + ]), + Fq::from_montgomery_limbs([ + 5962216050578461567, + 1852471921743211935, + 14625008624739847061, + 402573870144144998, + ]), + Fq::from_montgomery_limbs([ + 2504232889257023710, + 6382931252528192024, + 946087668070181732, + 39444081019304469, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 8935875040282017923, + 9359087371918622751, + 4377160640113921337, + 438001764693096006, + ]), + Fq::from_montgomery_limbs([ + 5964768355342862060, + 12844248228508214834, + 217390320027003427, + 519739213235621144, + ]), + Fq::from_montgomery_limbs([ + 13476869152223212245, + 14360104411032897136, + 16239873007321200914, + 3853403215029221, + ]), + Fq::from_montgomery_limbs([ + 14270258435530476850, + 16224741710497622821, + 15034723833298150364, + 1105854585395665472, + ]), + Fq::from_montgomery_limbs([ + 3034628514738856022, + 14677362698363483188, + 10612467457981582049, + 621317746892157952, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 12356435149313176789, + 14997081370594107955, + 2318538420922195008, + 27051273329381197, + ]), + Fq::from_montgomery_limbs([ + 14179669150985422172, + 1587784931571575237, + 15544226047094276906, + 265503486564006544, + ]), + Fq::from_montgomery_limbs([ + 15848703335457516734, + 12988350955449684774, + 10747751923255963574, + 192884410298894891, + ]), + Fq::from_montgomery_limbs([ + 13283753749608228542, + 15731192032524989112, + 10134977648663526427, + 1011453356572734072, + ]), + Fq::from_montgomery_limbs([ + 8372393423324448788, + 2642634076467295974, + 2238857053734841195, + 713995311234362151, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 6650896784315049976, + 8618299026172959087, + 4613782712309215097, + 1194575414958458214, + ]), + Fq::from_montgomery_limbs([ + 8401059625843059611, + 9360504521211886317, + 9752588986385800578, + 35467022242567223, + ]), + Fq::from_montgomery_limbs([ + 14549311442558804272, + 14851474988790195550, + 17243272363514665510, + 556891460284998050, + ]), + Fq::from_montgomery_limbs([ + 8839260009215695166, + 5332337195891362342, + 10215113273837828390, + 53276328504747705, + ]), + Fq::from_montgomery_limbs([ + 4743214023748331668, + 16150812970442549102, + 3607008032772749996, + 71636842460588166, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 7745993606763106157, + 400962028791523193, + 14448679365436054364, + 127361796442057001, + ]), + Fq::from_montgomery_limbs([ + 4881557665307853374, + 16503843953516371036, + 2631138906021440407, + 1145135568670602972, + ]), + Fq::from_montgomery_limbs([ + 3748730199472583624, + 1701168955512052480, + 1204298795241125154, + 919171892692993894, + ]), + Fq::from_montgomery_limbs([ + 16293341788272558865, + 17325870627390234246, + 16387125646971798797, + 1009137174300676172, + ]), + Fq::from_montgomery_limbs([ + 2499133372428019558, + 15739123510404573354, + 10677356306660504584, + 958976143899963938, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 14252792066102246657, + 15864171804698265189, + 11911247415967054910, + 961487415285183784, + ]), + Fq::from_montgomery_limbs([ + 9957038734178160162, + 250039500043978770, + 375263104710602935, + 35544998893003180, + ]), + Fq::from_montgomery_limbs([ + 831877114936420076, + 2002790044227393828, + 11129740988708533905, + 746550053534881799, + ]), + Fq::from_montgomery_limbs([ + 4734226494958051881, + 18003010652169239318, + 16569731595317548852, + 109984045623665701, + ]), + Fq::from_montgomery_limbs([ + 10630025490758573206, + 12380598183142825838, + 1493124485160554052, + 492990263362994025, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 9005167414234319760, + 16535434979210366835, + 5819620234707341946, + 602158252276980823, + ]), + Fq::from_montgomery_limbs([ + 9119416898454972043, + 8049431789793640151, + 13607373929564011639, + 761938773322253558, + ]), + Fq::from_montgomery_limbs([ + 11646529739221266743, + 15631506041020749904, + 7526925524884509569, + 797718489067789891, + ]), + Fq::from_montgomery_limbs([ + 14242496370333104920, + 8841581893310155090, + 1684451748824201839, + 293704403017488420, + ]), + Fq::from_montgomery_limbs([ + 12068414265588270249, + 7748413288237551533, + 18041956849707733339, + 1127727052880210045, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 16896144613183838177, + 12574347096617734902, + 8321293894060275613, + 1181815496381441993, + ]), + Fq::from_montgomery_limbs([ + 11490675786236053006, + 9698599818026366787, + 5948732065795477184, + 425414085344036431, + ]), + Fq::from_montgomery_limbs([ + 13535638352040032845, + 11010719926202516879, + 10750188616385991719, + 450767332534563092, + ]), + Fq::from_montgomery_limbs([ + 3178227411283526947, + 463456667345831080, + 14382176159228633426, + 829036438269219798, + ]), + Fq::from_montgomery_limbs([ + 15205960183032177355, + 12047942859395994973, + 5508647109209154207, + 409271998288939244, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 5842441710461865655, + 14354544144458273887, + 16159087842820577493, + 1102018593492537867, + ]), + Fq::from_montgomery_limbs([ + 10259604216221740521, + 2737735964532783652, + 1934594841398453131, + 915029026536998488, + ]), + Fq::from_montgomery_limbs([ + 5389086520584317977, + 2729523047482171967, + 12492070423980987131, + 339278797072716184, + ]), + Fq::from_montgomery_limbs([ + 11961359983369405646, + 8872285219479794351, + 11590963834161858363, + 847871031745582321, + ]), + Fq::from_montgomery_limbs([ + 15708428924964800383, + 9689329403735339585, + 876235638671718277, + 1293191834696859659, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 10926323662882715805, + 6357617649943251603, + 3882295273855196975, + 302265041875854273, + ]), + Fq::from_montgomery_limbs([ + 11884492353389440282, + 10865891220420186719, + 1506391581950765997, + 1273730401079532625, + ]), + Fq::from_montgomery_limbs([ + 6062018478948078733, + 2238300480159412589, + 4475922925472998435, + 427700151782713553, + ]), + Fq::from_montgomery_limbs([ + 14998626184060509521, + 8084520935552429366, + 16157620168154649636, + 936139145933018848, + ]), + Fq::from_montgomery_limbs([ + 5424440642649697210, + 11030005216981850100, + 3736937858414725236, + 353926131228082038, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 6991010538111487096, + 3208699080691172022, + 15674148293257243198, + 528616403431683993, + ]), + Fq::from_montgomery_limbs([ + 5895680427204256637, + 15308092775755115835, + 5725537177674079322, + 624044939296156178, + ]), + Fq::from_montgomery_limbs([ + 15682781481863573356, + 12524037328552645708, + 13137829315048512550, + 453866324724543378, + ]), + Fq::from_montgomery_limbs([ + 5999454803832491786, + 11757829240759186672, + 16786792833686808980, + 1008783050525293123, + ]), + Fq::from_montgomery_limbs([ + 4965854579231858650, + 4470286827276633884, + 18255756957602409470, + 1257925856629374202, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 6756792567489648436, + 9174065877200954316, + 14588982300344994878, + 495558322589948188, + ]), + Fq::from_montgomery_limbs([ + 16407708660026263913, + 17259087838077364390, + 13625416430514248811, + 207969270690764399, + ]), + Fq::from_montgomery_limbs([ + 11870501170821012713, + 18047340589874750756, + 93512878936056238, + 478288405689674144, + ]), + Fq::from_montgomery_limbs([ + 873793291822892867, + 17836937206243952238, + 5128543094009831337, + 132104142075103351, + ]), + Fq::from_montgomery_limbs([ + 930043501771119768, + 15613823438280495150, + 6464828430156696004, + 359908580296612711, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 18438521383060368690, + 14476395006954860191, + 3425945854098388541, + 944003065485357481, + ]), + Fq::from_montgomery_limbs([ + 3311768994809575814, + 10503690422660653146, + 10526674813249312919, + 864802385440313737, + ]), + Fq::from_montgomery_limbs([ + 8810438360452481727, + 12680118392135545157, + 13641246557527810849, + 1252645481585559515, + ]), + Fq::from_montgomery_limbs([ + 14299022666252422420, + 14841944407301251201, + 15136912555606442873, + 856379827147710042, + ]), + Fq::from_montgomery_limbs([ + 2062956481566651544, + 12093197892291904316, + 11631702561466346010, + 144441024184915083, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 7993143086113878189, + 3624434478267440806, + 13278019726447600986, + 654136378501676754, + ]), + Fq::from_montgomery_limbs([ + 7992479798903963387, + 7895372341947686019, + 4334209577850630153, + 1180883581857163505, + ]), + Fq::from_montgomery_limbs([ + 3027910113375733204, + 4485846847893599917, + 15294205594975595333, + 100423190749786506, + ]), + Fq::from_montgomery_limbs([ + 4120333963287836783, + 11671291525241561103, + 9901986613770683621, + 651573815597675240, + ]), + Fq::from_montgomery_limbs([ + 11428233072419105889, + 2944089198827741952, + 5214300364587140869, + 1189260788971714219, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 4551784723657471230, + 11207660824801473415, + 13918603200560666189, + 909618049825337324, + ]), + Fq::from_montgomery_limbs([ + 2675501742361862254, + 5250455330270200426, + 12586684907650118989, + 1330284139416672144, + ]), + Fq::from_montgomery_limbs([ + 12040165191610290428, + 16503275216221829144, + 5260280485839874467, + 1227840433161545716, + ]), + Fq::from_montgomery_limbs([ + 7679795588389348013, + 15191087003013740641, + 15555116922073130768, + 344262909715092301, + ]), + Fq::from_montgomery_limbs([ + 6169211658344078831, + 531166906056818046, + 1322277761354587680, + 210108348638141620, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 2248963634255452368, + 15563761402233708045, + 3393738612726595863, + 270037018221350140, + ]), + Fq::from_montgomery_limbs([ + 11601309892240246141, + 3638465656527027416, + 1395756619190043331, + 138813074475309167, + ]), + Fq::from_montgomery_limbs([ + 5291125713635089368, + 14819398438069773983, + 13114950161797142217, + 25590678184791818, + ]), + Fq::from_montgomery_limbs([ + 5534877013314393609, + 1759072288627502628, + 16181954987325767733, + 134682133959402637, + ]), + Fq::from_montgomery_limbs([ + 4161482061465148858, + 16683675972158421075, + 3099920947049254669, + 957124783703318342, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 4510595409768553239, + 4974517727576987266, + 15978837518179150731, + 335342136683204977, + ]), + Fq::from_montgomery_limbs([ + 6636059739397131000, + 9640261418262971507, + 18005427333200225259, + 755356145676404050, + ]), + Fq::from_montgomery_limbs([ + 15131021729179035121, + 3322699383837917438, + 16694361960801514505, + 921109580640113983, + ]), + Fq::from_montgomery_limbs([ + 7634123202466598220, + 810298720516221902, + 840599007384281843, + 656905365051140366, + ]), + Fq::from_montgomery_limbs([ + 11303104649441347181, + 12152859936809161042, + 8157805368560172079, + 226879006121087093, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 4222768071479979923, + 6221868890067618237, + 6706788302094795072, + 470857396285528184, + ]), + Fq::from_montgomery_limbs([ + 837480829798517493, + 2139750872442256742, + 5213024737969853757, + 586284678362031355, + ]), + Fq::from_montgomery_limbs([ + 18413923626929455705, + 12351565965899756217, + 17706788027426014962, + 396824563157594134, + ]), + Fq::from_montgomery_limbs([ + 11865172518676463006, + 15009302994533156097, + 16026973397263722566, + 1243693536982901909, + ]), + Fq::from_montgomery_limbs([ + 7252462303444002809, + 9549080656602382200, + 6400682688095758738, + 206059245034621582, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 8375555895564253468, + 7925422648691473256, + 16821885625729885556, + 985921094928817309, + ]), + Fq::from_montgomery_limbs([ + 2046299323863281369, + 13882781361146929705, + 15448488877161513887, + 490830679341871217, + ]), + Fq::from_montgomery_limbs([ + 7429671875567937801, + 10229990955659579326, + 17998819479213658262, + 468703275856634003, + ]), + Fq::from_montgomery_limbs([ + 935091299463462187, + 8817490257427535584, + 4201099561438792936, + 308509415209580254, + ]), + Fq::from_montgomery_limbs([ + 15175273292104113428, + 15547411926550064745, + 18326735472470278187, + 46288025765161350, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 2376775726955536549, + 7198072882321834778, + 5820986721223000167, + 1305597767879405697, + ]), + Fq::from_montgomery_limbs([ + 11562318758115257029, + 422264710018175990, + 4674708296176782956, + 321605471576378125, + ]), + Fq::from_montgomery_limbs([ + 14422446717346283559, + 4522943560525804925, + 12524200552641302343, + 992174839589322314, + ]), + Fq::from_montgomery_limbs([ + 2660063348396745477, + 3046452749899310106, + 12556614243413712855, + 292167348848223777, + ]), + Fq::from_montgomery_limbs([ + 6669133378666467376, + 16135058416591179983, + 5627772722389914612, + 379140231019033687, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 5810827329069058342, + 9466338503926448033, + 13219994636736965707, + 1133919653888422832, + ]), + Fq::from_montgomery_limbs([ + 11390689618371396272, + 9685029449622007826, + 13242820419679967997, + 1063349475949275121, + ]), + Fq::from_montgomery_limbs([ + 17763514783930037833, + 4809121417820211582, + 2875494172038972593, + 296043141357624455, + ]), + Fq::from_montgomery_limbs([ + 11611692421411999894, + 15220040608516358932, + 282037844166434278, + 281687965959955676, + ]), + Fq::from_montgomery_limbs([ + 4438433961554370400, + 12877811549841781756, + 15741991214229698793, + 280844842261162310, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 17169851287016280826, + 10822471821114911500, + 1491721488328495957, + 216887165418048275, + ]), + Fq::from_montgomery_limbs([ + 10994016828848236257, + 13445735015422423625, + 5018165562796963731, + 602535974428869013, + ]), + Fq::from_montgomery_limbs([ + 15126102334199024880, + 12867057351876414370, + 11159159194149946143, + 115881007342718723, + ]), + Fq::from_montgomery_limbs([ + 2794226167942571109, + 1548538606305510804, + 18291849409425428450, + 1340198361306759329, + ]), + Fq::from_montgomery_limbs([ + 4267162633414624824, + 10477712998553375282, + 6267269603855607198, + 982787929756500753, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 17381305832731585223, + 9268492096935184370, + 5234949576450927455, + 21981840360160805, + ]), + Fq::from_montgomery_limbs([ + 4087927870940191769, + 13753414599816622073, + 13058329164603291227, + 834131236566284313, + ]), + Fq::from_montgomery_limbs([ + 2546006251271733188, + 17600491598884247746, + 14062949050289708021, + 821447001112770449, + ]), + Fq::from_montgomery_limbs([ + 11557892681183640983, + 3553808879521780009, + 5828391499760976335, + 706816644254127358, + ]), + Fq::from_montgomery_limbs([ + 87239843232890664, + 15700472350663595467, + 174519885711847558, + 1123281110015984026, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 2827103361153395332, + 9771223936028754360, + 17019668270000185744, + 250846897334218988, + ]), + Fq::from_montgomery_limbs([ + 5119814427033781946, + 2081312228775851068, + 14150656259150135415, + 412824983197785589, + ]), + Fq::from_montgomery_limbs([ + 8649749569221526485, + 520969763542437761, + 18397072919079815484, + 473314797287595707, + ]), + Fq::from_montgomery_limbs([ + 8194315404853463748, + 15060811055660635178, + 11318868018104656047, + 759678196288305769, + ]), + Fq::from_montgomery_limbs([ + 10987085614436524099, + 8214999842286961244, + 5709575456336614864, + 1056310210546073817, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 6532789592575228069, + 3265438887018026818, + 17111525378271668948, + 1320499686924692082, + ]), + Fq::from_montgomery_limbs([ + 2197318288869911886, + 307033351054159068, + 14033422988641489555, + 689909787061505964, + ]), + Fq::from_montgomery_limbs([ + 3507717375223769090, + 10033023697975699121, + 15321810854570355253, + 890016110699860569, + ]), + Fq::from_montgomery_limbs([ + 6897743854949081968, + 10158161465287387801, + 9179072886178700686, + 620001185095628667, + ]), + Fq::from_montgomery_limbs([ + 17448998618237282714, + 2553852017375909, + 1793419264718581373, + 725044591608116521, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 16012268534560097932, + 13416075297285506301, + 16493211465851903420, + 1091948493998105984, + ]), + Fq::from_montgomery_limbs([ + 14392369108156989804, + 10617956576365144165, + 11809714324716728769, + 1188444181516740870, + ]), + Fq::from_montgomery_limbs([ + 15466384892561009653, + 10941962222512674624, + 1913904384440848129, + 606922266921522145, + ]), + Fq::from_montgomery_limbs([ + 14584618083984398210, + 14186299915288736440, + 17757535025721844034, + 1063945284694781692, + ]), + Fq::from_montgomery_limbs([ + 6792570643359499560, + 4535097730077924957, + 12073011546773881134, + 1137378726981169881, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 15102847980540220978, + 5520326730982346297, + 2698729817022762322, + 1194738055539544118, + ]), + Fq::from_montgomery_limbs([ + 6147044654176302920, + 2364057582092333147, + 11540841437940787480, + 556063025467036658, + ]), + Fq::from_montgomery_limbs([ + 1647311829762859720, + 13415217341886740242, + 16485335404491864284, + 491439704095662519, + ]), + Fq::from_montgomery_limbs([ + 12141727361360860468, + 9821467392353266448, + 11166495178510190210, + 245664677516946430, + ]), + Fq::from_montgomery_limbs([ + 5360382176507266601, + 768193387830048410, + 3996566068451735831, + 795512106745688059, + ]), + ]), + Matrix::<1, 5, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 2189128173409064762, + 11499748369225599949, + 13499847782281945694, + 1340871250773004273, + ]), + Fq::from_montgomery_limbs([ + 1159278411248794850, + 6701355601329876701, + 10476550252580870928, + 490304301636428667, + ]), + Fq::from_montgomery_limbs([ + 4466317563581149355, + 15128213745330326318, + 5257941398512314848, + 1111650855813054172, + ]), + Fq::from_montgomery_limbs([ + 8839577424282800883, + 7949855030699078116, + 2996553645008704135, + 85398623640375889, + ]), + Fq::from_montgomery_limbs([ + 9514362250339879637, + 13706294199150347872, + 11853022932563321890, + 818790762833572114, + ]), + ]), + ], + w_hat_collection: [ + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 15152119682022281684, + 2079168917784381610, + 8548836536267236340, + 524962922610130041, + ]), + Fq::from_montgomery_limbs([ + 16770218796354446865, + 6164915921600418774, + 18434642018604219177, + 984431242893424161, + ]), + Fq::from_montgomery_limbs([ + 12257484635811173124, + 3332345693021229804, + 9856107590709416500, + 1159223252431020322, + ]), + Fq::from_montgomery_limbs([ + 9979132349322887614, + 3961848182433907151, + 8799570660063224410, + 475862931364908156, + ]), + Fq::from_montgomery_limbs([ + 3872788615927669352, + 15152509537124089722, + 5205890896288656861, + 1231307161030894178, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 311271084272320082, + 5284197557048869863, + 14669222562574339674, + 571307699885408030, + ]), + Fq::from_montgomery_limbs([ + 11625781241601592791, + 14885568706820662540, + 17941376171308792723, + 783918507477975660, + ]), + Fq::from_montgomery_limbs([ + 226868460330872644, + 12734244079593541616, + 10451890082278586850, + 32508669310149618, + ]), + Fq::from_montgomery_limbs([ + 6020187144675607048, + 11405887127978088053, + 4712122969940341979, + 1080334010198437810, + ]), + Fq::from_montgomery_limbs([ + 5933505187504807441, + 3473057270652036730, + 6105009132686901569, + 114203646444743763, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 1120856672192884245, + 16247214934320106390, + 15323677081999960076, + 62404200512763570, + ]), + Fq::from_montgomery_limbs([ + 8831161875549232238, + 6077491870312206017, + 14081883006003626391, + 1154651324772984368, + ]), + Fq::from_montgomery_limbs([ + 5661890842653089732, + 13320534556163866242, + 9035321631852285107, + 903630770886300483, + ]), + Fq::from_montgomery_limbs([ + 15889657237181390432, + 15162271575679238159, + 1491114731026258819, + 287846816690944321, + ]), + Fq::from_montgomery_limbs([ + 7238626723934307483, + 13278275328632196610, + 8627741857269318907, + 925711656222055996, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 16274331391150039806, + 1623594389399151027, + 11932333738554132870, + 706372249166702105, + ]), + Fq::from_montgomery_limbs([ + 732452989467352943, + 1044771601653765712, + 7295501005775861284, + 241383337916425122, + ]), + Fq::from_montgomery_limbs([ + 1055111559926828336, + 436063422223614235, + 8237830476387497674, + 486023893828905207, + ]), + Fq::from_montgomery_limbs([ + 11846198484218265818, + 8058524634853844099, + 813566309310159764, + 1342803580678902586, + ]), + Fq::from_montgomery_limbs([ + 13415802809644488728, + 14511002260322793565, + 4157389022600774011, + 262652662563663469, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 6280812441180517055, + 6148355053508262675, + 10298538567830482124, + 549753875811636329, + ]), + Fq::from_montgomery_limbs([ + 824304312279887084, + 5198474444698315745, + 4090895165493551175, + 1217302205153655151, + ]), + Fq::from_montgomery_limbs([ + 4735542953263469139, + 612014805877448122, + 12832372076520494984, + 750953222849642269, + ]), + Fq::from_montgomery_limbs([ + 147828622890240493, + 128044761765714597, + 12093927754417303852, + 132385902652165260, + ]), + Fq::from_montgomery_limbs([ + 18171144465445367562, + 4015656370081309510, + 15930285771575041073, + 1269412572744267545, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 14398639038380864956, + 6619595958723804843, + 12719064233121758133, + 406442443563323199, + ]), + Fq::from_montgomery_limbs([ + 10762946454330918789, + 5528361687335835568, + 3991418360765486778, + 286492429663333048, + ]), + Fq::from_montgomery_limbs([ + 11742168906901241463, + 15503883602330266637, + 15831515237753512854, + 1044066191448484616, + ]), + Fq::from_montgomery_limbs([ + 10525155675978585492, + 4670730111394235591, + 5961373269656674720, + 95271963105126236, + ]), + Fq::from_montgomery_limbs([ + 584627878861922239, + 7921433855087631798, + 7615313333543717641, + 1109592926172816575, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 15091688909514107804, + 654570390524891199, + 16494576826680457410, + 30762953858016498, + ]), + Fq::from_montgomery_limbs([ + 2761325807027693284, + 11935489432137753301, + 3489012309486987802, + 239715377721177782, + ]), + Fq::from_montgomery_limbs([ + 10454593178969047515, + 1040128098662881642, + 5632035830401774632, + 554859180328868399, + ]), + Fq::from_montgomery_limbs([ + 5107303737176549426, + 15727856129637397988, + 6051568784602114728, + 873492972237083876, + ]), + Fq::from_montgomery_limbs([ + 12130743148391729861, + 11271998017451462639, + 10929122930592304172, + 194097991947183661, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 14867630937298531794, + 9612402140924249048, + 15791934086459495277, + 701876161263964392, + ]), + Fq::from_montgomery_limbs([ + 4800492369986485195, + 837798357520426667, + 11678651630838500929, + 1197393486814847593, + ]), + Fq::from_montgomery_limbs([ + 7361531118817265902, + 10654842008121782114, + 11329661993953094409, + 53031172666072441, + ]), + Fq::from_montgomery_limbs([ + 13678736880795169285, + 11579896750305940195, + 16427828830934341434, + 373548996986898141, + ]), + Fq::from_montgomery_limbs([ + 3113965972245214273, + 3618222426215928202, + 14280489027814430075, + 1227439762891391632, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 1519481477607620457, + 10318567135550122014, + 263846661207466096, + 640929643224454153, + ]), + Fq::from_montgomery_limbs([ + 14263939264430200097, + 8800960240049783032, + 10525864428412568060, + 1229598433830944803, + ]), + Fq::from_montgomery_limbs([ + 4737100860592755646, + 3405741585209394827, + 3774719897330733186, + 1001424607855656625, + ]), + Fq::from_montgomery_limbs([ + 4527327887926361650, + 5195716198788998780, + 2452454045651672598, + 1114842100489228591, + ]), + Fq::from_montgomery_limbs([ + 12639481132070877116, + 6184431555458882642, + 13833172896014011365, + 138391625804209902, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 3025469591916962139, + 1116358649574420645, + 10697299179333984962, + 1100828152488463516, + ]), + Fq::from_montgomery_limbs([ + 17596104129549385707, + 117028884523868090, + 6843789980420923220, + 394144012237385792, + ]), + Fq::from_montgomery_limbs([ + 76569421022187354, + 7618174529699040891, + 14258607882742494097, + 325795777168928125, + ]), + Fq::from_montgomery_limbs([ + 9488688453300333348, + 6023458951346117124, + 8882873536266522192, + 1011335963622574163, + ]), + Fq::from_montgomery_limbs([ + 10273078691683312131, + 14951774310795138631, + 5056574235010407582, + 216683108447003755, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 16270690847183812253, + 8396384187123364284, + 15973135291934403644, + 337754294626036574, + ]), + Fq::from_montgomery_limbs([ + 11537970389959600601, + 15344885270945805038, + 16062179622496264928, + 634770789960495300, + ]), + Fq::from_montgomery_limbs([ + 16629897675960611498, + 9857864935176241914, + 16649516829790580187, + 879077994781187974, + ]), + Fq::from_montgomery_limbs([ + 15757760830891963153, + 1980968732617718233, + 363417887657441819, + 1245373320221094018, + ]), + Fq::from_montgomery_limbs([ + 1369140419065411691, + 114665172743829173, + 16025067317418460214, + 772519184136728441, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 5166287970903668709, + 13178607088194812953, + 13394943015525495010, + 1136891698590635716, + ]), + Fq::from_montgomery_limbs([ + 6786739958142009449, + 3712291089779086337, + 11114170296176591543, + 412243655343207746, + ]), + Fq::from_montgomery_limbs([ + 2483986099773441215, + 6355297372287593359, + 12546131765129037338, + 850333435641268865, + ]), + Fq::from_montgomery_limbs([ + 4129060137994461513, + 15810046888600142778, + 14959377549727103485, + 983509352989716443, + ]), + Fq::from_montgomery_limbs([ + 5375190994774345144, + 6642323264045992752, + 697489999924152538, + 711658337986264203, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 10789013922038705474, + 15907427163103262467, + 6211828439721814286, + 821662973636748389, + ]), + Fq::from_montgomery_limbs([ + 1245892911222176515, + 1760690499003421411, + 7411938278280460519, + 996198333836410116, + ]), + Fq::from_montgomery_limbs([ + 14902739397227121611, + 9677074799597948924, + 16338232095647494428, + 107475751267019502, + ]), + Fq::from_montgomery_limbs([ + 14751552868296217802, + 10957219946410361892, + 2609386566023075942, + 795435587890350748, + ]), + Fq::from_montgomery_limbs([ + 14228026094996696402, + 2826584103258174948, + 1310186622837843420, + 912856498151667865, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 632309018718566470, + 8852208976226519541, + 5569100181556353071, + 984010564169166433, + ]), + Fq::from_montgomery_limbs([ + 6992820576439012611, + 9698447268226822027, + 17633082455161111009, + 90244636707781414, + ]), + Fq::from_montgomery_limbs([ + 6543679712083684758, + 10736979596575357883, + 4698076992795071575, + 1270787674212113, + ]), + Fq::from_montgomery_limbs([ + 16044338327666607926, + 3960206126744122590, + 4858706793602461066, + 561666947698425720, + ]), + Fq::from_montgomery_limbs([ + 3368306314740365965, + 9177942911310203166, + 18367144956945019416, + 653903203015259414, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 12874723854177830125, + 5100681384941725656, + 9285950066462290781, + 858148062800653733, + ]), + Fq::from_montgomery_limbs([ + 4768366185853611631, + 14842169834008972704, + 16645218449281418514, + 817503519482950628, + ]), + Fq::from_montgomery_limbs([ + 3007496102230569523, + 11399958112043651698, + 15787521760129406401, + 826416774444573023, + ]), + Fq::from_montgomery_limbs([ + 10890936042157055266, + 8565215756042961896, + 1054057862367192487, + 202049359204983814, + ]), + Fq::from_montgomery_limbs([ + 2425581217694278079, + 12792279644970276082, + 4689036727185422224, + 1064336763331781201, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 2764179143636297935, + 18061233587720561716, + 12411254568157467507, + 427402914001475058, + ]), + Fq::from_montgomery_limbs([ + 2924816478430507635, + 9786303437156946185, + 13021435082088378496, + 78702703698317598, + ]), + Fq::from_montgomery_limbs([ + 8200525868229314140, + 16881303073057711951, + 4187547714670888467, + 455617381392152389, + ]), + Fq::from_montgomery_limbs([ + 8310666736636434815, + 16453325372394262716, + 13511049246920939341, + 416209098687774975, + ]), + Fq::from_montgomery_limbs([ + 7508636928089493550, + 1778929466519171040, + 9865075252470321631, + 222439820478088778, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 26427962923262805, + 13400472629512916744, + 3808805306352074297, + 128699596583089680, + ]), + Fq::from_montgomery_limbs([ + 18283636998376248321, + 5779768391741799708, + 8993926161412908836, + 272788598277303242, + ]), + Fq::from_montgomery_limbs([ + 385260822800957491, + 7888556288710245505, + 12785711973091118063, + 1290081227789032623, + ]), + Fq::from_montgomery_limbs([ + 7370461305656006315, + 8097104282146432375, + 3693139275053762963, + 1200841519361465892, + ]), + Fq::from_montgomery_limbs([ + 12067130442173286908, + 2170379854767453652, + 13201336336736961495, + 927175852053928205, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 11214687023235424600, + 5560314158648804455, + 17670625093449035024, + 1242366510949799159, + ]), + Fq::from_montgomery_limbs([ + 8409895882379798325, + 14471144258274119497, + 5245528502428581668, + 869805265859067382, + ]), + Fq::from_montgomery_limbs([ + 2802161834127193832, + 181192611793840022, + 1581405763136818654, + 674326086636803499, + ]), + Fq::from_montgomery_limbs([ + 5748156006252401196, + 9530968273316544473, + 1373075747037319701, + 478917773953068122, + ]), + Fq::from_montgomery_limbs([ + 10550634859635316442, + 11115297058518078301, + 15167740297739703393, + 499663014055796942, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 8737679817842057617, + 14335003891544767889, + 5806471893265243804, + 1199697546794663346, + ]), + Fq::from_montgomery_limbs([ + 18312746592170672376, + 2468171777169034619, + 11588707770047473860, + 1167607620745843361, + ]), + Fq::from_montgomery_limbs([ + 8991056605371192176, + 9683166706953599777, + 3207279773035228554, + 1036594322405142084, + ]), + Fq::from_montgomery_limbs([ + 10715958137830220707, + 13790797151438523296, + 3814352367403212083, + 338399526865285980, + ]), + Fq::from_montgomery_limbs([ + 7602766395993095249, + 15421116878917379598, + 9842919232591540089, + 811441858348229638, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 11240616276279859335, + 18168970638218441074, + 12681307963217316671, + 529653072592394540, + ]), + Fq::from_montgomery_limbs([ + 15804354330800222400, + 2664362506755913571, + 15220567525462081033, + 415854075276634564, + ]), + Fq::from_montgomery_limbs([ + 6499893156022247982, + 5370094427775939872, + 12693314181999023046, + 334522766633278821, + ]), + Fq::from_montgomery_limbs([ + 2043116979793859192, + 5901796972056645976, + 14393765505679755827, + 861233648011975692, + ]), + Fq::from_montgomery_limbs([ + 15324644517910983402, + 7402962800234459251, + 15501703598689014650, + 866765414305968533, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 12865534582606617484, + 5710240921655628764, + 10047828149580190691, + 1035217630777023330, + ]), + Fq::from_montgomery_limbs([ + 7623115266181592594, + 15654093656542240609, + 17584343833694408578, + 965948623120670646, + ]), + Fq::from_montgomery_limbs([ + 12322860754126106334, + 5704375241169042821, + 5005598195199710337, + 599456016816833315, + ]), + Fq::from_montgomery_limbs([ + 3114048235662948861, + 3186724356925890101, + 12603030351469960653, + 784880135590304822, + ]), + Fq::from_montgomery_limbs([ + 10542157016978853051, + 375232718281833036, + 8419637174785911645, + 480073460241875582, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 4619753066505217513, + 16240034683968173295, + 101722798642334078, + 1093802332804170111, + ]), + Fq::from_montgomery_limbs([ + 11772483107625265757, + 10206667679119141509, + 18114554164862022458, + 1023031741792146569, + ]), + Fq::from_montgomery_limbs([ + 13246284581489263787, + 14406389897239052674, + 3455768173607702603, + 1053480392953200960, + ]), + Fq::from_montgomery_limbs([ + 6494604848840235336, + 6851286908738110852, + 6952092093989720037, + 528933354597117664, + ]), + Fq::from_montgomery_limbs([ + 625815039158913101, + 3482039923172880345, + 11185655673758240856, + 30871173764135737, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 11116836871987577766, + 8109541581819717708, + 14249648100460872066, + 228964235140475035, + ]), + Fq::from_montgomery_limbs([ + 10850735048215572309, + 4250918544830268539, + 1159262399998108531, + 597017478561992605, + ]), + Fq::from_montgomery_limbs([ + 2429928267440692097, + 1037103561750764536, + 14249565405637869240, + 238948313464233222, + ]), + Fq::from_montgomery_limbs([ + 15908449453336200948, + 14778706528145004443, + 1518131124404071948, + 342204757203960757, + ]), + Fq::from_montgomery_limbs([ + 10343358798246302148, + 4716916005406799178, + 1280891908040278925, + 33904180033936995, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 13657049778223062917, + 16159025960783232211, + 4256662595768243763, + 769690080070442279, + ]), + Fq::from_montgomery_limbs([ + 8630441296206546010, + 15101393911422801574, + 15765903519913875666, + 1059019903719527397, + ]), + Fq::from_montgomery_limbs([ + 17353580961907941474, + 11690315434040365887, + 1919970450761622105, + 1284644920565762622, + ]), + Fq::from_montgomery_limbs([ + 9142190750578974954, + 7982580406830591641, + 139105874244767315, + 1037725609814647069, + ]), + Fq::from_montgomery_limbs([ + 8274397077677504305, + 7550323696121525646, + 13342176390347462405, + 495524022793746412, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 1300654639607007076, + 5418426225271078814, + 17799220415649590999, + 578082611305900028, + ]), + Fq::from_montgomery_limbs([ + 15087651230680029653, + 14061399273111500513, + 13990992483413246139, + 217274859442961675, + ]), + Fq::from_montgomery_limbs([ + 17409038465662970942, + 16739652419107899003, + 1728243859263530675, + 1005030425295937500, + ]), + Fq::from_montgomery_limbs([ + 9881137796190779983, + 3738513419678193257, + 6908712468714119492, + 128170763609761066, + ]), + Fq::from_montgomery_limbs([ + 5980808904168005021, + 6535637039411031048, + 4353709569732736105, + 985581940426054692, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 9266459364560412147, + 1675941305082716910, + 2644496138354097667, + 593111726451400001, + ]), + Fq::from_montgomery_limbs([ + 11923296558184512186, + 14335481794247232343, + 1756296816003311831, + 1337227067587852298, + ]), + Fq::from_montgomery_limbs([ + 15213177739061556154, + 5962926969279075759, + 9583168463456919751, + 1345102811307691605, + ]), + Fq::from_montgomery_limbs([ + 7236531265332214668, + 11730813784468030291, + 3260041626130793112, + 413423911331686730, + ]), + Fq::from_montgomery_limbs([ + 9992377390528540244, + 10251294356867851146, + 15408569698061863503, + 686801780474850525, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 12551312954021730815, + 8771782951882110027, + 8266520452918776358, + 585025591233977219, + ]), + Fq::from_montgomery_limbs([ + 5063400267728024015, + 14290329839247601111, + 12614604995283750144, + 230714106990743170, + ]), + Fq::from_montgomery_limbs([ + 14919127087277880180, + 1233913841901824423, + 2945855199399696462, + 1124234888120832064, + ]), + Fq::from_montgomery_limbs([ + 6630767633426865082, + 4134529385803270273, + 547558622173751939, + 1276870556955963960, + ]), + Fq::from_montgomery_limbs([ + 6194800795402001302, + 7453146289235044346, + 1846631670011345424, + 373216392925072559, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 8530038482194296425, + 1186609470593087346, + 1550686771111894200, + 918591303091561115, + ]), + Fq::from_montgomery_limbs([ + 5499603817197150545, + 6278523764748797546, + 9492893478468221078, + 76690422627606484, + ]), + Fq::from_montgomery_limbs([ + 7172281043633854180, + 9586248386574401986, + 4695159959373826247, + 291013948190359675, + ]), + Fq::from_montgomery_limbs([ + 1958470378825944596, + 13429774428855320394, + 14915732503423284573, + 675396101420063305, + ]), + Fq::from_montgomery_limbs([ + 11013259379518244436, + 12321083210650373617, + 18169826561711333453, + 1123565689252234229, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 8538081673660833158, + 9406736474943528419, + 1248182586638760682, + 566915522520784434, + ]), + Fq::from_montgomery_limbs([ + 871762597826126451, + 16952899443646083570, + 9760070688515351533, + 1153171851787119216, + ]), + Fq::from_montgomery_limbs([ + 17099176922694092192, + 828730151529195508, + 4040300595746784683, + 896316263468400176, + ]), + Fq::from_montgomery_limbs([ + 17895859754552623107, + 12372008340476127191, + 15869904838348331177, + 775743200601290861, + ]), + Fq::from_montgomery_limbs([ + 7009270681870686791, + 2613922803678169165, + 14616132396476908383, + 1266967860663970985, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 2842431186863606520, + 5016515943888671695, + 1025755096788745830, + 118497541762157376, + ]), + Fq::from_montgomery_limbs([ + 15651700296535015112, + 8569612184315077364, + 15451942282818992185, + 541946385718467129, + ]), + Fq::from_montgomery_limbs([ + 17425453868458867672, + 13259317954798539165, + 14653762240483553886, + 1289545541558928924, + ]), + Fq::from_montgomery_limbs([ + 10182995923953810379, + 1555053058248744878, + 14233166151877877681, + 1314025239224831524, + ]), + Fq::from_montgomery_limbs([ + 5382307905322995124, + 14222432758856306145, + 3195810595195159237, + 932323741878209391, + ]), + ]), + Matrix::<5, 1, 5>::new_from_known([ + Fq::from_montgomery_limbs([ + 4093215837977364819, + 1786552664558589683, + 15811959916460894504, + 1122605521342489905, + ]), + Fq::from_montgomery_limbs([ + 6757580137997166235, + 13857613907011413182, + 729793288849614944, + 140426125151203814, + ]), + Fq::from_montgomery_limbs([ + 18248567113979980306, + 15307246736403175565, + 7970334653691291978, + 817641900996362744, + ]), + Fq::from_montgomery_limbs([ + 13209637935471398448, + 10485350831767594057, + 18120173774880047238, + 981942705210324429, + ]), + Fq::from_montgomery_limbs([ + 13041861333642835240, + 17156211741149643971, + 4775992643478887474, + 160471371624793379, + ]), + ]), + ], + }, + optimized_arc: OptimizedArcMatrix::<39, 6, 234>::new_from_known([ + Fq::from_montgomery_limbs([ + 11114527869315019992, + 204777424233041404, + 11091912519069240090, + 121969426625488706, + ]), + Fq::from_montgomery_limbs([ + 11602548353808217299, + 6197238791893869094, + 15622579320964543388, + 1298930792120594487, + ]), + Fq::from_montgomery_limbs([ + 838896996119702820, + 9307552859605174720, + 8035142733069793771, + 274230695041989171, + ]), + Fq::from_montgomery_limbs([ + 3026923182969617970, + 17802669379857452552, + 12317599963821296502, + 1025681681724348483, + ]), + Fq::from_montgomery_limbs([ + 5608950751956253759, + 13524340746668180438, + 15318090696011006995, + 777019565914500344, + ]), + Fq::from_montgomery_limbs([ + 1158035626778037273, + 17664260243497899213, + 16296355254226759288, + 950557495952381678, + ]), + Fq::from_montgomery_limbs([ + 11235491782021601934, + 3148198093287396523, + 17540068057551648414, + 246938399961631601, + ]), + Fq::from_montgomery_limbs([ + 17389082769676787279, + 4715116371725704005, + 680633748837086801, + 1023507596971258305, + ]), + Fq::from_montgomery_limbs([ + 7398967334233665984, + 13695483063991186800, + 18171031240540141567, + 1071188377250033509, + ]), + Fq::from_montgomery_limbs([ + 8901013324099486427, + 14221538804433703579, + 421845258270117661, + 1118364576196477055, + ]), + Fq::from_montgomery_limbs([ + 3792995620986947754, + 8295286409031689804, + 7023787899825757992, + 899023674461718667, + ]), + Fq::from_montgomery_limbs([ + 8793784762096018942, + 15222981485936247095, + 17829285903963587033, + 104381350073974926, + ]), + Fq::from_montgomery_limbs([ + 11268502072074030331, + 4494658873172678747, + 10565307326465463378, + 784696444351308107, + ]), + Fq::from_montgomery_limbs([ + 13330824150800116849, + 4890131204868069348, + 16795432331983276560, + 678123243378284364, + ]), + Fq::from_montgomery_limbs([ + 16154775053781645033, + 5239747136963640569, + 16611876759537507645, + 759623577554638126, + ]), + Fq::from_montgomery_limbs([ + 8392188723943358220, + 16791142993973140668, + 13297749232586734563, + 426701908934618073, + ]), + Fq::from_montgomery_limbs([ + 17606532937509352288, + 2853753027669231277, + 1878611917293492305, + 643977045852461225, + ]), + Fq::from_montgomery_limbs([ + 5784332265294899224, + 10677876800438676900, + 18301919197560353192, + 1242300655560067148, + ]), + Fq::from_montgomery_limbs([ + 11412543805884713089, + 4404535555399600518, + 4605611364617586616, + 706261397170793623, + ]), + Fq::from_montgomery_limbs([ + 2724614443579353257, + 12190950292326203757, + 12944786940879400957, + 90707148364678769, + ]), + Fq::from_montgomery_limbs([ + 16664686769040599810, + 7492639236725157146, + 1787480043672337070, + 1043615315016757716, + ]), + Fq::from_montgomery_limbs([ + 4392261116480034202, + 16508253691140740970, + 1257682754845069496, + 1301148167322522764, + ]), + Fq::from_montgomery_limbs([ + 139213556258184346, + 16303671450556136664, + 10342805884525342231, + 508792166529776861, + ]), + Fq::from_montgomery_limbs([ + 14643711485787161846, + 5395142180975966192, + 12467589421402803020, + 144762579288366866, + ]), + Fq::from_montgomery_limbs([ + 15255437222491521014, + 14721462158275437977, + 2057221655333534074, + 1325734657361576891, + ]), + Fq::from_montgomery_limbs([ + 15414140179948612967, + 18192784700743189854, + 9643806020156298087, + 376775047158942797, + ]), + Fq::from_montgomery_limbs([ + 18092841461306760003, + 2807423972236024481, + 7922348787325395480, + 1212285078601209657, + ]), + Fq::from_montgomery_limbs([ + 16708900869096362927, + 2122564142804905834, + 13890195487457233383, + 126050338062319781, + ]), + Fq::from_montgomery_limbs([ + 13016765056631510317, + 775825654612492872, + 1519488323304929971, + 511775234197862995, + ]), + Fq::from_montgomery_limbs([ + 10798249763854349440, + 8782377489797979147, + 12405352952342825868, + 1275110544094341666, + ]), + Fq::from_montgomery_limbs([ + 9330052657446344303, + 4964707063063280466, + 2747936433058978798, + 1286324345607159919, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13438421980365571751, + 13764047089799136418, + 6549510980996449235, + 89638406717638204, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3120082900215749818, + 2506463968951363665, + 5751682941173719701, + 1183280915899386044, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3889637240168755614, + 14778096222179630956, + 16885419836575361353, + 250222614360102585, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8994135098656528858, + 6054905993385110489, + 15955209030417792186, + 417192650490068388, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10542836021159102202, + 3922552091508743640, + 15499449205954987041, + 257248375734524697, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18307747395340188800, + 7047747805490525925, + 11242708609504355532, + 793276497114397997, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16022663073357324949, + 3551519053939817423, + 3374093457075448733, + 95641413276534082, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16611512242802281767, + 13417278867724672960, + 12339427782843337847, + 1029453794287724677, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9587606159882976610, + 13065183120609796571, + 5134588985846741978, + 1052742636206989263, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5120379400595969817, + 4824276514479560160, + 15209383162223813538, + 98360897446496767, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7633930096380799602, + 2831233200869503763, + 6933925156133583675, + 45431990866667491, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4063032547170944262, + 2228607997293084806, + 376103209766462421, + 748529159788109811, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8393715434195231445, + 15247401046663606451, + 1655959932549342287, + 101776028083387641, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15008767674909606325, + 531227893384812653, + 7210523396658562084, + 437386864972028358, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16809071159722694272, + 6830450328296125348, + 6475300827542698627, + 399257887526004612, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 82825596177761974, + 11317217432462243029, + 6642795994570466536, + 54497338514902862, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6850975607505382161, + 14495312419830721473, + 12467132244094124841, + 869971081325966252, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6776972065809629900, + 14404993916899429083, + 14745271791343793348, + 1281731922471929435, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12167414230777830458, + 3579196606687723355, + 14118801611883897825, + 1188804452360844569, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7553145712183260477, + 18113523762458916439, + 13422344310762339471, + 121199852036910351, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6210598847695513673, + 10694250862598493782, + 1063552736172580723, + 859901328112942851, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10747937872207229763, + 13786226828072394952, + 274364464850991752, + 1218823234058712778, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2520693279910212484, + 15286253593138229505, + 9531050394238581262, + 329181833527084527, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3226526077625644436, + 2588404341480318661, + 9070433711166827508, + 1188235207132643549, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16703563760445846403, + 8620998770380437284, + 8858436416497897390, + 1102236124390324251, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5630089007465765576, + 6410026402258852609, + 17160884434802874754, + 420357023452589124, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12644008863026136496, + 11315917635237722843, + 12364361333201119848, + 946242401908845264, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9089855529735912751, + 11711947227707110137, + 12189800517249432550, + 1037376283079163315, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2642673912191614581, + 8420261709120249882, + 7567649328018501241, + 1090882039889692225, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 624108744920628033, + 7222337173749652537, + 6177234009439253836, + 1305879330650409183, + ]), + Fq::from_montgomery_limbs([ + 4047186108818890838, + 8293278676301284463, + 45421248765572143, + 11849077013826147, + ]), + Fq::from_montgomery_limbs([ + 13734838437817111564, + 14067107962177066014, + 6283538344938866018, + 943068615468766850, + ]), + Fq::from_montgomery_limbs([ + 9459753653362225504, + 13412221550119657532, + 11719554885145159458, + 1038210702444171410, + ]), + Fq::from_montgomery_limbs([ + 17258590752825572441, + 4422385439615665045, + 10963985232294213328, + 673097344483052623, + ]), + Fq::from_montgomery_limbs([ + 4350910935437581306, + 17071656780821887075, + 17526744607642225290, + 489524084357985818, + ]), + Fq::from_montgomery_limbs([ + 8703107470067448452, + 734592437454660319, + 6370216058631913860, + 984849913832896286, + ]), + Fq::from_montgomery_limbs([ + 15847437253128917127, + 13204151715277535095, + 13151742340803361913, + 492775982398767260, + ]), + Fq::from_montgomery_limbs([ + 13378140148769271177, + 11023068523390522139, + 1729259508144916727, + 998491139322015796, + ]), + Fq::from_montgomery_limbs([ + 15868115462640964898, + 5808184910810487816, + 17891106563868657547, + 1273423536878729280, + ]), + Fq::from_montgomery_limbs([ + 17498572932499506726, + 4915375148198704347, + 16526318329827242193, + 172885368041045335, + ]), + Fq::from_montgomery_limbs([ + 12175858961476635194, + 8395097384299796850, + 16561947957716644135, + 118811035529307344, + ]), + Fq::from_montgomery_limbs([ + 1364632949773972783, + 5616500288305274826, + 2744828291285230257, + 1337220218752536168, + ]), + Fq::from_montgomery_limbs([ + 7125704632582034340, + 2413935880315792634, + 16253134495760827214, + 1013353907442898755, + ]), + Fq::from_montgomery_limbs([ + 9926413936648370716, + 9286244748248440505, + 5620697470790885637, + 1050126432920929832, + ]), + Fq::from_montgomery_limbs([ + 2286190222160729638, + 1205027650655862007, + 284571302335235840, + 754838472987631454, + ]), + Fq::from_montgomery_limbs([ + 18032942241472576701, + 12877723516371231014, + 5304401947346162660, + 638292803799023432, + ]), + Fq::from_montgomery_limbs([ + 1301734909908791963, + 3999021096443686109, + 8224194566860360743, + 975889756225576945, + ]), + Fq::from_montgomery_limbs([ + 13137758236377688944, + 15164889622744579310, + 9510882901247182860, + 507443416341514201, + ]), + Fq::from_montgomery_limbs([ + 7442629497476523514, + 15402336932582436695, + 12267702252685663951, + 406181490859224216, + ]), + Fq::from_montgomery_limbs([ + 3020913173034234370, + 7615906519537783167, + 14373843007930618441, + 268952515824125262, + ]), + Fq::from_montgomery_limbs([ + 8510711668693637739, + 16478737597936355688, + 4962621450185609628, + 274948738817040348, + ]), + Fq::from_montgomery_limbs([ + 175794307933344111, + 2355200265651483892, + 17868773626579092521, + 52492857067069690, + ]), + Fq::from_montgomery_limbs([ + 13918504549178190575, + 13563258972352289042, + 5310731325887509548, + 465559440844068311, + ]), + ]), + } +} diff --git a/poseidon377/src/params/rate_6.rs b/poseidon377/src/params/rate_6.rs new file mode 100644 index 0000000..49e7897 --- /dev/null +++ b/poseidon377/src/params/rate_6.rs @@ -0,0 +1,6424 @@ +use decaf377::Fq; +use poseidon_parameters::v1::{ + Alpha, ArcMatrix, Matrix, MdsMatrix, OptimizedArcMatrix, OptimizedMdsMatrices, + PoseidonParameters, RoundNumbers, SquareMatrix, +}; + +/// Parameters for the rate-6 instance of Poseidon. +pub const fn rate_6() -> PoseidonParameters<7, 6, 49, 36, 39, 7, 273, 31> { + PoseidonParameters { + M: 128, + arc: ArcMatrix::<39, 7, 273>::new_from_known([ + Fq::from_montgomery_limbs([ + 15142982440796561447, + 11586951767160912790, + 2554152473571518408, + 1060132733599829191, + ]), + Fq::from_montgomery_limbs([ + 5004052621280210368, + 17001459709892607063, + 7681637351760180567, + 370325849830378477, + ]), + Fq::from_montgomery_limbs([ + 12700316700887579682, + 10527071459591008162, + 4649940422809756001, + 1164398790994859766, + ]), + Fq::from_montgomery_limbs([ + 14166576988026094609, + 7313392791454005322, + 12003933110859736764, + 497349496445067730, + ]), + Fq::from_montgomery_limbs([ + 660800666505769101, + 8654643871558439567, + 14263148622483513593, + 820049075817239934, + ]), + Fq::from_montgomery_limbs([ + 3633256971691786185, + 10090676851691033833, + 14588357423182388197, + 831634409758195705, + ]), + Fq::from_montgomery_limbs([ + 6492287632409988134, + 12046607076154115291, + 17147959445519551317, + 461021671425820687, + ]), + Fq::from_montgomery_limbs([ + 14444046072241906262, + 11260694318344083229, + 15743364178797140854, + 866446994798567454, + ]), + Fq::from_montgomery_limbs([ + 3641312158605685211, + 14157364044999263645, + 16784472236570305027, + 425843099497195003, + ]), + Fq::from_montgomery_limbs([ + 17723864121788076174, + 13911937024562874191, + 12749454259525933628, + 451378649043069085, + ]), + Fq::from_montgomery_limbs([ + 12784133990119646353, + 17654455838119254543, + 14047536069777387226, + 645204516252515303, + ]), + Fq::from_montgomery_limbs([ + 1959581704190940037, + 13929985394687694163, + 11022302142929130035, + 283707020686355664, + ]), + Fq::from_montgomery_limbs([ + 8629032034013359758, + 8320916390268264398, + 11188435069201519314, + 1277918481865788038, + ]), + Fq::from_montgomery_limbs([ + 1783621120979741815, + 10125702604889014266, + 7859706914940359291, + 1258189548796714111, + ]), + Fq::from_montgomery_limbs([ + 4197085784563434882, + 243889206587889894, + 328885806087941395, + 929695947751686179, + ]), + Fq::from_montgomery_limbs([ + 6420634290533400711, + 3371757063543007366, + 8900632765923820105, + 371199850895065588, + ]), + Fq::from_montgomery_limbs([ + 9679924820095672851, + 5191301328839079795, + 1468702730043861612, + 1130258788388916276, + ]), + Fq::from_montgomery_limbs([ + 14270884667693338729, + 18421783881067727877, + 702505960635108322, + 876601962183112334, + ]), + Fq::from_montgomery_limbs([ + 12801928710162774032, + 15709283060501093378, + 2508615709628312314, + 924328772397935430, + ]), + Fq::from_montgomery_limbs([ + 9019134492733417932, + 4614098400696239641, + 291908476903718505, + 879711180612784839, + ]), + Fq::from_montgomery_limbs([ + 12296479578360854848, + 3423354675244851904, + 17098596077633953792, + 378482623029323224, + ]), + Fq::from_montgomery_limbs([ + 13200816203042245771, + 15381254577926224952, + 14688424257545082743, + 884773501591309967, + ]), + Fq::from_montgomery_limbs([ + 16263843110415550162, + 14001011937262187824, + 2325893788175944450, + 427344840846697831, + ]), + Fq::from_montgomery_limbs([ + 10712788406702291397, + 14628016237392831746, + 12076323935029775432, + 746032296870665924, + ]), + Fq::from_montgomery_limbs([ + 7577844083779539683, + 8593563853045273470, + 6762705862919489296, + 1011466592883577533, + ]), + Fq::from_montgomery_limbs([ + 10970204418416076913, + 4397529361571105931, + 15590416832284287611, + 432035610777585218, + ]), + Fq::from_montgomery_limbs([ + 13604542201065871088, + 8000646895858538916, + 7463535664974476191, + 112496092381655883, + ]), + Fq::from_montgomery_limbs([ + 5448941064349247150, + 18035446383961421934, + 9688851655819494355, + 314108334517577725, + ]), + Fq::from_montgomery_limbs([ + 13216339084640418338, + 18208749029142079159, + 2801888902925820506, + 1144112407212441278, + ]), + Fq::from_montgomery_limbs([ + 10386335329700935468, + 13018324118118161010, + 2406041197881630048, + 1324098854417409495, + ]), + Fq::from_montgomery_limbs([ + 2690622444332381359, + 2738375881209676440, + 17836986493178387691, + 868260556757543816, + ]), + Fq::from_montgomery_limbs([ + 9714850335178297908, + 2509018678236953449, + 1040431953277617242, + 408671886406597132, + ]), + Fq::from_montgomery_limbs([ + 707163896186597409, + 13903930520829310823, + 14380446875360964889, + 798432165792010570, + ]), + Fq::from_montgomery_limbs([ + 12820993772370131859, + 3069542795148551755, + 4040592593739183911, + 977377017483241698, + ]), + Fq::from_montgomery_limbs([ + 4384064590197914518, + 11440426390601473487, + 3890530701580791196, + 991346454205769097, + ]), + Fq::from_montgomery_limbs([ + 2745693351823380117, + 3687897447624002689, + 13955517171460419947, + 904061096631428006, + ]), + Fq::from_montgomery_limbs([ + 1760514697396940568, + 6095881437414931654, + 3928451548254372674, + 247578034773164640, + ]), + Fq::from_montgomery_limbs([ + 16683268981822865275, + 15797990746305502978, + 12125148959239662231, + 449202381506144581, + ]), + Fq::from_montgomery_limbs([ + 1544285291520736591, + 5232522639692590592, + 14175161601321791260, + 1003097983515138607, + ]), + Fq::from_montgomery_limbs([ + 13865967627227239358, + 4354525642109054184, + 5021238725820305528, + 906854086996571433, + ]), + Fq::from_montgomery_limbs([ + 15375530278413617622, + 7761235083504109835, + 15924872860758961429, + 537333030355735422, + ]), + Fq::from_montgomery_limbs([ + 13872782625772992287, + 2068079588750918007, + 17083661114150680976, + 191043765855622193, + ]), + Fq::from_montgomery_limbs([ + 489795382124266981, + 9316407371494156111, + 16300320024181640604, + 1307068723907147815, + ]), + Fq::from_montgomery_limbs([ + 77890204043514297, + 14999308260055033106, + 16273406145240730287, + 1230840137172288304, + ]), + Fq::from_montgomery_limbs([ + 9003111034130458080, + 14053560383370232566, + 14148009681833335599, + 84069116658731520, + ]), + Fq::from_montgomery_limbs([ + 1986315671557859076, + 944997752628096648, + 6737867794955410335, + 792066859500791592, + ]), + Fq::from_montgomery_limbs([ + 11554157552429322652, + 6015547764843714345, + 3599229111267661129, + 1102309536290663120, + ]), + Fq::from_montgomery_limbs([ + 16401157455500798150, + 2599298290463801395, + 4428490753223095655, + 516522849079366838, + ]), + Fq::from_montgomery_limbs([ + 7623242261478057757, + 3618111358832343565, + 1696272282252986964, + 280076732551033967, + ]), + Fq::from_montgomery_limbs([ + 13071470547050819875, + 20719442839602638, + 9223499824514905062, + 1041977639884177823, + ]), + Fq::from_montgomery_limbs([ + 1150980008515938579, + 12791886596105604965, + 11797006328775889799, + 132341159056314927, + ]), + Fq::from_montgomery_limbs([ + 16356304185985037124, + 18355100705716380177, + 1487696971024578548, + 1163163264873917501, + ]), + Fq::from_montgomery_limbs([ + 8790136689831869026, + 9859012327886066746, + 1622774421779032220, + 680128396913817531, + ]), + Fq::from_montgomery_limbs([ + 2440240671160835195, + 5639103082516719016, + 16233642885930425961, + 459387979334747122, + ]), + Fq::from_montgomery_limbs([ + 3071531689091094489, + 11779374527227589848, + 5879834474282319317, + 392743474596485606, + ]), + Fq::from_montgomery_limbs([ + 3786139316484579004, + 7465575270640816353, + 3301786867662477611, + 919080835077506714, + ]), + Fq::from_montgomery_limbs([ + 4241677901554464615, + 14852259420419314449, + 9789117952977925786, + 1276159211529108963, + ]), + Fq::from_montgomery_limbs([ + 15762815448669571633, + 7231481802108863616, + 8209538117580382786, + 894055725982675524, + ]), + Fq::from_montgomery_limbs([ + 3283548778124636488, + 17961129609378056584, + 12441299600811628613, + 709973667467565902, + ]), + Fq::from_montgomery_limbs([ + 1675404449995783699, + 17666259544497784614, + 13412804093386962519, + 434991501447979808, + ]), + Fq::from_montgomery_limbs([ + 17976226742991442453, + 14546337615752094946, + 6516407789910488272, + 1036976265682484688, + ]), + Fq::from_montgomery_limbs([ + 13972137480979054280, + 1231617287998224018, + 8770959412540690803, + 274349352586037174, + ]), + Fq::from_montgomery_limbs([ + 14183071713815614452, + 12618349549865293619, + 4916959733988057866, + 228836586859139895, + ]), + Fq::from_montgomery_limbs([ + 2619860170191204767, + 6934658348682381942, + 445022332707100685, + 525184674849718520, + ]), + Fq::from_montgomery_limbs([ + 10672109165350813992, + 13411227948301334538, + 7449776000632083055, + 11625548609868921, + ]), + Fq::from_montgomery_limbs([ + 6408656838496226261, + 10947889213454603074, + 15967755490758556438, + 18592735561502547, + ]), + Fq::from_montgomery_limbs([ + 5719054350460464154, + 7527902657216442354, + 5295945207916573176, + 1277891579319310511, + ]), + Fq::from_montgomery_limbs([ + 7105816865111098866, + 4412124756024705272, + 4327040274749466413, + 598090016113808041, + ]), + Fq::from_montgomery_limbs([ + 14284938317479677602, + 545805528309510796, + 102974980360120576, + 899208167330224593, + ]), + Fq::from_montgomery_limbs([ + 5366620062124263126, + 13693679210134795513, + 8256935418799663781, + 300801001668016020, + ]), + Fq::from_montgomery_limbs([ + 16666288670655775443, + 14215432659130173847, + 10678349345487712045, + 253025966523940173, + ]), + Fq::from_montgomery_limbs([ + 6560188020165350685, + 12696821494974958005, + 2143653898969513475, + 494844631437184679, + ]), + Fq::from_montgomery_limbs([ + 13593887229322257028, + 4816959067341413725, + 11133022091159268235, + 612414996504397371, + ]), + Fq::from_montgomery_limbs([ + 4493136462766479434, + 9962442648546643845, + 10853590841986868899, + 915809217863755522, + ]), + Fq::from_montgomery_limbs([ + 5214032566506119292, + 11323013569723200047, + 18236741420002046410, + 941445927442235049, + ]), + Fq::from_montgomery_limbs([ + 6205769808699672756, + 10246354759179081834, + 15794825809172864679, + 391230400284939041, + ]), + Fq::from_montgomery_limbs([ + 10116008430714875822, + 9911045248650761841, + 9928250721052258527, + 1185128099055962746, + ]), + Fq::from_montgomery_limbs([ + 2754748402734001689, + 17481760215560470485, + 11108275517987128040, + 348615537989168903, + ]), + Fq::from_montgomery_limbs([ + 13782224526187933341, + 17030959399708586099, + 15775077522611833532, + 290351976048235673, + ]), + Fq::from_montgomery_limbs([ + 4412648891557328130, + 11831420266571130198, + 9622609839094253285, + 639422212319659804, + ]), + Fq::from_montgomery_limbs([ + 8394758426176289938, + 11674917207711491310, + 7857067218925827640, + 1264271461076358629, + ]), + Fq::from_montgomery_limbs([ + 10524729381187531101, + 6565819519130692503, + 16455243200834114571, + 1113660583135941246, + ]), + Fq::from_montgomery_limbs([ + 4910640324547367503, + 7067950532806399572, + 15713931663221284957, + 678204411073496593, + ]), + Fq::from_montgomery_limbs([ + 17524781941219231334, + 14436265047853993106, + 10996160202266791558, + 586004270078950889, + ]), + Fq::from_montgomery_limbs([ + 14088867458599093720, + 2106970093596697979, + 12220921713367378788, + 618714343685517328, + ]), + Fq::from_montgomery_limbs([ + 13932309166033056776, + 14069500197080883428, + 17852601968294832436, + 305995160171313882, + ]), + Fq::from_montgomery_limbs([ + 13426729481828305095, + 7452289540294927985, + 6441597690310943218, + 1276798385624416753, + ]), + Fq::from_montgomery_limbs([ + 15655620409673762414, + 3933061560128724680, + 5010270981571820124, + 220150600325447216, + ]), + Fq::from_montgomery_limbs([ + 1057266741773269348, + 17485469765347279593, + 9555353042208049027, + 1246738101059957518, + ]), + Fq::from_montgomery_limbs([ + 10770884181623310580, + 8877029614675920762, + 13991352514348114517, + 1230612668702201686, + ]), + Fq::from_montgomery_limbs([ + 15095255137495972889, + 10892244248329151219, + 11620083234647182892, + 868324939988635652, + ]), + Fq::from_montgomery_limbs([ + 16875353652867044098, + 11044339467067704334, + 4725495506316385244, + 751264243578502741, + ]), + Fq::from_montgomery_limbs([ + 641704525978654163, + 17754251290783679148, + 14269956822024939667, + 156185085842124354, + ]), + Fq::from_montgomery_limbs([ + 6461798206210941852, + 6476027702683698308, + 1734931238850329993, + 290399632377126477, + ]), + Fq::from_montgomery_limbs([ + 8091575218940757791, + 5709045878190771843, + 1459237052414398801, + 276967051734326786, + ]), + Fq::from_montgomery_limbs([ + 11612189501971032754, + 8427470897363557012, + 8611179978421665778, + 759746899153341383, + ]), + Fq::from_montgomery_limbs([ + 6954134997737035694, + 10268732943041819889, + 14604130092481798797, + 846640249172985022, + ]), + Fq::from_montgomery_limbs([ + 7190233069227170594, + 5561401768913144101, + 1445785661167706223, + 651525665098162949, + ]), + Fq::from_montgomery_limbs([ + 9217546346311075388, + 11071132921926268863, + 15917748726189064849, + 1251775227051161244, + ]), + Fq::from_montgomery_limbs([ + 10390884162889041261, + 16176571899127336650, + 10615791626897231355, + 642115614053282820, + ]), + Fq::from_montgomery_limbs([ + 17238403316934198029, + 13759340588486548936, + 6092125402785041680, + 230724379449110850, + ]), + Fq::from_montgomery_limbs([ + 1508952168622687260, + 8480288040262420498, + 1917577574060388838, + 1254153906405997789, + ]), + Fq::from_montgomery_limbs([ + 13254932503780193579, + 12662991171495849740, + 2932469488008999350, + 1254958848016626489, + ]), + Fq::from_montgomery_limbs([ + 863236748932298852, + 7531642076948568445, + 10425812845553160509, + 563371573575694666, + ]), + Fq::from_montgomery_limbs([ + 3280480068018390373, + 10989862717157633913, + 16572854018482057186, + 113384026788145572, + ]), + Fq::from_montgomery_limbs([ + 11491036808249350882, + 3627925597439189593, + 785824861964165853, + 215791427072358220, + ]), + Fq::from_montgomery_limbs([ + 7066074229281293800, + 13321822906632769865, + 3996439965503887948, + 1564366489909582, + ]), + Fq::from_montgomery_limbs([ + 7382263529174205793, + 14901486809768854424, + 3687940160755015064, + 91446740043994899, + ]), + Fq::from_montgomery_limbs([ + 11979694890244940318, + 2563830158714032427, + 9819921513414604825, + 870663742752411934, + ]), + Fq::from_montgomery_limbs([ + 1600021421033761986, + 8201138969411280812, + 17030652845294033608, + 12175051723204743, + ]), + Fq::from_montgomery_limbs([ + 1850310843394039419, + 1954532768801601911, + 9226966238277907828, + 1236975459555124690, + ]), + Fq::from_montgomery_limbs([ + 16345060141053822550, + 2663786082800954949, + 9784580111187431074, + 818513014765649539, + ]), + Fq::from_montgomery_limbs([ + 16446391408112544104, + 9380932902331254953, + 7071379728384813096, + 646895171875290856, + ]), + Fq::from_montgomery_limbs([ + 2378405837694151935, + 13313303748778516106, + 5453795007116110093, + 1101728113109054876, + ]), + Fq::from_montgomery_limbs([ + 11103307651772077753, + 12554518811578576783, + 12962391676951625000, + 52064702946163453, + ]), + Fq::from_montgomery_limbs([ + 7926549255154919159, + 12556509793741807839, + 8290515496020439025, + 258653521926883600, + ]), + Fq::from_montgomery_limbs([ + 307299355354566495, + 17945732282126444629, + 5433370265316074894, + 460536024110656568, + ]), + Fq::from_montgomery_limbs([ + 5763861568912805530, + 17141796164103068870, + 2848893594009159478, + 1261756298628549918, + ]), + Fq::from_montgomery_limbs([ + 3229487655955554305, + 14944270980978379931, + 9844844119202542915, + 234743086760476866, + ]), + Fq::from_montgomery_limbs([ + 2342004844464551443, + 1279967885187315863, + 373313457964011347, + 1079422596885440278, + ]), + Fq::from_montgomery_limbs([ + 1952007392466585094, + 11762818037481718593, + 16662923564394512208, + 893001431908838762, + ]), + Fq::from_montgomery_limbs([ + 106763804585413546, + 14271628963442624240, + 590027926779466412, + 57257575012574740, + ]), + Fq::from_montgomery_limbs([ + 16630768758834449311, + 422003402188528512, + 12098463822102798962, + 159137531863727176, + ]), + Fq::from_montgomery_limbs([ + 15534331691675530779, + 7061806693665915536, + 16952361759388884403, + 1053244934847428200, + ]), + Fq::from_montgomery_limbs([ + 9263591902583432602, + 7558693853599155266, + 14896692490740080749, + 1313322134212571400, + ]), + Fq::from_montgomery_limbs([ + 15314480314637379126, + 1151647617314553881, + 17769711940094483975, + 1199725079245274287, + ]), + Fq::from_montgomery_limbs([ + 7963766923607262431, + 12935141255115233618, + 12948228604583141176, + 360484743040385122, + ]), + Fq::from_montgomery_limbs([ + 3259283452211432293, + 17170672158941172313, + 3570208516876138657, + 1045429527322967456, + ]), + Fq::from_montgomery_limbs([ + 1765653178452548393, + 6627965412101454655, + 12661490346413822347, + 978755993134545199, + ]), + Fq::from_montgomery_limbs([ + 142797348951966355, + 5680553790994685398, + 810985092665822303, + 289501802913912482, + ]), + Fq::from_montgomery_limbs([ + 8095554876468743411, + 9181238692547872814, + 13704917242845320718, + 866066458565737675, + ]), + Fq::from_montgomery_limbs([ + 5618373333754035477, + 16633102630691350807, + 10343904648768900571, + 949315695648845008, + ]), + Fq::from_montgomery_limbs([ + 10496943145011706036, + 10929716347158307141, + 11553769369075211708, + 1156430459068926506, + ]), + Fq::from_montgomery_limbs([ + 3889976630621922060, + 9491334042353419195, + 9943086516865463752, + 462137530016129102, + ]), + Fq::from_montgomery_limbs([ + 14851654499263418555, + 8665479737435134577, + 9236486044957348017, + 1285301549410464570, + ]), + Fq::from_montgomery_limbs([ + 7032376007033081754, + 8938792808860946217, + 3397334075607636452, + 1167008250605621029, + ]), + Fq::from_montgomery_limbs([ + 10427481727006183439, + 3824318376195666571, + 1544453519691883408, + 1045681207836001052, + ]), + Fq::from_montgomery_limbs([ + 8928604482578123459, + 13973435534214403451, + 15227973464547816988, + 1229619095421485591, + ]), + Fq::from_montgomery_limbs([ + 4131997010006110231, + 8734538168607192092, + 5033945745534142948, + 1277988214099374488, + ]), + Fq::from_montgomery_limbs([ + 7299169039441587737, + 2287517025912039400, + 5920702563974091346, + 687869072690227692, + ]), + Fq::from_montgomery_limbs([ + 6148873693348937540, + 8423800650513424718, + 13147300378355369290, + 1251696519717235960, + ]), + Fq::from_montgomery_limbs([ + 8030856695051151637, + 10312034347138903675, + 10835031793863243014, + 356820600815810125, + ]), + Fq::from_montgomery_limbs([ + 888403096248430880, + 456025372404859213, + 15679766799242003387, + 331916255940957050, + ]), + Fq::from_montgomery_limbs([ + 11302383770835780508, + 16138456171506112495, + 4451261995311188362, + 326167792976852851, + ]), + Fq::from_montgomery_limbs([ + 12620205064271173241, + 5865309702805720081, + 5860769966892734734, + 960482480478038522, + ]), + Fq::from_montgomery_limbs([ + 12917044525272992137, + 17120989425489435715, + 17218371420168852178, + 100206712207827792, + ]), + Fq::from_montgomery_limbs([ + 5324266172011654367, + 5689211424378054902, + 13406842486269119334, + 232294740918000310, + ]), + Fq::from_montgomery_limbs([ + 8539429359150556585, + 10134859336768345709, + 15233097762752119955, + 731468941704353059, + ]), + Fq::from_montgomery_limbs([ + 10594565907991339987, + 3638446029011375614, + 1076241376615234382, + 91321489252748304, + ]), + Fq::from_montgomery_limbs([ + 7150892232338862131, + 15181691199330314635, + 5084197575257990721, + 970732723520969453, + ]), + Fq::from_montgomery_limbs([ + 14117187289068639852, + 3124767309289558236, + 13224466604519094715, + 428140550724790451, + ]), + Fq::from_montgomery_limbs([ + 14415259957437088686, + 1795634329615314624, + 2942903263296282359, + 1012688804870889787, + ]), + Fq::from_montgomery_limbs([ + 16612890529511826604, + 7596386633939850032, + 5924746967850324505, + 65893974101627502, + ]), + Fq::from_montgomery_limbs([ + 4944775760295616420, + 17454746499425782002, + 7483609147553356481, + 669769743129713618, + ]), + Fq::from_montgomery_limbs([ + 8550535250927460379, + 14244832580975560343, + 10645153178392827451, + 166145496718571589, + ]), + Fq::from_montgomery_limbs([ + 9472382061922092532, + 12599919710080842820, + 17660755505335019341, + 951845755731906033, + ]), + Fq::from_montgomery_limbs([ + 7377011861447992951, + 14177185276539188245, + 16485545164384506751, + 69008004491455439, + ]), + Fq::from_montgomery_limbs([ + 7269422847571440384, + 10971182983165050190, + 10477114392953393609, + 529340264286832500, + ]), + Fq::from_montgomery_limbs([ + 13548253733030119113, + 18088771080273253716, + 5912265224571254564, + 960653798531692016, + ]), + Fq::from_montgomery_limbs([ + 14593305211432266861, + 13978513480108154064, + 12072035272437813296, + 238383478016939515, + ]), + Fq::from_montgomery_limbs([ + 14430090856465614687, + 2808920183931810539, + 2024298398014953733, + 368635335239145011, + ]), + Fq::from_montgomery_limbs([ + 6675901818525858406, + 9691159442966147586, + 5200040876915433586, + 1110689247130868755, + ]), + Fq::from_montgomery_limbs([ + 13172765826410278322, + 13976386792584577667, + 8689999043086184378, + 259436890611363824, + ]), + Fq::from_montgomery_limbs([ + 84751421588979831, + 14888392918538911455, + 5486551275818624189, + 951800733297191582, + ]), + Fq::from_montgomery_limbs([ + 15334319937719221770, + 11563835865217739090, + 18090033619866166811, + 678279699900803053, + ]), + Fq::from_montgomery_limbs([ + 15589602438316257145, + 1666336392544054075, + 8107996193749583854, + 23283085724274977, + ]), + Fq::from_montgomery_limbs([ + 6797724227011875266, + 11367852742974149411, + 6678291715699080418, + 92125477783429941, + ]), + Fq::from_montgomery_limbs([ + 15080983138964048420, + 537488507591658978, + 16294679657097133087, + 1191852563555895615, + ]), + Fq::from_montgomery_limbs([ + 4338903643143774627, + 11044337452245898206, + 15830174313418706999, + 31920243523174840, + ]), + Fq::from_montgomery_limbs([ + 8492021065892592922, + 7492942567998031746, + 10227910279589795050, + 947691312997138730, + ]), + Fq::from_montgomery_limbs([ + 9561116086048874539, + 18073885101683330337, + 14636134925092176090, + 722339593463585968, + ]), + Fq::from_montgomery_limbs([ + 41785100841227711, + 17666935019222315365, + 4927473313984438107, + 67884280271688399, + ]), + Fq::from_montgomery_limbs([ + 1446967628258656962, + 11243844490161767343, + 16958413638051813042, + 1004693359077776727, + ]), + Fq::from_montgomery_limbs([ + 9629608502131673092, + 2882928936333963073, + 15987483283589685207, + 660673428262656412, + ]), + Fq::from_montgomery_limbs([ + 2443606364563185491, + 10139467314740663228, + 15189229884372483835, + 1290830618469438802, + ]), + Fq::from_montgomery_limbs([ + 3046319622343455954, + 3931730478916712920, + 8623867774890709346, + 1201913658507810759, + ]), + Fq::from_montgomery_limbs([ + 14392864240168621772, + 17867735212625517017, + 2772429327165542818, + 836534298808933, + ]), + Fq::from_montgomery_limbs([ + 1151940341306701400, + 3833643241309263777, + 13096509072792897905, + 752108833686380875, + ]), + Fq::from_montgomery_limbs([ + 5229009174997575511, + 6605658491463927698, + 15536337046468055686, + 157609910170207177, + ]), + Fq::from_montgomery_limbs([ + 8741468218382317460, + 7144323380514935844, + 8672006512648752584, + 1334645244751689770, + ]), + Fq::from_montgomery_limbs([ + 10735754706394522516, + 4616532568937564832, + 15473812904469788516, + 326598703312455138, + ]), + Fq::from_montgomery_limbs([ + 13470305024595632219, + 3964162559887319987, + 4104496442465768155, + 575184728889423472, + ]), + Fq::from_montgomery_limbs([ + 7024155969680638810, + 1248446637476984159, + 3946566487106719690, + 78713827286502076, + ]), + Fq::from_montgomery_limbs([ + 1167875954574760034, + 7519910968010082415, + 15211147069856354453, + 750498091773211075, + ]), + Fq::from_montgomery_limbs([ + 2863941003802949509, + 14521430537116398940, + 17833674840165779294, + 1117243092487510999, + ]), + Fq::from_montgomery_limbs([ + 3988048134544140696, + 4164314985762153852, + 5192160405207219362, + 537616833580442108, + ]), + Fq::from_montgomery_limbs([ + 11691596547822673173, + 2072119953696732776, + 6048298284479353132, + 1041936268987727800, + ]), + Fq::from_montgomery_limbs([ + 5195217310941133128, + 983742991580727110, + 15582341176749546934, + 192949243806351219, + ]), + Fq::from_montgomery_limbs([ + 989864604993544245, + 10337084476006024351, + 6399045939932107087, + 349553169959482485, + ]), + Fq::from_montgomery_limbs([ + 1083252708106498385, + 14683159496360594363, + 6249116681658609726, + 965679621626703084, + ]), + Fq::from_montgomery_limbs([ + 15520366118357711305, + 15455325080109246278, + 15912772926708879347, + 1181106395388318589, + ]), + Fq::from_montgomery_limbs([ + 10606086519021812869, + 8982436141916758768, + 8984252788653949566, + 94441446490162493, + ]), + Fq::from_montgomery_limbs([ + 3989193979672410706, + 14522119372119676520, + 6031184060057719655, + 876537182738173910, + ]), + Fq::from_montgomery_limbs([ + 6542858007243344725, + 10468817694619667802, + 1374963053947997860, + 281508730046968385, + ]), + Fq::from_montgomery_limbs([ + 2121254413916702881, + 11174399821186314401, + 642752851055260652, + 172419384352924756, + ]), + Fq::from_montgomery_limbs([ + 14933138168325040251, + 18073996174008481460, + 7709184193316921275, + 77928985789134259, + ]), + Fq::from_montgomery_limbs([ + 14183089598463409576, + 9599657595270154138, + 10401242555342360511, + 1031862193117340540, + ]), + Fq::from_montgomery_limbs([ + 17077860441038791206, + 6907855957939974514, + 7600347021193310054, + 225485956370582495, + ]), + Fq::from_montgomery_limbs([ + 14475416504140964933, + 6622123083135972798, + 9257366424078234840, + 1254195725521864761, + ]), + Fq::from_montgomery_limbs([ + 18280884764210583702, + 16338431925875586014, + 14128385164093913939, + 598858774608218822, + ]), + Fq::from_montgomery_limbs([ + 4251295228276607623, + 14698477834719362145, + 1576184780996848894, + 571585722355337029, + ]), + Fq::from_montgomery_limbs([ + 13272236615232894643, + 14010494529183759900, + 800023943280278947, + 298394511556555918, + ]), + Fq::from_montgomery_limbs([ + 10782700402615775164, + 14412830325727077172, + 4994923730339550224, + 1079837299050839065, + ]), + Fq::from_montgomery_limbs([ + 3621380562787996822, + 9464307808788620312, + 13909924710435794908, + 954766105382202190, + ]), + Fq::from_montgomery_limbs([ + 17420485363085974001, + 9021049394344178089, + 8712760747075739797, + 568515634248632496, + ]), + Fq::from_montgomery_limbs([ + 5631572804871766736, + 5280080317359998903, + 10662020310256217520, + 409512057651566449, + ]), + Fq::from_montgomery_limbs([ + 492276079446892838, + 2465000468485598245, + 8673960199484145367, + 1223371911459041820, + ]), + Fq::from_montgomery_limbs([ + 16206685073675005008, + 13515283938452316993, + 8657484044144188143, + 555324291337764049, + ]), + Fq::from_montgomery_limbs([ + 12258020657657344839, + 14080584073572047035, + 1786385914292976334, + 890045806750446876, + ]), + Fq::from_montgomery_limbs([ + 5437561110469019457, + 4195656535041473973, + 16642453980220687614, + 66446192393822025, + ]), + Fq::from_montgomery_limbs([ + 11378296852796405140, + 13948486972729474860, + 13814823936920393870, + 543448461574407786, + ]), + Fq::from_montgomery_limbs([ + 15861083328916660546, + 10580336230427962464, + 8314263211374088393, + 462499203598507289, + ]), + Fq::from_montgomery_limbs([ + 3596880637235637430, + 7244702719747713366, + 7698652078859897602, + 339166837713921764, + ]), + Fq::from_montgomery_limbs([ + 16434053565692243270, + 856826524108649327, + 582888221769745389, + 231849743296221718, + ]), + Fq::from_montgomery_limbs([ + 13466829214638063330, + 11871004193533817602, + 8715083865527535935, + 772758187739256383, + ]), + Fq::from_montgomery_limbs([ + 2215715304482300708, + 6939601967594674311, + 9762471006918361079, + 751422865267861919, + ]), + Fq::from_montgomery_limbs([ + 8660358354344868439, + 10887567579928131536, + 4636772766460938216, + 875861572717087557, + ]), + Fq::from_montgomery_limbs([ + 3718962475606244056, + 3574286178071706662, + 13969021013516480159, + 674248673994385489, + ]), + Fq::from_montgomery_limbs([ + 13879628242113969355, + 15611868744516972804, + 689523972787487196, + 272170949885373985, + ]), + Fq::from_montgomery_limbs([ + 731217591867043834, + 12057204063676562058, + 9968800370062020379, + 54367310812503073, + ]), + Fq::from_montgomery_limbs([ + 10847577089461485884, + 14781720798335935361, + 2050883758009058177, + 1227443941313558442, + ]), + Fq::from_montgomery_limbs([ + 15484525416052326375, + 10433705807314230036, + 15903522838889990919, + 544585322945419235, + ]), + Fq::from_montgomery_limbs([ + 5074309280962037193, + 5217880605983656639, + 14510200362648483018, + 557494968888174908, + ]), + Fq::from_montgomery_limbs([ + 5195138641573043477, + 9406776113353168661, + 14027024671301857164, + 845631148216790994, + ]), + Fq::from_montgomery_limbs([ + 17960866561088745173, + 7239612137411824399, + 608332955631666951, + 1339588249269723610, + ]), + Fq::from_montgomery_limbs([ + 6645023811265252448, + 359090506368957415, + 13186732800236585001, + 636175819244839498, + ]), + Fq::from_montgomery_limbs([ + 9658258475735190727, + 14527591238813797995, + 16927575748315332307, + 1301180113169078950, + ]), + Fq::from_montgomery_limbs([ + 2426687195330334614, + 1677243348703957868, + 280959539850383222, + 1302367371047198015, + ]), + Fq::from_montgomery_limbs([ + 2824388857182280398, + 387310680804206136, + 5259604914427521138, + 1184806076664523237, + ]), + Fq::from_montgomery_limbs([ + 7574972296183053595, + 15822886777846030642, + 12388539958981301194, + 559152516777131559, + ]), + Fq::from_montgomery_limbs([ + 12201036799149233249, + 17892988483166995904, + 18084947728796372356, + 675956869171241463, + ]), + Fq::from_montgomery_limbs([ + 16104554650380896914, + 4746900513825001701, + 6829416706759018904, + 220904217190207835, + ]), + Fq::from_montgomery_limbs([ + 17292549212841163737, + 2352946917715655598, + 10473544622578247206, + 331414403574303893, + ]), + Fq::from_montgomery_limbs([ + 11411751507285114977, + 6456131281833042189, + 9429033659401855692, + 1204457583147690703, + ]), + Fq::from_montgomery_limbs([ + 13351228652344837450, + 3406524763947142470, + 9081889404473741581, + 940424223754317289, + ]), + Fq::from_montgomery_limbs([ + 14630628062553504316, + 6262447828497056896, + 18085717084217406803, + 799246626583428302, + ]), + Fq::from_montgomery_limbs([ + 864375154255180873, + 14000240309598220542, + 1750007932942661463, + 761312485749733723, + ]), + Fq::from_montgomery_limbs([ + 14345179008259546406, + 6736994392830783692, + 5908556958000542218, + 1253865209554350406, + ]), + Fq::from_montgomery_limbs([ + 9764377369274365673, + 9072647876947127557, + 2341472943201056441, + 929216282518283791, + ]), + Fq::from_montgomery_limbs([ + 12859964114531846483, + 13694745246472282132, + 2013500954373579911, + 751364861274622110, + ]), + Fq::from_montgomery_limbs([ + 175177818989840916, + 4770111355878906194, + 12267383210154126463, + 131920286091241797, + ]), + Fq::from_montgomery_limbs([ + 6349104885803077585, + 18001260594929500797, + 14793230544956264458, + 669871090964351917, + ]), + Fq::from_montgomery_limbs([ + 1792126764165083108, + 6081987124440657035, + 5531241762790015809, + 85100796395211080, + ]), + Fq::from_montgomery_limbs([ + 11335525023979482372, + 13822295879245716952, + 777769361600630976, + 852248906668581924, + ]), + Fq::from_montgomery_limbs([ + 2057611721707481944, + 12549766028751733826, + 3184617081367493745, + 17035887437619700, + ]), + Fq::from_montgomery_limbs([ + 5033510300536938046, + 14319156262351107248, + 14453339555250931608, + 1300088399042594667, + ]), + Fq::from_montgomery_limbs([ + 586365878943401533, + 10219333061949038245, + 7972787616665459187, + 1180682599170166362, + ]), + Fq::from_montgomery_limbs([ + 8677310049713074877, + 6209659062870853276, + 6361763165884296788, + 1086786531947345096, + ]), + Fq::from_montgomery_limbs([ + 4779669491370037827, + 13794675476884129106, + 2856260482144566523, + 815058410432730978, + ]), + Fq::from_montgomery_limbs([ + 8349785262387520653, + 14703604045323517453, + 10665488643511503896, + 1190736588532344714, + ]), + Fq::from_montgomery_limbs([ + 9753136258891648437, + 7592309943578822500, + 18234430885873993524, + 946608033429176051, + ]), + Fq::from_montgomery_limbs([ + 8862120093151408513, + 9919781382246740055, + 1639967479777957120, + 548895009658598348, + ]), + Fq::from_montgomery_limbs([ + 13150047014556861649, + 9895352886349978940, + 607603433543469096, + 825078058460205935, + ]), + Fq::from_montgomery_limbs([ + 10677514517763000310, + 1869057220976501750, + 7668490026500068131, + 645375934459787109, + ]), + Fq::from_montgomery_limbs([ + 8393901821323241932, + 7155803376644055598, + 5465256629438666110, + 467809976924970962, + ]), + Fq::from_montgomery_limbs([ + 8008789779293081850, + 17333068400582244417, + 864473515802821379, + 712131972755422562, + ]), + Fq::from_montgomery_limbs([ + 5260641048740129119, + 11495506189219575805, + 1976170684554961654, + 583558279245420304, + ]), + Fq::from_montgomery_limbs([ + 10607922137491563126, + 16997507064637422660, + 16243052688991164520, + 620318480202596319, + ]), + Fq::from_montgomery_limbs([ + 8682850641454705537, + 4234371891064954414, + 11030571520428482979, + 775687601614273649, + ]), + Fq::from_montgomery_limbs([ + 12248979915462901096, + 1794636648127247975, + 16388845185353268388, + 1257257804440120883, + ]), + Fq::from_montgomery_limbs([ + 17181365213230240819, + 3933917789297525218, + 774796165591114183, + 628159510187755171, + ]), + Fq::from_montgomery_limbs([ + 9201407700189177387, + 14700424513123193347, + 18288661468232834482, + 407382537568434540, + ]), + Fq::from_montgomery_limbs([ + 11966891449526246216, + 6846368159746727324, + 5421814018651935761, + 1007837491484494646, + ]), + Fq::from_montgomery_limbs([ + 3054672449338249840, + 772010416012553897, + 804919836093674272, + 60934971449786311, + ]), + Fq::from_montgomery_limbs([ + 3349955854192164124, + 12023516821995660430, + 14073054570207692346, + 391152224081538807, + ]), + Fq::from_montgomery_limbs([ + 4393818606630194054, + 11894249453630174803, + 11407464681452601419, + 527342257675756743, + ]), + Fq::from_montgomery_limbs([ + 593191207061949875, + 394301333075100218, + 15992303837511873397, + 1258463696198082538, + ]), + Fq::from_montgomery_limbs([ + 7392815618978882544, + 8600193649781721343, + 10001082189003162790, + 160465744058402439, + ]), + Fq::from_montgomery_limbs([ + 5982722207731997556, + 9327097271719907983, + 16837081471143367937, + 1323283752393867441, + ]), + Fq::from_montgomery_limbs([ + 15234580594321690160, + 14480758270368693259, + 7897576353120019799, + 1211836381357568240, + ]), + Fq::from_montgomery_limbs([ + 17534396175019205578, + 3323788238042131357, + 16622036826489890791, + 893487708746761741, + ]), + Fq::from_montgomery_limbs([ + 3851834168141787069, + 11582510337408899680, + 15343784808633432566, + 461896544402216282, + ]), + Fq::from_montgomery_limbs([ + 1182215324455482337, + 1943242735522063011, + 4144863718139895080, + 243576649285589719, + ]), + ]), + mds: MdsMatrix::new_from_known([ + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + ]), + alpha: Alpha::Exponent(17), + rounds: RoundNumbers { r_P: 31, r_F: 8 }, + optimized_mds: OptimizedMdsMatrices { + M_hat: SquareMatrix::<6, 36>::new_from_known([ + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + ]), + v: Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + ]), + w: Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + ]), + M_prime: SquareMatrix::<7, 49>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + ]), + M_doubleprime: SquareMatrix::<7, 49>::new_from_known([ + Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 6933713838801944433, + 16845582094611513195, + 18106981831632269118, + 1315719765541495999, + ]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11025937787709817432, + 2848215840891863663, + 12003429085947921194, + 123169188111155826, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12625372430371999830, + 16677955247940128803, + 7323211740492754581, + 634092645821649835, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8476375831616065903, + 8302751278140753414, + 4675397025515049474, + 916054888187664134, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10397071512469717592, + 5168805500057287779, + 15231087545157212262, + 795647437775574917, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4753644871978862709, + 5862282760667146308, + 12460694012157225697, + 599558919665641703, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + ]), + M_inverse: SquareMatrix::<7, 49>::new_from_known([ + Fq::from_montgomery_limbs([ + 18289540298934006401, + 12620611207485559719, + 12496121289749056322, + 817144512748384706, + ]), + Fq::from_montgomery_limbs([ + 15589773063064153532, + 10937873166103048610, + 6318262381745988044, + 164305025615087669, + ]), + Fq::from_montgomery_limbs([ + 15945838893269705074, + 12231655940729207770, + 16783976632846575746, + 1109102887521365908, + ]), + Fq::from_montgomery_limbs([ + 6834634673379885361, + 14313980702431346769, + 11799433102834887335, + 414159939376644417, + ]), + Fq::from_montgomery_limbs([ + 6202864031195801806, + 9008291636618939950, + 4452886644180013898, + 834656796167786155, + ]), + Fq::from_montgomery_limbs([ + 257831097013115576, + 868816813650478155, + 3804928554730106375, + 37318070574597666, + ]), + Fq::from_montgomery_limbs([ + 12731957617084167734, + 10385122202334236509, + 6304526407551965622, + 473830859466044865, + ]), + Fq::from_montgomery_limbs([ + 15589773063064153532, + 10937873166103048610, + 6318262381745988044, + 164305025615087669, + ]), + Fq::from_montgomery_limbs([ + 6846034351900465196, + 14922456655897598264, + 3385387262061980880, + 41120221023296058, + ]), + Fq::from_montgomery_limbs([ + 15382748348274919943, + 17176897444608801178, + 9672737639142736111, + 667324299238078128, + ]), + Fq::from_montgomery_limbs([ + 15347282079877344563, + 7118861760574925591, + 14639960435031189354, + 496118406637979928, + ]), + Fq::from_montgomery_limbs([ + 10633984218986397485, + 1476776383719121929, + 18242946201412975574, + 235737836971566080, + ]), + Fq::from_montgomery_limbs([ + 13255078662550912877, + 6201099884138924934, + 16598544366614787861, + 517978551803961280, + ]), + Fq::from_montgomery_limbs([ + 16511322183643786520, + 12899213679171041629, + 10327663219981717303, + 101291905845336522, + ]), + Fq::from_montgomery_limbs([ + 15945838893269705074, + 12231655940729207770, + 16783976632846575746, + 1109102887521365908, + ]), + Fq::from_montgomery_limbs([ + 15382748348274919943, + 17176897444608801178, + 9672737639142736111, + 667324299238078128, + ]), + Fq::from_montgomery_limbs([ + 14205197080554911234, + 18284593956791143607, + 9307844449907611885, + 840522240017846486, + ]), + Fq::from_montgomery_limbs([ + 15159258319784243147, + 14082599260628033239, + 6774164385877933413, + 747982014981801174, + ]), + Fq::from_montgomery_limbs([ + 1720795814776594401, + 1331741422739941001, + 1433030060135444919, + 661580976464017359, + ]), + Fq::from_montgomery_limbs([ + 18293763308414053579, + 18299155137503640753, + 10462936480575081846, + 453983746301356936, + ]), + Fq::from_montgomery_limbs([ + 4581286503082050232, + 12284808854596259078, + 3289926894666988909, + 902128282614826112, + ]), + Fq::from_montgomery_limbs([ + 6834634673379885361, + 14313980702431346769, + 11799433102834887335, + 414159939376644417, + ]), + Fq::from_montgomery_limbs([ + 15347282079877344563, + 7118861760574925591, + 14639960435031189354, + 496118406637979928, + ]), + Fq::from_montgomery_limbs([ + 15159258319784243147, + 14082599260628033239, + 6774164385877933413, + 747982014981801174, + ]), + Fq::from_montgomery_limbs([ + 8459024031946559011, + 9756324734815253725, + 14081981857002652443, + 1295411099915753127, + ]), + Fq::from_montgomery_limbs([ + 12916186197107076085, + 5935794698380416041, + 14163718741243160273, + 1284207706380505486, + ]), + Fq::from_montgomery_limbs([ + 18200592249652917081, + 10952824854756428652, + 13221851894140961386, + 952100497899551398, + ]), + Fq::from_montgomery_limbs([ + 7909306592215715661, + 12372000920976206381, + 13047646210570006173, + 1134258014683902124, + ]), + Fq::from_montgomery_limbs([ + 6202864031195801806, + 9008291636618939950, + 4452886644180013898, + 834656796167786155, + ]), + Fq::from_montgomery_limbs([ + 10633984218986397485, + 1476776383719121929, + 18242946201412975574, + 235737836971566080, + ]), + Fq::from_montgomery_limbs([ + 1720795814776594401, + 1331741422739941001, + 1433030060135444919, + 661580976464017359, + ]), + Fq::from_montgomery_limbs([ + 12916186197107076085, + 5935794698380416041, + 14163718741243160273, + 1284207706380505486, + ]), + Fq::from_montgomery_limbs([ + 3910809514494604292, + 8483245271389311552, + 16246267851842217096, + 18865255698597878, + ]), + Fq::from_montgomery_limbs([ + 3026843501192760993, + 8380473052143493977, + 3054950936628239486, + 722212886196682246, + ]), + Fq::from_montgomery_limbs([ + 17640176946983601983, + 7851638753013976420, + 7953773760774643320, + 1060395049618029567, + ]), + Fq::from_montgomery_limbs([ + 257831097013115576, + 868816813650478155, + 3804928554730106375, + 37318070574597666, + ]), + Fq::from_montgomery_limbs([ + 13255078662550912877, + 6201099884138924934, + 16598544366614787861, + 517978551803961280, + ]), + Fq::from_montgomery_limbs([ + 18293763308414053579, + 18299155137503640753, + 10462936480575081846, + 453983746301356936, + ]), + Fq::from_montgomery_limbs([ + 18200592249652917081, + 10952824854756428652, + 13221851894140961386, + 952100497899551398, + ]), + Fq::from_montgomery_limbs([ + 3026843501192760993, + 8380473052143493977, + 3054950936628239486, + 722212886196682246, + ]), + Fq::from_montgomery_limbs([ + 6947786146630418877, + 15369056627168554704, + 17602917142112233480, + 860079864989181067, + ]), + Fq::from_montgomery_limbs([ + 12292153329582579311, + 12340018229585837748, + 16138005556776207249, + 689763430924300574, + ]), + Fq::from_montgomery_limbs([ + 12731957617084167734, + 10385122202334236509, + 6304526407551965622, + 473830859466044865, + ]), + Fq::from_montgomery_limbs([ + 16511322183643786520, + 12899213679171041629, + 10327663219981717303, + 101291905845336522, + ]), + Fq::from_montgomery_limbs([ + 4581286503082050232, + 12284808854596259078, + 3289926894666988909, + 902128282614826112, + ]), + Fq::from_montgomery_limbs([ + 7909306592215715661, + 12372000920976206381, + 13047646210570006173, + 1134258014683902124, + ]), + Fq::from_montgomery_limbs([ + 17640176946983601983, + 7851638753013976420, + 7953773760774643320, + 1060395049618029567, + ]), + Fq::from_montgomery_limbs([ + 12292153329582579311, + 12340018229585837748, + 16138005556776207249, + 689763430924300574, + ]), + Fq::from_montgomery_limbs([ + 11306146037240305765, + 10984198068608188499, + 1191708097986331420, + 836519420285054905, + ]), + ]), + M_hat_inverse: SquareMatrix::<6, 36>::new_from_known([ + Fq::from_montgomery_limbs([ + 3792453098216396897, + 12628553005522469477, + 16642002769880465331, + 421042619293543187, + ]), + Fq::from_montgomery_limbs([ + 10263844291975416107, + 13672341457628810763, + 12509513995609872959, + 205381282018859586, + ]), + Fq::from_montgomery_limbs([ + 10784713721876928946, + 5674574537437802090, + 12687938002553184071, + 136316472684139419, + ]), + Fq::from_montgomery_limbs([ + 16070813810583366554, + 1956961633890359529, + 13965208031005279836, + 927951972604280320, + ]), + Fq::from_montgomery_limbs([ + 6738933144333850617, + 6100304390614169754, + 1210061970152249951, + 909818292837236776, + ]), + Fq::from_montgomery_limbs([ + 9669791352790763084, + 10325954078533278386, + 9503492366281944368, + 1040674818174287413, + ]), + Fq::from_montgomery_limbs([ + 10263844291975416107, + 13672341457628810763, + 12509513995609872959, + 205381282018859586, + ]), + Fq::from_montgomery_limbs([ + 6412844366295084778, + 7666866282335076917, + 1998128405856404681, + 74724070388243614, + ]), + Fq::from_montgomery_limbs([ + 2820801561543625657, + 2418377097726488830, + 6026234412050937676, + 1126089764215992130, + ]), + Fq::from_montgomery_limbs([ + 8551209674866173640, + 6260366140671248954, + 12081978629156052449, + 1140556338048141522, + ]), + Fq::from_montgomery_limbs([ + 3127468548134575066, + 584585047777214689, + 7762916153904627652, + 166598529350882438, + ]), + Fq::from_montgomery_limbs([ + 7594054111820467981, + 8571015412052249811, + 6107608647809765519, + 1023873926642050928, + ]), + Fq::from_montgomery_limbs([ + 10784713721876928946, + 5674574537437802090, + 12687938002553184071, + 136316472684139419, + ]), + Fq::from_montgomery_limbs([ + 2820801561543625657, + 2418377097726488830, + 6026234412050937676, + 1126089764215992130, + ]), + Fq::from_montgomery_limbs([ + 10427240268737712782, + 8508693586717179156, + 9391845005515956255, + 937208025112203554, + ]), + Fq::from_montgomery_limbs([ + 8182900134894401237, + 12638356435589207249, + 2514008238224928511, + 262393601667707271, + ]), + Fq::from_montgomery_limbs([ + 9827417092260447852, + 9328415136733098350, + 7749975888478067278, + 1296132886589595648, + ]), + Fq::from_montgomery_limbs([ + 16287831069372846812, + 12117020194152290696, + 2582012005292236373, + 964219332138367410, + ]), + Fq::from_montgomery_limbs([ + 16070813810583366554, + 1956961633890359529, + 13965208031005279836, + 927951972604280320, + ]), + Fq::from_montgomery_limbs([ + 8551209674866173640, + 6260366140671248954, + 12081978629156052449, + 1140556338048141522, + ]), + Fq::from_montgomery_limbs([ + 8182900134894401237, + 12638356435589207249, + 2514008238224928511, + 262393601667707271, + ]), + Fq::from_montgomery_limbs([ + 2689211423437640460, + 9937738931024806642, + 16752771701136165272, + 1203240695252068537, + ]), + Fq::from_montgomery_limbs([ + 4340203757804311965, + 12676662818122060527, + 8325672080044279362, + 1087811919015138569, + ]), + Fq::from_montgomery_limbs([ + 14389282186921406518, + 13071685447061354484, + 9323961789214815202, + 798867032561203873, + ]), + Fq::from_montgomery_limbs([ + 6738933144333850617, + 6100304390614169754, + 1210061970152249951, + 909818292837236776, + ]), + Fq::from_montgomery_limbs([ + 3127468548134575066, + 584585047777214689, + 7762916153904627652, + 166598529350882438, + ]), + Fq::from_montgomery_limbs([ + 9827417092260447852, + 9328415136733098350, + 7749975888478067278, + 1296132886589595648, + ]), + Fq::from_montgomery_limbs([ + 4340203757804311965, + 12676662818122060527, + 8325672080044279362, + 1087811919015138569, + ]), + Fq::from_montgomery_limbs([ + 16937615735900532927, + 2828202157217662325, + 11653172729566405164, + 102608297022837914, + ]), + Fq::from_montgomery_limbs([ + 10698441721372329435, + 14189560518339287134, + 16709548602960206315, + 1115736315296030670, + ]), + Fq::from_montgomery_limbs([ + 9669791352790763084, + 10325954078533278386, + 9503492366281944368, + 1040674818174287413, + ]), + Fq::from_montgomery_limbs([ + 7594054111820467981, + 8571015412052249811, + 6107608647809765519, + 1023873926642050928, + ]), + Fq::from_montgomery_limbs([ + 16287831069372846812, + 12117020194152290696, + 2582012005292236373, + 964219332138367410, + ]), + Fq::from_montgomery_limbs([ + 14389282186921406518, + 13071685447061354484, + 9323961789214815202, + 798867032561203873, + ]), + Fq::from_montgomery_limbs([ + 10698441721372329435, + 14189560518339287134, + 16709548602960206315, + 1115736315296030670, + ]), + Fq::from_montgomery_limbs([ + 4200873270792393235, + 10250359348562610182, + 13119023895300261973, + 870734268521497409, + ]), + ]), + M_00: Fq::from_montgomery_limbs([ + 14878706952858838161, + 15410104227655356999, + 17393275270132988194, + 905602962502284432, + ]), + M_i: Matrix::<7, 7, 49>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3417057834288542701, + 14660334709638275173, + 15697961235617927687, + 541283478161011852, + ]), + Fq::from_montgomery_limbs([ + 7015809488978334700, + 16756137731097346041, + 4299145747412822878, + 425771021418967410, + ]), + Fq::from_montgomery_limbs([ + 11403455157288865564, + 17867822347283350530, + 6642326758447081407, + 347793598737965121, + ]), + Fq::from_montgomery_limbs([ + 3281498772575130056, + 15793155797823121930, + 13825210503534495803, + 403937498710078315, + ]), + Fq::from_montgomery_limbs([ + 14433853750795786283, + 6064690325535561885, + 8568546552249237512, + 321732587903564709, + ]), + Fq::from_montgomery_limbs([ + 6678655391923876018, + 8629057843778719427, + 9842628707936041139, + 63076861057827674, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7015809488978334700, + 16756137731097346041, + 4299145747412822878, + 425771021418967410, + ]), + Fq::from_montgomery_limbs([ + 2912519858324498512, + 6507880465488943086, + 4272821136041054916, + 111743668526988613, + ]), + Fq::from_montgomery_limbs([ + 1748445869324305294, + 9551769637184621333, + 15854660035338842641, + 935843652651688174, + ]), + Fq::from_montgomery_limbs([ + 16017478920517952465, + 12052990841260496131, + 1846258033159005439, + 1283952887503997049, + ]), + Fq::from_montgomery_limbs([ + 13375753074817350454, + 1048153563921378033, + 9203345202329021202, + 240551250239901980, + ]), + Fq::from_montgomery_limbs([ + 11153565452311437343, + 15840896398791388390, + 6651106066134943770, + 1041420503258293522, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11403455157288865564, + 17867822347283350530, + 6642326758447081407, + 347793598737965121, + ]), + Fq::from_montgomery_limbs([ + 1748445869324305294, + 9551769637184621333, + 15854660035338842641, + 935843652651688174, + ]), + Fq::from_montgomery_limbs([ + 12634906865313795269, + 11036595778607414197, + 3160889789817653150, + 123157168832279614, + ]), + Fq::from_montgomery_limbs([ + 8716577469114679639, + 13354977326657221151, + 13192299021058097299, + 1294655858266660253, + ]), + Fq::from_montgomery_limbs([ + 13373336070740714862, + 8730572127209811217, + 7187749001613674585, + 593376019371200200, + ]), + Fq::from_montgomery_limbs([ + 10026036648949247362, + 12678383936758102898, + 11178426371544881076, + 1002297129682557342, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3281498772575130056, + 15793155797823121930, + 13825210503534495803, + 403937498710078315, + ]), + Fq::from_montgomery_limbs([ + 16017478920517952465, + 12052990841260496131, + 1846258033159005439, + 1283952887503997049, + ]), + Fq::from_montgomery_limbs([ + 8716577469114679639, + 13354977326657221151, + 13192299021058097299, + 1294655858266660253, + ]), + Fq::from_montgomery_limbs([ + 14690633444146561299, + 13456453518898387751, + 10432348396252513416, + 1242585437512358865, + ]), + Fq::from_montgomery_limbs([ + 14102570081274067998, + 8257296766039180005, + 7790604469177448243, + 143690956943080350, + ]), + Fq::from_montgomery_limbs([ + 8465733138989536717, + 2929735846155108951, + 4450573983160870127, + 472219173524401119, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14433853750795786283, + 6064690325535561885, + 8568546552249237512, + 321732587903564709, + ]), + Fq::from_montgomery_limbs([ + 13375753074817350454, + 1048153563921378033, + 9203345202329021202, + 240551250239901980, + ]), + Fq::from_montgomery_limbs([ + 13373336070740714862, + 8730572127209811217, + 7187749001613674585, + 593376019371200200, + ]), + Fq::from_montgomery_limbs([ + 14102570081274067998, + 8257296766039180005, + 7790604469177448243, + 143690956943080350, + ]), + Fq::from_montgomery_limbs([ + 4085032723309791110, + 4665611504008924558, + 11824165711550330487, + 578201258376880126, + ]), + Fq::from_montgomery_limbs([ + 11519276958617059096, + 13454485508887725898, + 7249926774019308728, + 1072756789797212364, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6678655391923876018, + 8629057843778719427, + 9842628707936041139, + 63076861057827674, + ]), + Fq::from_montgomery_limbs([ + 11153565452311437343, + 15840896398791388390, + 6651106066134943770, + 1041420503258293522, + ]), + Fq::from_montgomery_limbs([ + 10026036648949247362, + 12678383936758102898, + 11178426371544881076, + 1002297129682557342, + ]), + Fq::from_montgomery_limbs([ + 8465733138989536717, + 2929735846155108951, + 4450573983160870127, + 472219173524401119, + ]), + Fq::from_montgomery_limbs([ + 11519276958617059096, + 13454485508887725898, + 7249926774019308728, + 1072756789797212364, + ]), + Fq::from_montgomery_limbs([ + 8573207762665625898, + 16056334493165972918, + 10346718250214646205, + 1191123760209144883, + ]), + ]), + v_collection: [ + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 10644639721044274615, + 16734510270636734171, + 6265966780522802029, + 1180401342618465036, + ]), + Fq::from_montgomery_limbs([ + 1254097908378330934, + 13601601811345135765, + 15071243631801644424, + 297593012698954223, + ]), + Fq::from_montgomery_limbs([ + 10771062345226876930, + 7469649658028794228, + 3597902033882677100, + 608350358812428664, + ]), + Fq::from_montgomery_limbs([ + 10231075707837198839, + 11530522131003023037, + 1802721152151214035, + 1212125375706727806, + ]), + Fq::from_montgomery_limbs([ + 548206758129328348, + 778220363894850734, + 12082251172806692919, + 593860302507973656, + ]), + Fq::from_montgomery_limbs([ + 6029427183938663855, + 17136269120728144851, + 7031277897576748532, + 978052702327451285, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 14583548544607776390, + 1455594659839297233, + 7503148269133459078, + 979881557166431467, + ]), + Fq::from_montgomery_limbs([ + 4091794927241778027, + 3984934849444513902, + 4168704414264273635, + 1243153189837659840, + ]), + Fq::from_montgomery_limbs([ + 13672227389423134641, + 7889118255497550145, + 10535716868579808028, + 727851871568307361, + ]), + Fq::from_montgomery_limbs([ + 1805790605077811102, + 13328027295111756288, + 15284753467090911646, + 476755389437853977, + ]), + Fq::from_montgomery_limbs([ + 6818887996128827024, + 12980010109101424586, + 17837508282492360706, + 804695904048021645, + ]), + Fq::from_montgomery_limbs([ + 9531071905126860029, + 10560990131084904417, + 3843562488879133086, + 427342220830413508, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 12999307184917437199, + 4460278989335054240, + 8039372983916400823, + 524229825913330581, + ]), + Fq::from_montgomery_limbs([ + 13201924241923240556, + 11745564486322152121, + 2471694394944636145, + 181216534789741406, + ]), + Fq::from_montgomery_limbs([ + 4934105058811497644, + 12271038025203690017, + 7436143789682315585, + 998806416030886275, + ]), + Fq::from_montgomery_limbs([ + 13725255261959326942, + 8555513885879208558, + 955378272993441581, + 297008239472103166, + ]), + Fq::from_montgomery_limbs([ + 10371095811858205849, + 8804518571176544229, + 11002636904361592873, + 660578117299637260, + ]), + Fq::from_montgomery_limbs([ + 8307653710943752623, + 2839318436416200448, + 12213117778126871947, + 1025759164655249254, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 11863327563780294024, + 10993730767593839696, + 9502873035480842903, + 1097248076762680248, + ]), + Fq::from_montgomery_limbs([ + 6808878885915903933, + 8278632955554852373, + 12719166835729596674, + 804467256685775329, + ]), + Fq::from_montgomery_limbs([ + 16008107817056775055, + 8608502583580218397, + 2796011695423831437, + 949203486167282741, + ]), + Fq::from_montgomery_limbs([ + 9591171450453062265, + 6399710760130247553, + 16473627252289324238, + 199489766710074990, + ]), + Fq::from_montgomery_limbs([ + 2126693132859812176, + 10946771068545746672, + 16987361148217467014, + 545647818048109007, + ]), + Fq::from_montgomery_limbs([ + 11988059750093062229, + 9298754840020496938, + 15035120852882985245, + 1192754512132360647, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 8283981142206306939, + 15468588506068845291, + 14286327059693983748, + 168088448899207140, + ]), + Fq::from_montgomery_limbs([ + 10471089395398769453, + 96236653784383214, + 16648343620891915559, + 253629587649938570, + ]), + Fq::from_montgomery_limbs([ + 2122557167897006073, + 6496047148498928328, + 4866370458783575330, + 393653606927582732, + ]), + Fq::from_montgomery_limbs([ + 1613936452873278524, + 13810247455069732717, + 15313868045534267346, + 1243393042619890514, + ]), + Fq::from_montgomery_limbs([ + 15475354144715027231, + 7573523099482013249, + 12718534995660881344, + 1280011735315941795, + ]), + Fq::from_montgomery_limbs([ + 16713988261819571430, + 2839652657083011646, + 3620474509759339159, + 813365112700437390, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 5224860601737206030, + 471099951455807337, + 4240850224623809066, + 1213277143090320240, + ]), + Fq::from_montgomery_limbs([ + 8044997223262572963, + 8080347158505061529, + 3228586894312007285, + 331597882779275433, + ]), + Fq::from_montgomery_limbs([ + 1208998236383405070, + 1447425529631254332, + 8002978071615560825, + 1168296975382357177, + ]), + Fq::from_montgomery_limbs([ + 3717552334324548558, + 14379760040658949225, + 17287286958139444106, + 498156372540796351, + ]), + Fq::from_montgomery_limbs([ + 7205892599830853163, + 15212333206847125686, + 5699921803433736310, + 905915093597247729, + ]), + Fq::from_montgomery_limbs([ + 755943729919434357, + 10577236669397908241, + 14468710867857253298, + 1024324011896165462, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 8058282063231996405, + 17257430900010574484, + 2158055163476481194, + 595100858348853692, + ]), + Fq::from_montgomery_limbs([ + 15085559623482919871, + 3472078672722908583, + 4599317711792091602, + 222588611222065167, + ]), + Fq::from_montgomery_limbs([ + 15424099905499014070, + 8434797005632313353, + 8131086932997815225, + 1036565779889668097, + ]), + Fq::from_montgomery_limbs([ + 1382697922847342157, + 4665453833795528964, + 9747274806721360803, + 148779622932294522, + ]), + Fq::from_montgomery_limbs([ + 4432837085227621901, + 3625643010647482210, + 9188161200126159834, + 1031489011263833493, + ]), + Fq::from_montgomery_limbs([ + 2595560161561027549, + 10106811297951765366, + 17488308776579863485, + 206455909861435406, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 820166082021164174, + 9749064658839893621, + 2697165176777711952, + 1013643423254794247, + ]), + Fq::from_montgomery_limbs([ + 11434285783669558858, + 13584809878479701720, + 3915545683544186278, + 1023126538570256918, + ]), + Fq::from_montgomery_limbs([ + 2165364699284154689, + 12685002878895760637, + 6867136501788661212, + 674836357022179385, + ]), + Fq::from_montgomery_limbs([ + 9371284124941532260, + 7254488926567729428, + 14153148852060364975, + 563833886155167209, + ]), + Fq::from_montgomery_limbs([ + 12983913502532225115, + 10422261732254055015, + 9682741985590349706, + 1152902980215236093, + ]), + Fq::from_montgomery_limbs([ + 53453825694603265, + 7363785068269762421, + 10014136818496735189, + 418364251047633957, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 9089547361822769623, + 2614400882196504844, + 18171746873737288094, + 75978327930221735, + ]), + Fq::from_montgomery_limbs([ + 16792233542280595044, + 9194009742559712662, + 16681314096151276162, + 141104854369611948, + ]), + Fq::from_montgomery_limbs([ + 14121587945665084254, + 4285652051739813435, + 908329507035055833, + 1170458112249762210, + ]), + Fq::from_montgomery_limbs([ + 17832160706398652605, + 12757316993880307572, + 17823976387828534641, + 1060884446639737566, + ]), + Fq::from_montgomery_limbs([ + 12238967831419693891, + 17285564337796726189, + 772363080009335540, + 1133022491303716360, + ]), + Fq::from_montgomery_limbs([ + 7101023699634357749, + 6639281158265807289, + 4981868997280764642, + 985691418122098087, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 11269122037409773082, + 12011421319544460999, + 1334150225599331569, + 2858146322225763, + ]), + Fq::from_montgomery_limbs([ + 9313709853509185496, + 16206428797220002184, + 13680333402027486517, + 1242753153191996216, + ]), + Fq::from_montgomery_limbs([ + 17569743508708392526, + 3142648113271106845, + 1634996132313805038, + 345389980530236831, + ]), + Fq::from_montgomery_limbs([ + 13214675085238735159, + 17546363296125310843, + 15104140193957885186, + 1009608979945975479, + ]), + Fq::from_montgomery_limbs([ + 13156206507994500002, + 15331136932468936255, + 18120353711369546595, + 212936761308279860, + ]), + Fq::from_montgomery_limbs([ + 15728832258520667556, + 2222718495126847960, + 9069363803574780412, + 1252511052567294538, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 15318220334729666071, + 10085274749271496451, + 13235713280652147722, + 745052808139004576, + ]), + Fq::from_montgomery_limbs([ + 13156235912943986954, + 5448235351584523656, + 14912753996910833259, + 1074562042912540040, + ]), + Fq::from_montgomery_limbs([ + 10973489371567110798, + 13864494226359434162, + 2551801121655091132, + 842122627627640172, + ]), + Fq::from_montgomery_limbs([ + 16434063247854180644, + 4535379715543303383, + 15837253172489347337, + 811511753879666188, + ]), + Fq::from_montgomery_limbs([ + 17168911107864577236, + 43950174469174547, + 5104860072131484949, + 973362737471998355, + ]), + Fq::from_montgomery_limbs([ + 7931655442728732623, + 2231832287024216001, + 1215678170119206083, + 809922596417314673, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 11089365147905175739, + 17689470198615435650, + 1802029570881529665, + 323182645037342266, + ]), + Fq::from_montgomery_limbs([ + 15969427871111504498, + 5489904452991350903, + 6060256254335150822, + 327519122975337122, + ]), + Fq::from_montgomery_limbs([ + 8372741465623248660, + 14241887742859321780, + 5732992227950195767, + 39295360183511289, + ]), + Fq::from_montgomery_limbs([ + 1187756953137288615, + 6353707652463699269, + 16025288734445909769, + 689723399381686930, + ]), + Fq::from_montgomery_limbs([ + 3641027043425346704, + 7529359599459005223, + 2263874390889253898, + 1174711192482135891, + ]), + Fq::from_montgomery_limbs([ + 14213602576882685129, + 1072450781726178504, + 9166004798283088170, + 288986234043895133, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 9857091378959575712, + 4700244761781549157, + 11886572911958021128, + 978573057754163783, + ]), + Fq::from_montgomery_limbs([ + 6859829417840328625, + 5380908914233546421, + 9985382358422821006, + 809479275163892841, + ]), + Fq::from_montgomery_limbs([ + 7129905675772133963, + 9947583967153283633, + 11488752011523120045, + 70770661730429235, + ]), + Fq::from_montgomery_limbs([ + 10339301687172431688, + 7034120066892139373, + 278535235730000358, + 1037618672688193269, + ]), + Fq::from_montgomery_limbs([ + 8073945182151246976, + 8024480602729778451, + 14228737842273667747, + 5601376964086932, + ]), + Fq::from_montgomery_limbs([ + 17455241286370251178, + 5877720710031178913, + 9559992722432789829, + 1325168601990716931, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 4443170007910122686, + 7353422220255768461, + 15086677032035138267, + 1000401307557218310, + ]), + Fq::from_montgomery_limbs([ + 6016899902613423969, + 17460518555665406782, + 3732816219387681456, + 602171657802810010, + ]), + Fq::from_montgomery_limbs([ + 17215551508008455197, + 14155576318076749717, + 287763472218567445, + 348594781061367360, + ]), + Fq::from_montgomery_limbs([ + 13673281300516729195, + 2214275010578136594, + 5278640382055069707, + 862836485498449760, + ]), + Fq::from_montgomery_limbs([ + 14604602086577261525, + 17331229080491881983, + 9761345074674761926, + 92431445071525752, + ]), + Fq::from_montgomery_limbs([ + 288667004247211189, + 8068558316435185759, + 34133259048288536, + 632325899262964414, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 4414532264671055849, + 13933747433746332421, + 13027565118143790352, + 1050571576397137370, + ]), + Fq::from_montgomery_limbs([ + 10778047724985809400, + 1316157346886280268, + 10174764403037871455, + 1310251685035182702, + ]), + Fq::from_montgomery_limbs([ + 2901779093000588757, + 14345292131236108270, + 325687763253834560, + 1302296993426055332, + ]), + Fq::from_montgomery_limbs([ + 10195270688246580514, + 15529132938808577668, + 16655748986619374751, + 1334926369645181743, + ]), + Fq::from_montgomery_limbs([ + 10219117138329677661, + 17968691841862978952, + 2586002244710590318, + 890496969841145620, + ]), + Fq::from_montgomery_limbs([ + 2498245601951074289, + 1598646875827827107, + 890275996690762376, + 77165559003555915, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 2988605310258792866, + 15957801327838169961, + 7584840999811153279, + 434926945147154735, + ]), + Fq::from_montgomery_limbs([ + 9597713906228190573, + 13530531350309731794, + 11006707392867763256, + 1180021669203726874, + ]), + Fq::from_montgomery_limbs([ + 3103797984913840610, + 13327065637625915613, + 7317743376243954428, + 454606898571769263, + ]), + Fq::from_montgomery_limbs([ + 13418762319452988162, + 7011698969983978549, + 10043811570622910529, + 1219725988569937648, + ]), + Fq::from_montgomery_limbs([ + 16415739938738212197, + 18000325972331813382, + 2937222969358261592, + 751420552035148970, + ]), + Fq::from_montgomery_limbs([ + 18143523461998133814, + 17501449569222234751, + 11831229978852878240, + 230065434288493720, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 390587431735370215, + 6070182885512254444, + 15678300086321846232, + 658622796995655025, + ]), + Fq::from_montgomery_limbs([ + 11187073703980753366, + 11256592440200977896, + 1503110027135689183, + 1132851611041610655, + ]), + Fq::from_montgomery_limbs([ + 13154916648506390915, + 5339482676807482888, + 7230250399862288620, + 218460204422790571, + ]), + Fq::from_montgomery_limbs([ + 9102410326146594084, + 6165251247104570609, + 17897733375690573799, + 920164771069067785, + ]), + Fq::from_montgomery_limbs([ + 17285085289295929853, + 16238198804092185825, + 16251509486414134096, + 1084909706592090544, + ]), + Fq::from_montgomery_limbs([ + 3880782017033225674, + 4873252603362867352, + 14459262730771211791, + 163174741264077656, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 4363513037339290429, + 11071402644779655945, + 18203948441237058377, + 487870628328334554, + ]), + Fq::from_montgomery_limbs([ + 9854620422114551002, + 11862250176770700568, + 874594626487585300, + 932096667364472947, + ]), + Fq::from_montgomery_limbs([ + 2172530204291601442, + 6393872278636522840, + 684019909052108375, + 180921268676761997, + ]), + Fq::from_montgomery_limbs([ + 747820584568953283, + 11441694611866320992, + 4524856196876367929, + 874564518710804172, + ]), + Fq::from_montgomery_limbs([ + 7299335342253825037, + 12867703813750147845, + 7941311700245180087, + 1108892033870182325, + ]), + Fq::from_montgomery_limbs([ + 17832410557204971163, + 4075792975869963488, + 7197135716780572438, + 152677169125496593, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 10163931248253127785, + 1981713163631115965, + 3150372916074444430, + 470994848988866265, + ]), + Fq::from_montgomery_limbs([ + 15083629881223276978, + 2015879515814390952, + 11644449746714623084, + 946361618448877426, + ]), + Fq::from_montgomery_limbs([ + 16592814677886046887, + 8039452671655169748, + 2594546365519790998, + 584104276493702607, + ]), + Fq::from_montgomery_limbs([ + 17407066489676124305, + 8656046168534251407, + 3138964226038501382, + 514356098263219093, + ]), + Fq::from_montgomery_limbs([ + 15942565322057954282, + 6097316293590202889, + 6372629697231874413, + 113242342217125329, + ]), + Fq::from_montgomery_limbs([ + 11571924722120150581, + 13912164049336724059, + 2502413236406840486, + 679604324439169221, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 11231555889522859185, + 12838308109173382219, + 14989494611471795387, + 1234334251746422128, + ]), + Fq::from_montgomery_limbs([ + 11820760137592674131, + 13233941704214912620, + 9184955620669308585, + 760535087243845704, + ]), + Fq::from_montgomery_limbs([ + 18251843258930069429, + 6913182660293023569, + 15611295871669355399, + 543202252785444658, + ]), + Fq::from_montgomery_limbs([ + 3623801569902716815, + 12012005568369974445, + 8975238911566253998, + 1306561840926137970, + ]), + Fq::from_montgomery_limbs([ + 11553511503558092125, + 12278824151250337447, + 14503589672502199303, + 1306659756102330132, + ]), + Fq::from_montgomery_limbs([ + 15708785553057654326, + 3840692890311772930, + 4102206509788468425, + 440698181344607784, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 8058055302582355971, + 5700106105541005064, + 7460926738156841111, + 462277946682165887, + ]), + Fq::from_montgomery_limbs([ + 4851568100746305461, + 6584456459134975532, + 17460185792418666468, + 793703974849869892, + ]), + Fq::from_montgomery_limbs([ + 1493013092751501655, + 6157234009848897017, + 14948235164845831294, + 1116239172277392848, + ]), + Fq::from_montgomery_limbs([ + 541291017778122597, + 4361606389405799905, + 13559255135673617904, + 164046297400629617, + ]), + Fq::from_montgomery_limbs([ + 6157883725635917010, + 7921949762718398664, + 8097426475493743176, + 285172774886131081, + ]), + Fq::from_montgomery_limbs([ + 276501516953041810, + 15996807350070926146, + 1269758076943886300, + 195784581070827446, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 4853469952320798393, + 17379711604415333498, + 11341428304819039080, + 766000305508925099, + ]), + Fq::from_montgomery_limbs([ + 1723028172270801784, + 7846165827796379646, + 4636451005692610955, + 871151940476972966, + ]), + Fq::from_montgomery_limbs([ + 6590646061221323902, + 889461654044032879, + 1505496877923673922, + 752475483640516924, + ]), + Fq::from_montgomery_limbs([ + 13045448500706444324, + 8361654882120486231, + 4205925187373381862, + 277826998934433801, + ]), + Fq::from_montgomery_limbs([ + 9675553409793389785, + 5667173122152825040, + 8083271914684780456, + 706216661468574727, + ]), + Fq::from_montgomery_limbs([ + 14266510371042388064, + 7106905440715991100, + 10411622989018615279, + 894382081849790039, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 9268336790197882301, + 12070173591607011265, + 7396189305808814103, + 6826922221427887, + ]), + Fq::from_montgomery_limbs([ + 11481176188982883772, + 15479330738046464105, + 15874300506335824, + 418080356004810461, + ]), + Fq::from_montgomery_limbs([ + 8402920895853151075, + 11319528131289558551, + 11236635718047704076, + 590562434419913557, + ]), + Fq::from_montgomery_limbs([ + 11942015297507883097, + 16315121378556649183, + 668425812435475072, + 1203236348881767128, + ]), + Fq::from_montgomery_limbs([ + 14719743395974511202, + 1514583382813202278, + 3223906165579006067, + 1338589921222659040, + ]), + Fq::from_montgomery_limbs([ + 11353873627418368002, + 17696069599691683167, + 17867255547403463352, + 256390082737611698, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 3183181278357516648, + 10539132954816790294, + 14186140147230647162, + 782128376830566716, + ]), + Fq::from_montgomery_limbs([ + 24279344590760052, + 1500125118480868266, + 1805095232159146495, + 1156936758956513949, + ]), + Fq::from_montgomery_limbs([ + 10537024754772614474, + 3289834431146907946, + 204955315838625775, + 635285322161689619, + ]), + Fq::from_montgomery_limbs([ + 10063527467101509243, + 6065807056365479935, + 17027546583602504025, + 991768228369353932, + ]), + Fq::from_montgomery_limbs([ + 10809287584503006407, + 1968797130899798907, + 15335034484681843481, + 581199600450356946, + ]), + Fq::from_montgomery_limbs([ + 5342411348500260963, + 6851928330103451454, + 17931963062212165213, + 1333165923948214303, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 5362873004958210141, + 4780911804231906429, + 491658981443450273, + 865870945658130370, + ]), + Fq::from_montgomery_limbs([ + 16170855628896579013, + 16924415594421177943, + 18099375624011254510, + 1172947874675982311, + ]), + Fq::from_montgomery_limbs([ + 2313253813846593553, + 6024058999881721714, + 3460494784065903603, + 200192466049298184, + ]), + Fq::from_montgomery_limbs([ + 16495862644170305555, + 1027481903728649974, + 18424464377133050050, + 286370147149132790, + ]), + Fq::from_montgomery_limbs([ + 10500420552294712757, + 1190864375567816587, + 7753792083623713506, + 527733109368565721, + ]), + Fq::from_montgomery_limbs([ + 14443372038206196537, + 7620145268069197030, + 14646532763986835342, + 456340242357593922, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 9232251606394270216, + 14408677736204106911, + 13271324872968281, + 759107595695446407, + ]), + Fq::from_montgomery_limbs([ + 17249519010359595711, + 3324593693860748091, + 17110518692688522506, + 1222951351162422358, + ]), + Fq::from_montgomery_limbs([ + 18126276283902025445, + 4360757737312030104, + 7886535856284373354, + 1092174897468921446, + ]), + Fq::from_montgomery_limbs([ + 1062163077313937380, + 11987404733688401354, + 13771857460633546591, + 404835587063112873, + ]), + Fq::from_montgomery_limbs([ + 16497288776209779034, + 2880366049054710506, + 253042145042914898, + 795216235095539205, + ]), + Fq::from_montgomery_limbs([ + 13406148328760919071, + 7241933139744138143, + 12901549130103097508, + 622176358374555103, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 8839697166194087406, + 4483906360586614080, + 14882309942760908718, + 26805057196885842, + ]), + Fq::from_montgomery_limbs([ + 7780277578177316464, + 8830183239891425324, + 17543080001337922949, + 763106694028031052, + ]), + Fq::from_montgomery_limbs([ + 1380876235740608953, + 7727437954586184212, + 6573237846455394763, + 348129619934932866, + ]), + Fq::from_montgomery_limbs([ + 14022759702194409553, + 8495575903624052978, + 4435568764932750980, + 556954649769758600, + ]), + Fq::from_montgomery_limbs([ + 10833230885057379503, + 14946233534988385740, + 3482517598744002245, + 312685728556510786, + ]), + Fq::from_montgomery_limbs([ + 4935346722124605172, + 797590664817406232, + 6711744841558593604, + 1113832946092370199, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 4507604340829135994, + 6192904589647086945, + 349044365259597977, + 1152686511406973589, + ]), + Fq::from_montgomery_limbs([ + 195352152493747630, + 5233440319211994798, + 932481733874805995, + 509755197807725335, + ]), + Fq::from_montgomery_limbs([ + 6237574338367694863, + 18409691934826828587, + 2269618770290486313, + 1105546858321591640, + ]), + Fq::from_montgomery_limbs([ + 12982330271334867216, + 3689728804743182371, + 11969860905888785248, + 384135728283136906, + ]), + Fq::from_montgomery_limbs([ + 18265210337391869731, + 11610294943475185851, + 7713269183082030658, + 64710928906612284, + ]), + Fq::from_montgomery_limbs([ + 17581461696584771576, + 1251761997536591051, + 8677916614754373573, + 11467824250957215, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 5293383473840045151, + 14232932703686129211, + 16580168622608048461, + 944952712971843416, + ]), + Fq::from_montgomery_limbs([ + 1172918766922903979, + 5995995512044846696, + 7739257607297521882, + 1042510915533280011, + ]), + Fq::from_montgomery_limbs([ + 1981724477088009475, + 13354315713534102679, + 11891854408097089989, + 92846148123740243, + ]), + Fq::from_montgomery_limbs([ + 976886551936370648, + 14904356347049243804, + 14591979302472212806, + 1213715283121821429, + ]), + Fq::from_montgomery_limbs([ + 15587984398787314569, + 16826502960315805008, + 12894364377505862261, + 1260461626778401163, + ]), + Fq::from_montgomery_limbs([ + 4959549071568407724, + 16406890426995168379, + 5205271867547136181, + 625367672303411178, + ]), + ]), + Matrix::<1, 6, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 4469737807624992151, + 13646441970050473001, + 14103514615210198911, + 951934596751743825, + ]), + Fq::from_montgomery_limbs([ + 179935223424484463, + 2716781758867967994, + 13772831748270319508, + 559465738003921114, + ]), + Fq::from_montgomery_limbs([ + 3732370725359378315, + 109679493243276219, + 881555622161027305, + 772217225730861177, + ]), + Fq::from_montgomery_limbs([ + 2034891371688198908, + 15927708347683796662, + 2835422031008901944, + 942335024460335016, + ]), + Fq::from_montgomery_limbs([ + 10874231289292346814, + 11117313284388646608, + 16125883931973538451, + 1333477728458259050, + ]), + Fq::from_montgomery_limbs([ + 5836661691500937581, + 2582555451477250318, + 16743568702164980685, + 1095040268607012655, + ]), + ]), + ], + w_hat_collection: [ + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 6933713838801944433, + 16845582094611513195, + 18106981831632269118, + 1315719765541495999, + ]), + Fq::from_montgomery_limbs([ + 11025937787709817432, + 2848215840891863663, + 12003429085947921194, + 123169188111155826, + ]), + Fq::from_montgomery_limbs([ + 12625372430371999830, + 16677955247940128803, + 7323211740492754581, + 634092645821649835, + ]), + Fq::from_montgomery_limbs([ + 8476375831616065903, + 8302751278140753414, + 4675397025515049474, + 916054888187664134, + ]), + Fq::from_montgomery_limbs([ + 10397071512469717592, + 5168805500057287779, + 15231087545157212262, + 795647437775574917, + ]), + Fq::from_montgomery_limbs([ + 4753644871978862709, + 5862282760667146308, + 12460694012157225697, + 599558919665641703, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 3525611259680496361, + 16850996105995319551, + 5895804919214678528, + 391214039273829079, + ]), + Fq::from_montgomery_limbs([ + 16383982061649260213, + 7412768188479417373, + 18252968433587413341, + 921842098972532091, + ]), + Fq::from_montgomery_limbs([ + 4293960317930015621, + 15005027020601642292, + 14505531830207858927, + 1015323632458039193, + ]), + Fq::from_montgomery_limbs([ + 6752151532781968377, + 16993009794999287001, + 14092320031767020691, + 1182677145301447547, + ]), + Fq::from_montgomery_limbs([ + 16314233041829270002, + 3649678206581272066, + 11390243497395273567, + 313040234242687401, + ]), + Fq::from_montgomery_limbs([ + 16897077646049598862, + 5408248314355013755, + 10936401950030912526, + 513592532346930326, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 10142077329767560760, + 6792944251304638223, + 7902051751595654458, + 52562103742172771, + ]), + Fq::from_montgomery_limbs([ + 4124245661449561978, + 16104205151533781959, + 12907591592992771975, + 375874492004655234, + ]), + Fq::from_montgomery_limbs([ + 721737094669186114, + 9206501775775148139, + 4450459856140585915, + 711734015520322130, + ]), + Fq::from_montgomery_limbs([ + 614920776545720184, + 9338526590820186332, + 3423803905067391290, + 1297483125050494498, + ]), + Fq::from_montgomery_limbs([ + 5114006628798839509, + 10631775008980466663, + 3587509331998934684, + 1269615621594518563, + ]), + Fq::from_montgomery_limbs([ + 10586294365539695697, + 13070162917427803989, + 5131427260750659378, + 185094384545327415, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 15393156556409725569, + 12069454178577165134, + 10615051884848589576, + 627431092634767494, + ]), + Fq::from_montgomery_limbs([ + 2254585774072887271, + 9054648099999668560, + 10092512970859140868, + 128794736276163271, + ]), + Fq::from_montgomery_limbs([ + 9634188559612410031, + 11231916523014098458, + 9347609823309203991, + 350537733562293921, + ]), + Fq::from_montgomery_limbs([ + 712883344164921598, + 12267969327296118133, + 18415463544294982318, + 453347153304216575, + ]), + Fq::from_montgomery_limbs([ + 6354724406448162447, + 16973074452059542227, + 1742850061709863465, + 29248222949323830, + ]), + Fq::from_montgomery_limbs([ + 5847808690552004737, + 2583092622487380856, + 16226455529753322167, + 622812582439549387, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 8037108896489144647, + 11600187371086455875, + 14226278393962213262, + 1257430093680684711, + ]), + Fq::from_montgomery_limbs([ + 17768344430228638036, + 12362984821927414562, + 8755702286219707347, + 1052522743722421089, + ]), + Fq::from_montgomery_limbs([ + 6518969013844050226, + 10104698889580418215, + 12831301188037688559, + 783109772397025172, + ]), + Fq::from_montgomery_limbs([ + 6181962216281397012, + 8791420351320694807, + 5845391987758232061, + 691946495243473347, + ]), + Fq::from_montgomery_limbs([ + 555663508144587651, + 2813166513808555896, + 9604748549845359549, + 1115460934710212864, + ]), + Fq::from_montgomery_limbs([ + 638373104524889548, + 6961133691969109992, + 16899272275885442322, + 107354495377389126, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 359839753750440452, + 16872903944693818879, + 9182594678934428762, + 157875028486713218, + ]), + Fq::from_montgomery_limbs([ + 18133892901854313763, + 2808183347815612802, + 13420838164084790320, + 592901990662685620, + ]), + Fq::from_montgomery_limbs([ + 2972894661558754427, + 10007808519010762631, + 9092666282720580619, + 1045475284031737143, + ]), + Fq::from_montgomery_limbs([ + 11312374728773702090, + 14199049380673735694, + 6883328492121377672, + 254205863439515968, + ]), + Fq::from_montgomery_limbs([ + 1622439358680448127, + 16670668058993745597, + 4548903667405006277, + 711571731093376968, + ]), + Fq::from_montgomery_limbs([ + 17647983290779098291, + 516914030435843715, + 12098656310263379019, + 275469573180901388, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 8548644889741041300, + 16958143034062232997, + 13155023865968925107, + 527671552750155065, + ]), + Fq::from_montgomery_limbs([ + 13280891140215524593, + 3305529464796220554, + 13769067712411857696, + 194876564429210557, + ]), + Fq::from_montgomery_limbs([ + 4744158468698697612, + 16501033922635430369, + 13118709481247752005, + 455296334218894134, + ]), + Fq::from_montgomery_limbs([ + 3276121206714262439, + 4384108406151911994, + 10320409945935199931, + 1129505288669932775, + ]), + Fq::from_montgomery_limbs([ + 4802683862047720627, + 12048656597166121442, + 2985941889978900161, + 1215862908384237465, + ]), + Fq::from_montgomery_limbs([ + 9878053342652269422, + 6952038940472105574, + 13204721887023621809, + 104559270963520601, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 2884484268998399392, + 7516340773367415265, + 17967577411328781785, + 71104776242823513, + ]), + Fq::from_montgomery_limbs([ + 6836357534971200276, + 12307486411100090586, + 3725741383492541705, + 708703587844324306, + ]), + Fq::from_montgomery_limbs([ + 16065785508863042824, + 13168438874677663185, + 10334681499739682637, + 537952869573618152, + ]), + Fq::from_montgomery_limbs([ + 4276306945181457487, + 11319798687621632943, + 11337729997070203637, + 154843360608516964, + ]), + Fq::from_montgomery_limbs([ + 15091173599951556922, + 10089665296762720564, + 1001320269268178313, + 1278999239679089342, + ]), + Fq::from_montgomery_limbs([ + 6790806302663889439, + 15630966142638650191, + 7219114191273641870, + 607000211505329118, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 10941156742810682792, + 13379581544377778361, + 13597487267674595073, + 856893196159093362, + ]), + Fq::from_montgomery_limbs([ + 12116163542944543584, + 10494464956681785456, + 5328861516400529745, + 1198358765731586889, + ]), + Fq::from_montgomery_limbs([ + 18189172451487902278, + 4704482581638044529, + 984078958545158234, + 1214725173814978653, + ]), + Fq::from_montgomery_limbs([ + 5693469689620468779, + 9572644835043944500, + 2366490855072377760, + 976822768924111263, + ]), + Fq::from_montgomery_limbs([ + 13490986302612722028, + 1283285868432826268, + 15164008493321253514, + 443251753067442416, + ]), + Fq::from_montgomery_limbs([ + 13150294025593833313, + 5620721896853634047, + 4766918037148084086, + 1004371804232239176, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 11674076986569886445, + 14273565036215986478, + 7256033114853758831, + 1243175635214446154, + ]), + Fq::from_montgomery_limbs([ + 13391657488427814604, + 11740905283874021531, + 9224412564843665854, + 277256927127426063, + ]), + Fq::from_montgomery_limbs([ + 9479795538791379585, + 12974816116199774846, + 12093010719550875010, + 5065395771365623, + ]), + Fq::from_montgomery_limbs([ + 8817914873159831624, + 2104380883716865129, + 18076504449817050016, + 651566378088004291, + ]), + Fq::from_montgomery_limbs([ + 2593549556231375650, + 9464329604880807882, + 931952291445829364, + 1296192193647975938, + ]), + Fq::from_montgomery_limbs([ + 6791830127635900713, + 5571583372402235342, + 5980079258218847792, + 609581694037305767, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 3590436137035362796, + 6878827383468400586, + 2087187619625759972, + 366519334389468484, + ]), + Fq::from_montgomery_limbs([ + 8466797588269795178, + 6233162019605045514, + 7818079020321919455, + 1299893902682642414, + ]), + Fq::from_montgomery_limbs([ + 13213818269144599466, + 1289947883313972118, + 4059701246652915385, + 12056266522820237, + ]), + Fq::from_montgomery_limbs([ + 4508800680162331521, + 15986068886298500867, + 14977838885955851194, + 38157078418942241, + ]), + Fq::from_montgomery_limbs([ + 13953378503175087488, + 2632607770308512210, + 13562084469560012417, + 245249845748719170, + ]), + Fq::from_montgomery_limbs([ + 14192710935721498803, + 10423371171643016558, + 8787645447508907660, + 1222320713106865517, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 11672182316223918869, + 6397196540158184432, + 16362125278956639955, + 487254253940971622, + ]), + Fq::from_montgomery_limbs([ + 3466115228336022838, + 17336865038830586933, + 15011622032603429066, + 886109464755529302, + ]), + Fq::from_montgomery_limbs([ + 60790403003891626, + 11789627958407425130, + 18093678967772149866, + 163664659042316929, + ]), + Fq::from_montgomery_limbs([ + 11752605341201064356, + 17735918082592333925, + 6652470350194431394, + 889452019796415044, + ]), + Fq::from_montgomery_limbs([ + 8401712234167110287, + 10960633415813906272, + 11916450035773002049, + 1182232446618175169, + ]), + Fq::from_montgomery_limbs([ + 10396262244990196196, + 13566621656449952195, + 17637374041715454767, + 487328172506255483, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 359851191963578459, + 6093707674603330913, + 12382809233400904418, + 822869288595513424, + ]), + Fq::from_montgomery_limbs([ + 8685375674428402008, + 11116570913984986227, + 13141958117760910576, + 694631449425721940, + ]), + Fq::from_montgomery_limbs([ + 13799808203577028319, + 17015236177612766046, + 13321925256996230040, + 83728605392058044, + ]), + Fq::from_montgomery_limbs([ + 11345927491644574710, + 6729113552022061366, + 489680359452713554, + 1063665064872602168, + ]), + Fq::from_montgomery_limbs([ + 5144672341518660971, + 13584780511637830006, + 8111044646642319859, + 760808052520956883, + ]), + Fq::from_montgomery_limbs([ + 10534617268344014793, + 13365424830059569868, + 15323686518176324368, + 630253372526730391, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 5574736329985492350, + 1394240824897034276, + 12869158727379905882, + 927371660714513620, + ]), + Fq::from_montgomery_limbs([ + 6250879616233772588, + 14830533363705576088, + 11405716231454843078, + 302485753651389813, + ]), + Fq::from_montgomery_limbs([ + 9376998902591535768, + 10870546783769916945, + 8867938913668980167, + 168036903158516371, + ]), + Fq::from_montgomery_limbs([ + 17665300127173928717, + 16211022938249470990, + 17778018974492488988, + 1035038949736118270, + ]), + Fq::from_montgomery_limbs([ + 8713486127840843643, + 12284089155092108591, + 9199322335133216480, + 1254936361875119138, + ]), + Fq::from_montgomery_limbs([ + 10672903121209769745, + 1541284167923703332, + 354508315039816196, + 1077919680069474774, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 6003956627532398687, + 12900385821050494701, + 13212436788748797499, + 550552294639902063, + ]), + Fq::from_montgomery_limbs([ + 14895950277557938580, + 3197587119252958842, + 1370401976516442748, + 185312282262907769, + ]), + Fq::from_montgomery_limbs([ + 4334813612319164060, + 1249839787510419412, + 2014732433360765992, + 674486378020601344, + ]), + Fq::from_montgomery_limbs([ + 16372536311394952793, + 16876000734634230902, + 16256142784705290990, + 1216045970949193228, + ]), + Fq::from_montgomery_limbs([ + 7511261605071474477, + 12731027885113475848, + 7275278577140348070, + 1332751723743282012, + ]), + Fq::from_montgomery_limbs([ + 2087120385657061588, + 5805219940951110446, + 13072060426636966211, + 863754038349923743, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 9861938477894648572, + 1261863888379893097, + 1659273544923639757, + 1175309734597332353, + ]), + Fq::from_montgomery_limbs([ + 3160898884988868850, + 12315548764431121182, + 12829922584215852165, + 56495588159121736, + ]), + Fq::from_montgomery_limbs([ + 9126361106532779429, + 8812351712430538764, + 16651360315827640335, + 488907765340195245, + ]), + Fq::from_montgomery_limbs([ + 8831436795438293115, + 389432919099331880, + 4151373017145697434, + 20487081091778889, + ]), + Fq::from_montgomery_limbs([ + 1478664308612791336, + 8186322499300142837, + 14558475073251694928, + 808252273304974762, + ]), + Fq::from_montgomery_limbs([ + 15607838810385275909, + 12674581021244262249, + 1909980166381620782, + 345071109506949067, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 10897251009229233031, + 3820618022447517075, + 10985787470877927823, + 403556049280121762, + ]), + Fq::from_montgomery_limbs([ + 930794418602631676, + 4219345337777307051, + 12545787195024594643, + 727460251993377030, + ]), + Fq::from_montgomery_limbs([ + 1295669867887905036, + 9507152194066574702, + 7109356788802489574, + 787002368140653778, + ]), + Fq::from_montgomery_limbs([ + 3498224858763889755, + 302153864491265874, + 14518919122820805288, + 961799431413434867, + ]), + Fq::from_montgomery_limbs([ + 14579188115252453346, + 8486675243511966662, + 4198502112353568422, + 266466804927785090, + ]), + Fq::from_montgomery_limbs([ + 5714787944090956648, + 8773050216612558194, + 4209799818844007033, + 157683362695822804, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 7490636877172818331, + 18234545141478570777, + 4868926515076353497, + 1040485086378507404, + ]), + Fq::from_montgomery_limbs([ + 4007494498414670332, + 11381886286508088565, + 2983212756609056257, + 310114683693996305, + ]), + Fq::from_montgomery_limbs([ + 9176086588288648852, + 1592592270921797535, + 4569673380486221672, + 1302061240324827715, + ]), + Fq::from_montgomery_limbs([ + 16913435421079334086, + 1877470558106542334, + 3613514508584067134, + 934461884972210272, + ]), + Fq::from_montgomery_limbs([ + 5267175603942094137, + 1748374762382459641, + 4882024791077414221, + 1068225445733947215, + ]), + Fq::from_montgomery_limbs([ + 4248184777234069323, + 13346185782403877767, + 10153633758750203581, + 141684902152107360, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 14329113735110304247, + 4241308009922883952, + 9772848400881136490, + 239381311112673117, + ]), + Fq::from_montgomery_limbs([ + 1815346937549645652, + 3479767444023955389, + 4985298868790684050, + 355453443190923870, + ]), + Fq::from_montgomery_limbs([ + 5747089878066396614, + 5454329989338975845, + 12341448373351673623, + 1202238166588655979, + ]), + Fq::from_montgomery_limbs([ + 9296701061462558971, + 17770007858418801719, + 9914793610472554336, + 1281893899901916554, + ]), + Fq::from_montgomery_limbs([ + 3010329870005884069, + 2836286366415384158, + 2351971757588955099, + 425289972726450364, + ]), + Fq::from_montgomery_limbs([ + 18291414506166784212, + 810246456460775309, + 17528761664504541127, + 1189494422506112895, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 13873201020652076543, + 6243622914124108573, + 6903929397781795660, + 574766800775597314, + ]), + Fq::from_montgomery_limbs([ + 17971358622227978668, + 15854652377477090302, + 1063842904034816, + 989523394960344619, + ]), + Fq::from_montgomery_limbs([ + 8015553520299503933, + 4607530076716157995, + 7439330134573907822, + 1104246105186017619, + ]), + Fq::from_montgomery_limbs([ + 3986330100644126569, + 17707403369263436100, + 4053571974764234396, + 108842167919011278, + ]), + Fq::from_montgomery_limbs([ + 5227388868334111117, + 12812207377137498929, + 2588198532604965494, + 961490407308315800, + ]), + Fq::from_montgomery_limbs([ + 7646326553387833689, + 12724139924596788661, + 629496738895522970, + 1201441128237966538, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 14866344307104327368, + 4985794825846590702, + 853871436616991822, + 749367072047711970, + ]), + Fq::from_montgomery_limbs([ + 1876020443251361508, + 6552070073373315737, + 12995514842585856406, + 1275392944325677985, + ]), + Fq::from_montgomery_limbs([ + 7601514916050054383, + 16910631174758870764, + 7353760964415941247, + 324644049762087391, + ]), + Fq::from_montgomery_limbs([ + 16565109856331579529, + 458787328687847682, + 5878204963586402256, + 1322072415305233581, + ]), + Fq::from_montgomery_limbs([ + 12729053080732475923, + 11510453208755572522, + 3723997403677235406, + 73363110170067874, + ]), + Fq::from_montgomery_limbs([ + 18174997862860579716, + 6182018227945955817, + 2127647890385770221, + 870293941267412601, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 10698372380060816691, + 7522180405775599951, + 15832604002112875278, + 521032436098731379, + ]), + Fq::from_montgomery_limbs([ + 15319055731354684350, + 1753334646577885863, + 4505520717374373397, + 984179811150887857, + ]), + Fq::from_montgomery_limbs([ + 13141271355432538382, + 14700998572061668181, + 4549081783230234567, + 806347686644718089, + ]), + Fq::from_montgomery_limbs([ + 9975557437768999376, + 11618707034451291844, + 3181936011792873831, + 576438052445019413, + ]), + Fq::from_montgomery_limbs([ + 16609855326770322939, + 13212944030983556053, + 3039401190695389047, + 1188561968753866414, + ]), + Fq::from_montgomery_limbs([ + 10305504178314593273, + 14719639554020787850, + 2480984582534492384, + 221582009878780852, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 13200038943773919312, + 14432882432204232972, + 3023115969282520533, + 343418406639707901, + ]), + Fq::from_montgomery_limbs([ + 9327873286332474704, + 5954324830215207584, + 3873074387113200139, + 744988613833241266, + ]), + Fq::from_montgomery_limbs([ + 15847102383028666437, + 1096370811445384001, + 10166653322883901200, + 327347038183216223, + ]), + Fq::from_montgomery_limbs([ + 17600124854622807025, + 15328683957983696187, + 3518858654096416419, + 638859422450597084, + ]), + Fq::from_montgomery_limbs([ + 3012983939074171362, + 9083322861410244018, + 4322938770639600225, + 442252654129847313, + ]), + Fq::from_montgomery_limbs([ + 10656857781541021576, + 5978481768391996531, + 2250259229090183585, + 432977302373307667, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 14355870696105147319, + 8480124686198992740, + 4123496920141395243, + 506237667861983638, + ]), + Fq::from_montgomery_limbs([ + 12320253406233535520, + 8322795092624377756, + 9572334243002510406, + 1226552575804851889, + ]), + Fq::from_montgomery_limbs([ + 9845446342011599085, + 17778086686673507324, + 5271342849823127028, + 1088489886300171520, + ]), + Fq::from_montgomery_limbs([ + 10715976971447272221, + 1556354685447448032, + 16979954691422909924, + 386763037013271508, + ]), + Fq::from_montgomery_limbs([ + 6180856312104178084, + 11877570767790110506, + 11499883073784997611, + 393033674847566959, + ]), + Fq::from_montgomery_limbs([ + 7644299261552751667, + 2236838738262968574, + 8460748568952358391, + 1177808537547336633, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 9135896072628350252, + 17288794130611191656, + 16136991324140875732, + 84153041777780941, + ]), + Fq::from_montgomery_limbs([ + 3384444111049248095, + 5013442674731807719, + 8362856530990022791, + 1126331696064245534, + ]), + Fq::from_montgomery_limbs([ + 13385137591549846388, + 11889738158254938557, + 17705852903381913949, + 155996115818620695, + ]), + Fq::from_montgomery_limbs([ + 15454217037527338314, + 9036781253178038581, + 12351768307285004715, + 776821242022223621, + ]), + Fq::from_montgomery_limbs([ + 1200501875000044263, + 6384384240290446957, + 15639254494736291770, + 930709414948460626, + ]), + Fq::from_montgomery_limbs([ + 2141846397057350878, + 14687259326247822547, + 2879743331055932654, + 420053148927601148, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 18343404923952179637, + 1978770268004633152, + 18074842923392944526, + 99740808436074128, + ]), + Fq::from_montgomery_limbs([ + 16339172153591076879, + 13902224968596916829, + 10987490026958244901, + 480318192898237950, + ]), + Fq::from_montgomery_limbs([ + 16708778634825784370, + 5310850661772903365, + 16720939557594415942, + 983754580352601152, + ]), + Fq::from_montgomery_limbs([ + 8614768398997670932, + 10441907275834816828, + 11459906999048618974, + 98256766838754326, + ]), + Fq::from_montgomery_limbs([ + 5461219359492352050, + 8928173417887044164, + 5632769833875876015, + 938637862379787936, + ]), + Fq::from_montgomery_limbs([ + 14478729241761067482, + 14593688601059211201, + 14567193330233850704, + 193411838718316245, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 6244372198079752707, + 12764020255605820167, + 3597323991837773264, + 232811656021755322, + ]), + Fq::from_montgomery_limbs([ + 12794321084179091283, + 12550727012798192271, + 5852541072119985136, + 1021072807450583460, + ]), + Fq::from_montgomery_limbs([ + 5843482488715644166, + 17968652270397807267, + 10729147049305849619, + 157069170856760481, + ]), + Fq::from_montgomery_limbs([ + 16486113458959504396, + 3842616654194538021, + 16267097259825943411, + 595256064535306261, + ]), + Fq::from_montgomery_limbs([ + 18403329840356376661, + 17180721686489435607, + 16602787769632693868, + 1218551944743323947, + ]), + Fq::from_montgomery_limbs([ + 15792003884980763548, + 103687243243986150, + 1015407070790759683, + 925892726865866689, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 4737231254389322774, + 1982930339222313430, + 17171322757846703283, + 898862720123176395, + ]), + Fq::from_montgomery_limbs([ + 15341788185538116478, + 15152543049620221847, + 11673048694712682284, + 322745914045333317, + ]), + Fq::from_montgomery_limbs([ + 12638501658486051138, + 13136127249934274833, + 16835414843273620909, + 830854396919510911, + ]), + Fq::from_montgomery_limbs([ + 15895567503124768810, + 17851680667009624675, + 9790662472981446008, + 688513180346337911, + ]), + Fq::from_montgomery_limbs([ + 7539663061168884957, + 14647473521866168085, + 14254615857988792976, + 4914529917008946, + ]), + Fq::from_montgomery_limbs([ + 10355365805280135879, + 1713320802629047069, + 11781471822278287496, + 696018085837035473, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 17208622806574606453, + 2131863109694270375, + 17267390257687220562, + 717142744114900489, + ]), + Fq::from_montgomery_limbs([ + 13115781297674767878, + 11806487226059857638, + 3832559734382202821, + 1327223946228164221, + ]), + Fq::from_montgomery_limbs([ + 1519942432011064348, + 2971486323152134197, + 10412234235600737234, + 627890410365264901, + ]), + Fq::from_montgomery_limbs([ + 10935974904415640609, + 3329695497336026013, + 13276582814401540013, + 624327570851923410, + ]), + Fq::from_montgomery_limbs([ + 110740126727160908, + 1977000808556019402, + 17939216501132184661, + 456092178041276768, + ]), + Fq::from_montgomery_limbs([ + 13974795879491265452, + 16756058358467461957, + 18345173225794766341, + 1240468105851879043, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 16648425534044120166, + 17300631023568278668, + 3769987016608299300, + 701256036605548976, + ]), + Fq::from_montgomery_limbs([ + 9545137723467262343, + 5920020285572073751, + 5586902085914198509, + 1101010118319202051, + ]), + Fq::from_montgomery_limbs([ + 1804254836884575917, + 5416042091971666706, + 2881258114252429182, + 68889272174393525, + ]), + Fq::from_montgomery_limbs([ + 15468731159921956531, + 15872344848072676105, + 1678659996910931386, + 827142061320044550, + ]), + Fq::from_montgomery_limbs([ + 14524351942355153784, + 10797623040866138576, + 12874995891465211466, + 522880520258235794, + ]), + Fq::from_montgomery_limbs([ + 3987121765421903331, + 10914786903369841306, + 14357739193531493338, + 159659900263967910, + ]), + ]), + Matrix::<6, 1, 6>::new_from_known([ + Fq::from_montgomery_limbs([ + 1502512509312401925, + 17658662731474453106, + 12409373669027537750, + 369255404008259275, + ]), + Fq::from_montgomery_limbs([ + 3933340182670563102, + 17988389551284440931, + 2662254549780507248, + 455350437925171541, + ]), + Fq::from_montgomery_limbs([ + 12151336628671687181, + 16659863612142679844, + 4275242264769905759, + 226663222642898029, + ]), + Fq::from_montgomery_limbs([ + 16130436743434681682, + 11552440823414351188, + 4441812352013272663, + 1024571907948499450, + ]), + Fq::from_montgomery_limbs([ + 6575764606651544368, + 3768634045069377030, + 18077248345407646289, + 1109390810042386997, + ]), + Fq::from_montgomery_limbs([ + 14122304828382902866, + 7822601784757433157, + 15085114466160105232, + 454674386781135986, + ]), + ]), + ], + }, + optimized_arc: OptimizedArcMatrix::<39, 7, 273>::new_from_known([ + Fq::from_montgomery_limbs([ + 15142982440796561447, + 11586951767160912790, + 2554152473571518408, + 1060132733599829191, + ]), + Fq::from_montgomery_limbs([ + 5004052621280210368, + 17001459709892607063, + 7681637351760180567, + 370325849830378477, + ]), + Fq::from_montgomery_limbs([ + 12700316700887579682, + 10527071459591008162, + 4649940422809756001, + 1164398790994859766, + ]), + Fq::from_montgomery_limbs([ + 14166576988026094609, + 7313392791454005322, + 12003933110859736764, + 497349496445067730, + ]), + Fq::from_montgomery_limbs([ + 660800666505769101, + 8654643871558439567, + 14263148622483513593, + 820049075817239934, + ]), + Fq::from_montgomery_limbs([ + 3633256971691786185, + 10090676851691033833, + 14588357423182388197, + 831634409758195705, + ]), + Fq::from_montgomery_limbs([ + 6492287632409988134, + 12046607076154115291, + 17147959445519551317, + 461021671425820687, + ]), + Fq::from_montgomery_limbs([ + 14444046072241906262, + 11260694318344083229, + 15743364178797140854, + 866446994798567454, + ]), + Fq::from_montgomery_limbs([ + 3641312158605685211, + 14157364044999263645, + 16784472236570305027, + 425843099497195003, + ]), + Fq::from_montgomery_limbs([ + 17723864121788076174, + 13911937024562874191, + 12749454259525933628, + 451378649043069085, + ]), + Fq::from_montgomery_limbs([ + 12784133990119646353, + 17654455838119254543, + 14047536069777387226, + 645204516252515303, + ]), + Fq::from_montgomery_limbs([ + 1959581704190940037, + 13929985394687694163, + 11022302142929130035, + 283707020686355664, + ]), + Fq::from_montgomery_limbs([ + 8629032034013359758, + 8320916390268264398, + 11188435069201519314, + 1277918481865788038, + ]), + Fq::from_montgomery_limbs([ + 1783621120979741815, + 10125702604889014266, + 7859706914940359291, + 1258189548796714111, + ]), + Fq::from_montgomery_limbs([ + 4197085784563434882, + 243889206587889894, + 328885806087941395, + 929695947751686179, + ]), + Fq::from_montgomery_limbs([ + 6420634290533400711, + 3371757063543007366, + 8900632765923820105, + 371199850895065588, + ]), + Fq::from_montgomery_limbs([ + 9679924820095672851, + 5191301328839079795, + 1468702730043861612, + 1130258788388916276, + ]), + Fq::from_montgomery_limbs([ + 14270884667693338729, + 18421783881067727877, + 702505960635108322, + 876601962183112334, + ]), + Fq::from_montgomery_limbs([ + 12801928710162774032, + 15709283060501093378, + 2508615709628312314, + 924328772397935430, + ]), + Fq::from_montgomery_limbs([ + 9019134492733417932, + 4614098400696239641, + 291908476903718505, + 879711180612784839, + ]), + Fq::from_montgomery_limbs([ + 12296479578360854848, + 3423354675244851904, + 17098596077633953792, + 378482623029323224, + ]), + Fq::from_montgomery_limbs([ + 13200816203042245771, + 15381254577926224952, + 14688424257545082743, + 884773501591309967, + ]), + Fq::from_montgomery_limbs([ + 16263843110415550162, + 14001011937262187824, + 2325893788175944450, + 427344840846697831, + ]), + Fq::from_montgomery_limbs([ + 10712788406702291397, + 14628016237392831746, + 12076323935029775432, + 746032296870665924, + ]), + Fq::from_montgomery_limbs([ + 7577844083779539683, + 8593563853045273470, + 6762705862919489296, + 1011466592883577533, + ]), + Fq::from_montgomery_limbs([ + 10970204418416076913, + 4397529361571105931, + 15590416832284287611, + 432035610777585218, + ]), + Fq::from_montgomery_limbs([ + 13604542201065871088, + 8000646895858538916, + 7463535664974476191, + 112496092381655883, + ]), + Fq::from_montgomery_limbs([ + 5448941064349247150, + 18035446383961421934, + 9688851655819494355, + 314108334517577725, + ]), + Fq::from_montgomery_limbs([ + 13216339084640418338, + 18208749029142079159, + 2801888902925820506, + 1144112407212441278, + ]), + Fq::from_montgomery_limbs([ + 7414209360993783553, + 9029452093631467477, + 10351555314693636524, + 588771856204784285, + ]), + Fq::from_montgomery_limbs([ + 3108201764764012849, + 9316564318794683488, + 2890833741230407843, + 2976751152949582, + ]), + Fq::from_montgomery_limbs([ + 5531824355021026381, + 12498142272625928587, + 3715194578260983474, + 1067798051179441316, + ]), + Fq::from_montgomery_limbs([ + 5339344176782059900, + 10307852721097022359, + 14767036192885737246, + 130540287097272817, + ]), + Fq::from_montgomery_limbs([ + 7180958399368342439, + 128655658219475950, + 15207307979599970655, + 1124647386318203846, + ]), + Fq::from_montgomery_limbs([ + 10677712105355735228, + 303877370541742151, + 11456613512094797466, + 1197130552973396923, + ]), + Fq::from_montgomery_limbs([ + 1852186172212255919, + 7732103194240143876, + 3191072801518998585, + 684231033415976440, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12344835392323260771, + 2083746688625641780, + 9843550839040352981, + 651659425757649777, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1110121811836510524, + 11074047049180975687, + 15444325776340307889, + 1176464439067465611, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15910765157617366987, + 3536546922624744505, + 13839442880050335167, + 1052063195754658296, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15883615976440084496, + 10513678964631690585, + 17274484441634888004, + 104967936091342947, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6481049124859745810, + 12420828791682339353, + 3515061109189248511, + 2970636150410785, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9330561373397764193, + 15220428410405742122, + 3596976591192400082, + 1172536306991915045, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11645314245053381169, + 12447229279329596583, + 2611021837182599503, + 1121293333579047218, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5520645742684358372, + 4184771738280864541, + 4013355666407389724, + 651341887764501817, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3861533222480473435, + 8229127100534402633, + 961020646123781410, + 1093771644395281795, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7693571830729430183, + 14740278293355277643, + 7478396620768437721, + 1020903160466582154, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13974629067477558431, + 5721400371209900889, + 788632258150877276, + 1052522919478138392, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4992769493438078027, + 6924382181722868018, + 8263199750104564483, + 169174671387869155, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11416436440841880348, + 7910510255652583772, + 2772926057469350664, + 240489949253278513, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8550478801539329000, + 17416455311840648130, + 7713828782443004553, + 1257322107749939919, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10946761173248535048, + 6300893940302812177, + 14214574452301493380, + 1064839331942993571, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12881919676216378529, + 6525643603496459068, + 7739411544375049269, + 121520118034913063, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14171005468190725795, + 807987272814416859, + 16062924926726151568, + 258817012972523442, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5031548057386859908, + 16708231376954786943, + 3901002117807196384, + 15277199136600693, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3470573257247529570, + 3778398720483160839, + 4271650771133121672, + 366341134231605540, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17671590415686923470, + 14797555043330379484, + 2826722725742773774, + 673498791246184156, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4599390077836288923, + 15103704149833090169, + 13723271685426770651, + 1238708412855247473, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12304403800545959570, + 12269595607865918824, + 4224309437769311654, + 1102826182464027344, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7422908892054624300, + 6613469136954082264, + 2435694939055735193, + 465151622319296864, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9966121319294113392, + 1036787719885473593, + 16922917099071401564, + 957685172296873589, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9346051242088429570, + 5881327167233602278, + 18366005774591742073, + 1234098542793269307, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6556095991079572091, + 15800350435028538953, + 17490188894945751356, + 318651152411458756, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9604843137147166704, + 10750667974649036098, + 15855520508812075513, + 289244356768878157, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9330357980066794783, + 17865465819235974796, + 9112978452518873031, + 700544745156046737, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6722735210481586279, + 9213635375899356767, + 3419293198746470858, + 397188667470959331, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5033510300536938046, + 14319156262351107248, + 14453339555250931608, + 1300088399042594667, + ]), + Fq::from_montgomery_limbs([ + 586365878943401533, + 10219333061949038245, + 7972787616665459187, + 1180682599170166362, + ]), + Fq::from_montgomery_limbs([ + 8677310049713074877, + 6209659062870853276, + 6361763165884296788, + 1086786531947345096, + ]), + Fq::from_montgomery_limbs([ + 4779669491370037827, + 13794675476884129106, + 2856260482144566523, + 815058410432730978, + ]), + Fq::from_montgomery_limbs([ + 8349785262387520653, + 14703604045323517453, + 10665488643511503896, + 1190736588532344714, + ]), + Fq::from_montgomery_limbs([ + 9753136258891648437, + 7592309943578822500, + 18234430885873993524, + 946608033429176051, + ]), + Fq::from_montgomery_limbs([ + 8862120093151408513, + 9919781382246740055, + 1639967479777957120, + 548895009658598348, + ]), + Fq::from_montgomery_limbs([ + 13150047014556861649, + 9895352886349978940, + 607603433543469096, + 825078058460205935, + ]), + Fq::from_montgomery_limbs([ + 10677514517763000310, + 1869057220976501750, + 7668490026500068131, + 645375934459787109, + ]), + Fq::from_montgomery_limbs([ + 8393901821323241932, + 7155803376644055598, + 5465256629438666110, + 467809976924970962, + ]), + Fq::from_montgomery_limbs([ + 8008789779293081850, + 17333068400582244417, + 864473515802821379, + 712131972755422562, + ]), + Fq::from_montgomery_limbs([ + 5260641048740129119, + 11495506189219575805, + 1976170684554961654, + 583558279245420304, + ]), + Fq::from_montgomery_limbs([ + 10607922137491563126, + 16997507064637422660, + 16243052688991164520, + 620318480202596319, + ]), + Fq::from_montgomery_limbs([ + 8682850641454705537, + 4234371891064954414, + 11030571520428482979, + 775687601614273649, + ]), + Fq::from_montgomery_limbs([ + 12248979915462901096, + 1794636648127247975, + 16388845185353268388, + 1257257804440120883, + ]), + Fq::from_montgomery_limbs([ + 17181365213230240819, + 3933917789297525218, + 774796165591114183, + 628159510187755171, + ]), + Fq::from_montgomery_limbs([ + 9201407700189177387, + 14700424513123193347, + 18288661468232834482, + 407382537568434540, + ]), + Fq::from_montgomery_limbs([ + 11966891449526246216, + 6846368159746727324, + 5421814018651935761, + 1007837491484494646, + ]), + Fq::from_montgomery_limbs([ + 3054672449338249840, + 772010416012553897, + 804919836093674272, + 60934971449786311, + ]), + Fq::from_montgomery_limbs([ + 3349955854192164124, + 12023516821995660430, + 14073054570207692346, + 391152224081538807, + ]), + Fq::from_montgomery_limbs([ + 4393818606630194054, + 11894249453630174803, + 11407464681452601419, + 527342257675756743, + ]), + Fq::from_montgomery_limbs([ + 593191207061949875, + 394301333075100218, + 15992303837511873397, + 1258463696198082538, + ]), + Fq::from_montgomery_limbs([ + 7392815618978882544, + 8600193649781721343, + 10001082189003162790, + 160465744058402439, + ]), + Fq::from_montgomery_limbs([ + 5982722207731997556, + 9327097271719907983, + 16837081471143367937, + 1323283752393867441, + ]), + Fq::from_montgomery_limbs([ + 15234580594321690160, + 14480758270368693259, + 7897576353120019799, + 1211836381357568240, + ]), + Fq::from_montgomery_limbs([ + 17534396175019205578, + 3323788238042131357, + 16622036826489890791, + 893487708746761741, + ]), + Fq::from_montgomery_limbs([ + 3851834168141787069, + 11582510337408899680, + 15343784808633432566, + 461896544402216282, + ]), + Fq::from_montgomery_limbs([ + 1182215324455482337, + 1943242735522063011, + 4144863718139895080, + 243576649285589719, + ]), + ]), + } +} diff --git a/poseidon377/src/params/rate_7.rs b/poseidon377/src/params/rate_7.rs new file mode 100644 index 0000000..131ec33 --- /dev/null +++ b/poseidon377/src/params/rate_7.rs @@ -0,0 +1,7607 @@ +use decaf377::Fq; +use poseidon_parameters::v1::{ + Alpha, ArcMatrix, Matrix, MdsMatrix, OptimizedArcMatrix, OptimizedMdsMatrices, + PoseidonParameters, RoundNumbers, SquareMatrix, +}; + +/// Parameters for the rate-7 instance of Poseidon. +pub const fn rate_7() -> PoseidonParameters<8, 7, 64, 49, 39, 8, 312, 31> { + PoseidonParameters { + M: 128, + arc: ArcMatrix::<39, 8, 312>::new_from_known([ + Fq::from_montgomery_limbs([ + 17670646277747935280, + 16706444459999957760, + 7654997937391160943, + 659194013361630234, + ]), + Fq::from_montgomery_limbs([ + 9306410324956668761, + 11918867663968452855, + 16159669320449336406, + 1027263653273380654, + ]), + Fq::from_montgomery_limbs([ + 10424544810878645940, + 11533042162917906716, + 11405431418950019185, + 1181592306684207657, + ]), + Fq::from_montgomery_limbs([ + 15511314950168773025, + 2706584092620486610, + 12589344906057924987, + 198949415522711747, + ]), + Fq::from_montgomery_limbs([ + 6463242934034011456, + 4480775049700236083, + 1147244402884869561, + 251099301522684222, + ]), + Fq::from_montgomery_limbs([ + 6076653156556680739, + 6058362204127962922, + 2609006430585927072, + 1274277644859784421, + ]), + Fq::from_montgomery_limbs([ + 4034147285618545471, + 16309046946281719379, + 11732506942908882170, + 1141734761043516350, + ]), + Fq::from_montgomery_limbs([ + 15181402120606708665, + 769117698742393942, + 8000709366545785093, + 128042919054960870, + ]), + Fq::from_montgomery_limbs([ + 1723632755773767909, + 7425611528820224114, + 3846361608213771012, + 1317157014229771878, + ]), + Fq::from_montgomery_limbs([ + 1180004570926588292, + 9835115993104089813, + 255514544102365106, + 370024046994873563, + ]), + Fq::from_montgomery_limbs([ + 16507101987459533719, + 15603514395660572922, + 14849362947260167652, + 1094669615299361663, + ]), + Fq::from_montgomery_limbs([ + 1641419564627940104, + 1734977130266781622, + 2359844858057393580, + 88569664018692634, + ]), + Fq::from_montgomery_limbs([ + 16267328831985402574, + 4504129177123355587, + 2430336937000039615, + 182724946762968945, + ]), + Fq::from_montgomery_limbs([ + 17793535158928999608, + 5634031392654154747, + 10364337635238532583, + 1179994829791766723, + ]), + Fq::from_montgomery_limbs([ + 145700301814233551, + 7743364595931833861, + 13600389751414362190, + 60896176710147956, + ]), + Fq::from_montgomery_limbs([ + 17934232373820563709, + 6533845630243602776, + 15324676632824344806, + 193078344538210235, + ]), + Fq::from_montgomery_limbs([ + 3358859423299088468, + 11840854300859333122, + 8971776175135254558, + 1017237487419914281, + ]), + Fq::from_montgomery_limbs([ + 16328481477177681368, + 1582997519876787207, + 5731557971602616313, + 498420306800783215, + ]), + Fq::from_montgomery_limbs([ + 12526989383108933614, + 11731194362815364383, + 12171285115754354694, + 1149426086446852474, + ]), + Fq::from_montgomery_limbs([ + 809732533742229508, + 9195963923014534752, + 11886583635578374853, + 1292532069463172705, + ]), + Fq::from_montgomery_limbs([ + 15459398930996981001, + 17972537529111616674, + 6256384561719931081, + 1099908904421687269, + ]), + Fq::from_montgomery_limbs([ + 6194631511262826563, + 5980361634035332899, + 6132585703186883039, + 1343152289862207638, + ]), + Fq::from_montgomery_limbs([ + 13704532277655419198, + 9493963458736770267, + 12653804519172949169, + 218428805830292650, + ]), + Fq::from_montgomery_limbs([ + 8013496787819495990, + 18081394694809078101, + 14689354188530395484, + 215594972753885108, + ]), + Fq::from_montgomery_limbs([ + 1765918642197202432, + 14609627278749496598, + 17838479232731490790, + 483435431183692300, + ]), + Fq::from_montgomery_limbs([ + 16887594024800193480, + 1328476430727273505, + 17409984215868190656, + 1068059229250495642, + ]), + Fq::from_montgomery_limbs([ + 15487315671093445122, + 4028755842123792652, + 14118515559434131307, + 600004660835889583, + ]), + Fq::from_montgomery_limbs([ + 13620558349664282044, + 9072735252525972202, + 312787852320488038, + 47231029883010665, + ]), + Fq::from_montgomery_limbs([ + 9895950479699930991, + 1320083262020086701, + 9381389112858508819, + 928504768072893822, + ]), + Fq::from_montgomery_limbs([ + 10747871248019763953, + 4479404654791651748, + 11550770912037988700, + 438216942461032792, + ]), + Fq::from_montgomery_limbs([ + 18385142532667962947, + 12272398000439779637, + 7461987138462771945, + 558726769125714997, + ]), + Fq::from_montgomery_limbs([ + 14139485618053732983, + 8348792317702713313, + 367233286875102863, + 186067690854023043, + ]), + Fq::from_montgomery_limbs([ + 9041249832633195933, + 456527929350696070, + 3136123267563166118, + 862425036609816636, + ]), + Fq::from_montgomery_limbs([ + 9876321727332632023, + 772451632218152169, + 2580763841740601079, + 1142028710995573927, + ]), + Fq::from_montgomery_limbs([ + 10533796008132988682, + 170935373731786369, + 14423133339980810247, + 95055508444762275, + ]), + Fq::from_montgomery_limbs([ + 4649364153559136229, + 7934671244579715116, + 1725602943667409585, + 43552745816587563, + ]), + Fq::from_montgomery_limbs([ + 8961999013353095080, + 2142418418315880644, + 4123910506434734507, + 397827113331247074, + ]), + Fq::from_montgomery_limbs([ + 2830645454593024582, + 16129482998540180384, + 14637878185709838570, + 838139034347032562, + ]), + Fq::from_montgomery_limbs([ + 12946263415316598300, + 14878150584739579253, + 16849157713730765625, + 1119287030817500036, + ]), + Fq::from_montgomery_limbs([ + 15997726492611173881, + 1184045769764515709, + 17570821640390521168, + 1030525166811213785, + ]), + Fq::from_montgomery_limbs([ + 4265559081433102256, + 11769099699992876903, + 10631998596214553362, + 629920260964559213, + ]), + Fq::from_montgomery_limbs([ + 5157337023141684195, + 9558723136849813533, + 17067637485396248185, + 1292601583198374157, + ]), + Fq::from_montgomery_limbs([ + 11353399385134117629, + 2171806967430036166, + 13097746482717663094, + 586742781877852644, + ]), + Fq::from_montgomery_limbs([ + 1069667428899547423, + 10788650400324959681, + 5252327185070245031, + 819088289991387988, + ]), + Fq::from_montgomery_limbs([ + 4718192935689796196, + 936436242961860243, + 3017815728777383941, + 780298204568547665, + ]), + Fq::from_montgomery_limbs([ + 4440526970403334531, + 4424298208172375576, + 10234579833526167822, + 505023592953711511, + ]), + Fq::from_montgomery_limbs([ + 4918322558939638760, + 9690520639912900881, + 5542814067313497246, + 380973540266134644, + ]), + Fq::from_montgomery_limbs([ + 9286878702031291355, + 4012311069843170007, + 618344267270697646, + 472052248696324346, + ]), + Fq::from_montgomery_limbs([ + 5515965792241216655, + 12550695208348294011, + 659754676577929048, + 656440060717186789, + ]), + Fq::from_montgomery_limbs([ + 8831501139794786744, + 7594112778983174926, + 8104526671183916999, + 495730236370502114, + ]), + Fq::from_montgomery_limbs([ + 17540013351656383980, + 526615498448493498, + 1434949581303472569, + 432295170184586654, + ]), + Fq::from_montgomery_limbs([ + 16852826829533863229, + 16646101864172251902, + 17632936959873614814, + 109658534507710529, + ]), + Fq::from_montgomery_limbs([ + 10636456498263271254, + 15109124910717906315, + 11668474560270048234, + 1296049032043861262, + ]), + Fq::from_montgomery_limbs([ + 12825075668663632434, + 5819798153387583193, + 4880455503263027836, + 801173774991292287, + ]), + Fq::from_montgomery_limbs([ + 14486651003108579603, + 2482031833299980317, + 11187840813488772056, + 509321777815437929, + ]), + Fq::from_montgomery_limbs([ + 8118974380261220505, + 16461246043293688641, + 13082662763745388975, + 1038588716762883494, + ]), + Fq::from_montgomery_limbs([ + 5731200332460900228, + 8786620433378472829, + 13932094144651464518, + 488785602167183804, + ]), + Fq::from_montgomery_limbs([ + 10524031539917302527, + 10788579146719387781, + 2127880595616407095, + 1059950077979303833, + ]), + Fq::from_montgomery_limbs([ + 5949937211870070822, + 4596156438811326001, + 16863220530278231284, + 1206526762260473240, + ]), + Fq::from_montgomery_limbs([ + 8254843496528701475, + 16430360916832531565, + 7205448801338782124, + 446338536784822815, + ]), + Fq::from_montgomery_limbs([ + 289840651692288450, + 17201836854477413895, + 13970461968236180401, + 1087853954070862964, + ]), + Fq::from_montgomery_limbs([ + 580513008010762079, + 829478851231913782, + 10526131895320013439, + 288889415938637383, + ]), + Fq::from_montgomery_limbs([ + 9443502181797148323, + 7700433399763019139, + 6523170715391691579, + 690320529397890241, + ]), + Fq::from_montgomery_limbs([ + 17385565262285073596, + 5652729129833809825, + 5754846028854174174, + 644301327458204078, + ]), + Fq::from_montgomery_limbs([ + 10591125214113881524, + 9225725266018596826, + 9355747915664481308, + 776410040105357079, + ]), + Fq::from_montgomery_limbs([ + 9691894789652129853, + 14667119801492707274, + 4616580392236285481, + 911862737929211265, + ]), + Fq::from_montgomery_limbs([ + 5328612994946451300, + 11901467171940119902, + 12066779857870668281, + 563430691473174027, + ]), + Fq::from_montgomery_limbs([ + 5440290565189005724, + 907133565222704805, + 17434239031512456810, + 1307317854813232623, + ]), + Fq::from_montgomery_limbs([ + 1968218328054856894, + 2870644718005301826, + 11704111566790320318, + 859557807871195562, + ]), + Fq::from_montgomery_limbs([ + 9665243622030788996, + 3894043111862548693, + 8651495608452602974, + 196890012228714384, + ]), + Fq::from_montgomery_limbs([ + 1811318098116764117, + 13655150694370398684, + 6815946900059011917, + 290581066009768770, + ]), + Fq::from_montgomery_limbs([ + 5291662797603414486, + 9976505778352937130, + 18094101094996988099, + 1244544548315716916, + ]), + Fq::from_montgomery_limbs([ + 9550922411414470754, + 2559237915370255061, + 4289970449795683516, + 700825515431345401, + ]), + Fq::from_montgomery_limbs([ + 2966982422777393142, + 3218865522692669697, + 18384778728203892883, + 1101167759984396250, + ]), + Fq::from_montgomery_limbs([ + 2248950665261207727, + 17785118295943931326, + 17515375671127827105, + 271356461720641826, + ]), + Fq::from_montgomery_limbs([ + 2914870987885463507, + 10687584786677185088, + 9928447420467895555, + 897829002169041990, + ]), + Fq::from_montgomery_limbs([ + 9461028554882623448, + 3241431013683194658, + 4200859715375860214, + 247909540912074667, + ]), + Fq::from_montgomery_limbs([ + 9484762440333250094, + 9154823463484785662, + 5077140138132238606, + 1217948890232839466, + ]), + Fq::from_montgomery_limbs([ + 1721708237225335663, + 6589142598549247219, + 16963982649759394752, + 1325370920515859453, + ]), + Fq::from_montgomery_limbs([ + 1581154353773201694, + 8859491775898173368, + 3478556371389172479, + 761951195116054505, + ]), + Fq::from_montgomery_limbs([ + 5414431534772354985, + 5784939336020461618, + 8193906688438115902, + 619056837793590578, + ]), + Fq::from_montgomery_limbs([ + 5158566907177787182, + 510437656260968539, + 18375886464296814687, + 496771913288779260, + ]), + Fq::from_montgomery_limbs([ + 646494282535877757, + 12737151480704198413, + 5471421123526354063, + 634833038935883700, + ]), + Fq::from_montgomery_limbs([ + 16181443408673327918, + 1926257882480036072, + 190463000805340911, + 725721205978748339, + ]), + Fq::from_montgomery_limbs([ + 7167760716023892074, + 5428322849307462840, + 14114178188915343377, + 442277493806724508, + ]), + Fq::from_montgomery_limbs([ + 9842757490151171477, + 12090204626601182995, + 4235533359914016519, + 235018089373226021, + ]), + Fq::from_montgomery_limbs([ + 689571657822682190, + 10120322490102263749, + 15349544629296264734, + 879110129942909963, + ]), + Fq::from_montgomery_limbs([ + 10848673159730542826, + 4254896082380917657, + 7095278498028251644, + 1283578418017245899, + ]), + Fq::from_montgomery_limbs([ + 11397620827145756612, + 12197349421718102268, + 667097273385403287, + 776832025612247811, + ]), + Fq::from_montgomery_limbs([ + 9536830619644896323, + 4636833749605880653, + 12285714887794138165, + 1202400709127503383, + ]), + Fq::from_montgomery_limbs([ + 12430146514789240945, + 4526156431412134307, + 513622053209881149, + 214778917602192418, + ]), + Fq::from_montgomery_limbs([ + 6167098201419516498, + 3154640343084703344, + 14434779005902723423, + 733632272342828673, + ]), + Fq::from_montgomery_limbs([ + 18346541912745902187, + 17556217100268103816, + 14141252440750669936, + 569875244889036285, + ]), + Fq::from_montgomery_limbs([ + 15618469611711155008, + 8545147381062171474, + 13019086273197685281, + 567609712932306745, + ]), + Fq::from_montgomery_limbs([ + 10102215164832802529, + 12690048864743685174, + 5165853392556586922, + 270489738300122432, + ]), + Fq::from_montgomery_limbs([ + 11927164480530891201, + 14108489374813791633, + 13017388607106060581, + 850938729783185225, + ]), + Fq::from_montgomery_limbs([ + 17624557745440616873, + 2058796150101806399, + 3985511902134676603, + 388277619947822053, + ]), + Fq::from_montgomery_limbs([ + 2514382380191783963, + 14675210002114941075, + 17998140577033030519, + 386023351355332372, + ]), + Fq::from_montgomery_limbs([ + 10528288814462561256, + 8933204649364546390, + 14874592129223984742, + 399487853473549061, + ]), + Fq::from_montgomery_limbs([ + 5664751596212948671, + 6514969831451331945, + 12061422083014489160, + 933043664098111606, + ]), + Fq::from_montgomery_limbs([ + 12225851766128513711, + 17952953998987374262, + 13430826736801915124, + 1339971583679078644, + ]), + Fq::from_montgomery_limbs([ + 1845651887319106020, + 6930431492749731513, + 10484176960040080733, + 1170790578042537798, + ]), + Fq::from_montgomery_limbs([ + 6348862923042548556, + 1486875087558341712, + 4194544242438091841, + 78164005256144789, + ]), + Fq::from_montgomery_limbs([ + 14692463016290478473, + 9329360702930196569, + 1183214256895952754, + 471672221434976115, + ]), + Fq::from_montgomery_limbs([ + 12425146353419210200, + 11291312622557382836, + 17924529967710695385, + 316781213195510748, + ]), + Fq::from_montgomery_limbs([ + 18081335327542674793, + 17730828508504228247, + 15095343772187852738, + 496240897850542584, + ]), + Fq::from_montgomery_limbs([ + 6906018396868182531, + 7580743900120262926, + 1967444667836204859, + 273417108766582414, + ]), + Fq::from_montgomery_limbs([ + 16469004144906175061, + 6719414013547880652, + 7667039018964612703, + 450462562192687741, + ]), + Fq::from_montgomery_limbs([ + 3699459642673757801, + 8364096682669340023, + 10547343127916338322, + 1039413061935527341, + ]), + Fq::from_montgomery_limbs([ + 2771106982987870684, + 8573563587841378420, + 1206719325810700776, + 143426260059118164, + ]), + Fq::from_montgomery_limbs([ + 4238031571774841747, + 10683460310325108305, + 10841990503446643706, + 1301654934696530594, + ]), + Fq::from_montgomery_limbs([ + 5203929344429628388, + 16885411007452841607, + 17902872474369879449, + 255936061345264752, + ]), + Fq::from_montgomery_limbs([ + 16419947603551223738, + 15661157019396954707, + 3821221238374718246, + 416126177086460787, + ]), + Fq::from_montgomery_limbs([ + 16922553208005265111, + 16360160113507055509, + 536165461233550481, + 608549986932555649, + ]), + Fq::from_montgomery_limbs([ + 3592206260685120065, + 1954831133507660101, + 5600597071609130865, + 213648140091026624, + ]), + Fq::from_montgomery_limbs([ + 6516082392033585373, + 13946838009919256327, + 6452501836291584617, + 506431739097044218, + ]), + Fq::from_montgomery_limbs([ + 5518181572807062513, + 292110089321494827, + 8886174429861609032, + 814625545290394060, + ]), + Fq::from_montgomery_limbs([ + 12610347423199665749, + 17943367344775386000, + 17093121972053566454, + 556259058966026962, + ]), + Fq::from_montgomery_limbs([ + 5583294814190562448, + 18088402493981602497, + 15928392856949829098, + 901622636021551608, + ]), + Fq::from_montgomery_limbs([ + 16249951298748852814, + 6111361788233877783, + 12919350091432296884, + 721226010556420107, + ]), + Fq::from_montgomery_limbs([ + 2218172102857239703, + 2329323851667514953, + 6784983166719863241, + 993993486987443276, + ]), + Fq::from_montgomery_limbs([ + 14394544906593037198, + 15461851001194987466, + 12193473059473668298, + 358314776306336360, + ]), + Fq::from_montgomery_limbs([ + 2603326905829233946, + 16916036572436423298, + 5790056800663566282, + 1283614572025968285, + ]), + Fq::from_montgomery_limbs([ + 5913046777942823275, + 8211910935104269782, + 17190335617208567380, + 38682663530408751, + ]), + Fq::from_montgomery_limbs([ + 6279799617741999852, + 2368459429864835947, + 13817854282822876412, + 857599403523844060, + ]), + Fq::from_montgomery_limbs([ + 13513221728804468015, + 11648472211124988287, + 16337147311151149281, + 1213356362315889859, + ]), + Fq::from_montgomery_limbs([ + 6735193215800666100, + 13415126246050738636, + 6546772491702052570, + 864959054725113379, + ]), + Fq::from_montgomery_limbs([ + 13946560916675101048, + 1305536234013471373, + 1996487601117501987, + 6637280482434640, + ]), + Fq::from_montgomery_limbs([ + 17986217868852303932, + 266126649469053928, + 4699823734038470617, + 1235954369265597233, + ]), + Fq::from_montgomery_limbs([ + 9706578390759094801, + 4557052655228011544, + 6501501161504104166, + 300118669717388750, + ]), + Fq::from_montgomery_limbs([ + 17271021878237926614, + 16508898608489641541, + 2510098231880106517, + 1253549827753884905, + ]), + Fq::from_montgomery_limbs([ + 16081696380667951121, + 12546061674505954303, + 3027939816911481659, + 1326122367352440135, + ]), + Fq::from_montgomery_limbs([ + 8750820783999769857, + 14131264523532409831, + 11860451755197446498, + 745462829225755593, + ]), + Fq::from_montgomery_limbs([ + 7819519394598054633, + 7533208822188068621, + 3889432398222336031, + 176964346604581200, + ]), + Fq::from_montgomery_limbs([ + 13626588278396502750, + 15706390030365469804, + 12311149232441048374, + 610208895283453621, + ]), + Fq::from_montgomery_limbs([ + 11094868539621714049, + 1330865564750703444, + 8208579708506329523, + 1146297945936422016, + ]), + Fq::from_montgomery_limbs([ + 7814348133249287361, + 6078857359953567878, + 15411726589694581351, + 1299224180894534955, + ]), + Fq::from_montgomery_limbs([ + 8835381130778819320, + 134779635200388096, + 15334224426829348450, + 785788572858947262, + ]), + Fq::from_montgomery_limbs([ + 16203055023538295629, + 13066812413033753111, + 13966479479457537321, + 675899367132765792, + ]), + Fq::from_montgomery_limbs([ + 8545027219899966991, + 6186973227993574577, + 3038538378161392821, + 535103590192673792, + ]), + Fq::from_montgomery_limbs([ + 3360320054957481727, + 34336684756912399, + 3413779266271394009, + 764051173981439036, + ]), + Fq::from_montgomery_limbs([ + 293023250682873552, + 7322391841105288851, + 198244575944514326, + 656738111777844461, + ]), + Fq::from_montgomery_limbs([ + 18423107368729444354, + 5597408372052789576, + 7207721424788749840, + 943687777186537434, + ]), + Fq::from_montgomery_limbs([ + 13170086198505174331, + 15859783812716989104, + 5301807370963313339, + 799729083241888205, + ]), + Fq::from_montgomery_limbs([ + 17279707292509004232, + 10595487011792355137, + 12602364184919926920, + 311754230366163159, + ]), + Fq::from_montgomery_limbs([ + 8130970296785420178, + 2169620052609587269, + 1837093242073059498, + 276242467334991300, + ]), + Fq::from_montgomery_limbs([ + 15139243365203952649, + 4858541150918282204, + 1228673366499097007, + 1293322423335373790, + ]), + Fq::from_montgomery_limbs([ + 15413937563393284083, + 365038001085082591, + 11386425434875288889, + 291771874675930828, + ]), + Fq::from_montgomery_limbs([ + 3865668766578896210, + 14190581838784817460, + 2274316418059288551, + 870991438678094683, + ]), + Fq::from_montgomery_limbs([ + 9571157470530489958, + 4980823355121973943, + 5333320516499456270, + 770038796278147152, + ]), + Fq::from_montgomery_limbs([ + 16981726629451591296, + 5326474426552210602, + 1524717641929835760, + 219842939123356623, + ]), + Fq::from_montgomery_limbs([ + 16039208901368659229, + 5184640515669419530, + 3080932410472693273, + 510043620105971072, + ]), + Fq::from_montgomery_limbs([ + 10111763974722315511, + 8329709076294929314, + 16998679271562967459, + 574065224827752177, + ]), + Fq::from_montgomery_limbs([ + 8462560254681779659, + 10954941970268851750, + 14488455499782134046, + 963141804021766550, + ]), + Fq::from_montgomery_limbs([ + 8265856446621399759, + 16247707484341474163, + 12400770599134010433, + 771647552338284605, + ]), + Fq::from_montgomery_limbs([ + 5671942973524499, + 18330128788177211715, + 4789615159654137053, + 622759709526318785, + ]), + Fq::from_montgomery_limbs([ + 17479950722059179918, + 7049818057003906554, + 10084589816123170899, + 1193808990238611595, + ]), + Fq::from_montgomery_limbs([ + 896116343457540936, + 2638281787069340966, + 3380620512921535857, + 36644632120836151, + ]), + Fq::from_montgomery_limbs([ + 2322146546165600970, + 271027138366968218, + 7162645116150464142, + 441026262100973114, + ]), + Fq::from_montgomery_limbs([ + 11627404673587174924, + 1016523621299971825, + 8777376750651265173, + 904797647346869914, + ]), + Fq::from_montgomery_limbs([ + 2336599983193427372, + 18294536733010623722, + 1910254562936909612, + 288459876244919538, + ]), + Fq::from_montgomery_limbs([ + 10866222389981094234, + 12754738301243938778, + 2023962300189713384, + 841827876240589471, + ]), + Fq::from_montgomery_limbs([ + 12337869057490259818, + 9301235609521246009, + 16444168617638171143, + 1108049112276481315, + ]), + Fq::from_montgomery_limbs([ + 18388904709130326983, + 14432270782760350172, + 5671872767281599553, + 996264049295637410, + ]), + Fq::from_montgomery_limbs([ + 2918495984421967960, + 15152292474410287951, + 16695048790099726675, + 206789987868447903, + ]), + Fq::from_montgomery_limbs([ + 6798036226759712530, + 2524547494567206246, + 343094056066178021, + 1079202981664139204, + ]), + Fq::from_montgomery_limbs([ + 283923512386736187, + 6373209277312452652, + 11471152742161283191, + 352597911054493754, + ]), + Fq::from_montgomery_limbs([ + 18344480346791250887, + 6055456955702765744, + 13357935878541036141, + 1170362631105533341, + ]), + Fq::from_montgomery_limbs([ + 17978397370482672109, + 5066451535613649009, + 14053101851847429570, + 384003300586620459, + ]), + Fq::from_montgomery_limbs([ + 6537240767762022960, + 15287887514003130639, + 13714824082467376651, + 325998042020099848, + ]), + Fq::from_montgomery_limbs([ + 4220213521712332659, + 17903257264224768614, + 14353077305493411978, + 1217616808421443849, + ]), + Fq::from_montgomery_limbs([ + 6303107750424964008, + 10553099269256611636, + 5652309430855981542, + 809187312341384962, + ]), + Fq::from_montgomery_limbs([ + 1467640326258074734, + 9958994673877282208, + 948807165231437865, + 847979042319462524, + ]), + Fq::from_montgomery_limbs([ + 14465965197425638820, + 1065990778266164589, + 2272519010377842609, + 171604326652711548, + ]), + Fq::from_montgomery_limbs([ + 16535399098764373288, + 6722849851726415551, + 12327525818310696665, + 617153762162922214, + ]), + Fq::from_montgomery_limbs([ + 16271640629055517264, + 6432350282845335097, + 8618264300933865260, + 264879473167088472, + ]), + Fq::from_montgomery_limbs([ + 9343764438142603568, + 4076892716460943411, + 4516415268764304436, + 15742193002987304, + ]), + Fq::from_montgomery_limbs([ + 11522515971258098144, + 3066993658503053898, + 17512877804099724909, + 611356418591586870, + ]), + Fq::from_montgomery_limbs([ + 4963578364552643616, + 6202702392079615379, + 7168882355307838637, + 299344600077925413, + ]), + Fq::from_montgomery_limbs([ + 14129405866465653759, + 354882826696964962, + 9660427351909071801, + 291149128932052640, + ]), + Fq::from_montgomery_limbs([ + 6569686896435195187, + 1896994952028172314, + 2117936942259387423, + 1226223740596210813, + ]), + Fq::from_montgomery_limbs([ + 8136826296150976656, + 5114560834461259857, + 12698438831882127582, + 1064812274674793315, + ]), + Fq::from_montgomery_limbs([ + 5204762908686848050, + 18170247715344035008, + 10079839806977450219, + 1015117163163578828, + ]), + Fq::from_montgomery_limbs([ + 1971186989634095352, + 5677558375626169162, + 3790083583317699341, + 158130166070339790, + ]), + Fq::from_montgomery_limbs([ + 9180297996268451616, + 10521870846784715198, + 11257197750166742798, + 1008680790543022462, + ]), + Fq::from_montgomery_limbs([ + 15102432377621017232, + 824737829862625480, + 15733286904587679385, + 359217550415334382, + ]), + Fq::from_montgomery_limbs([ + 4981259850785194804, + 15036275071388584091, + 17758791361697138722, + 236481669158055589, + ]), + Fq::from_montgomery_limbs([ + 3901233362525026592, + 12813965168957277386, + 5314390603519503713, + 998031094116574634, + ]), + Fq::from_montgomery_limbs([ + 4078498358432220507, + 12075726151602811779, + 5342542781210762674, + 21775695708843112, + ]), + Fq::from_montgomery_limbs([ + 13735056988005095110, + 9135371967743228564, + 6185376342737833602, + 666002395605514749, + ]), + Fq::from_montgomery_limbs([ + 18046228494581227779, + 8202114407403963695, + 4947702695068466084, + 788320793950394154, + ]), + Fq::from_montgomery_limbs([ + 7218302974216051660, + 3228464294576983613, + 6671727537595126477, + 173754647728010839, + ]), + Fq::from_montgomery_limbs([ + 7621257321835633802, + 8049874917307223403, + 9478314901912088133, + 870251875807451739, + ]), + Fq::from_montgomery_limbs([ + 5044996355847148919, + 273615366352511195, + 4942152417670343549, + 199398188932346157, + ]), + Fq::from_montgomery_limbs([ + 2595093843514271275, + 1154391123098543540, + 4985894556505531500, + 854386142979270925, + ]), + Fq::from_montgomery_limbs([ + 12759949881257920813, + 1010457605698465717, + 5217636609151955807, + 817084911938507107, + ]), + Fq::from_montgomery_limbs([ + 5979737281050353100, + 3539786440569025402, + 14471457140846241143, + 907982120351578122, + ]), + Fq::from_montgomery_limbs([ + 16416626656337038566, + 752298127295719085, + 866476478245896231, + 830777061413161901, + ]), + Fq::from_montgomery_limbs([ + 17284526810241082338, + 13213233959887135278, + 2713075662623866960, + 1171532591409183723, + ]), + Fq::from_montgomery_limbs([ + 8064354122312926171, + 4789249084747322790, + 9919523931750221465, + 419197152698850604, + ]), + Fq::from_montgomery_limbs([ + 16629353489243762868, + 11598883503129680580, + 278636461422073174, + 1203042448092989642, + ]), + Fq::from_montgomery_limbs([ + 16545356932968522584, + 10146757853340947518, + 2437689509695855762, + 464048598784979390, + ]), + Fq::from_montgomery_limbs([ + 5331959515776232924, + 3487514764868921659, + 5860818581382620461, + 167831223077979532, + ]), + Fq::from_montgomery_limbs([ + 2682933818861368295, + 7444683236761914337, + 2283469126638096803, + 272174229926312669, + ]), + Fq::from_montgomery_limbs([ + 5483054922977937779, + 318986619952765070, + 4791617305206485237, + 1275035358174361434, + ]), + Fq::from_montgomery_limbs([ + 4586602402683656583, + 11875566498302421311, + 560651239278356123, + 130789238180500900, + ]), + Fq::from_montgomery_limbs([ + 13475546304629005641, + 1809680849885580336, + 6148758205685753344, + 1015272727127650918, + ]), + Fq::from_montgomery_limbs([ + 18199016777093209980, + 5614538780880978862, + 14532750892253808663, + 1120673202287670548, + ]), + Fq::from_montgomery_limbs([ + 7979559541587633926, + 1549411440381912045, + 13170209322716529702, + 561270408065407020, + ]), + Fq::from_montgomery_limbs([ + 15279595015844449808, + 17853680372412830934, + 12690878740975697658, + 190806245751470341, + ]), + Fq::from_montgomery_limbs([ + 1933135302920649522, + 2329259343686385217, + 5986214093116711712, + 437917490927487372, + ]), + Fq::from_montgomery_limbs([ + 12529279623600953551, + 4004103524068207361, + 17383023741426003338, + 13318527301206951, + ]), + Fq::from_montgomery_limbs([ + 18009701980761163605, + 4547817745757475315, + 17631087904948254977, + 246989508356009632, + ]), + Fq::from_montgomery_limbs([ + 14234349688403493927, + 2241500746438474640, + 1648115951043925356, + 529436668472805988, + ]), + Fq::from_montgomery_limbs([ + 14111082894836574658, + 4098316701848925924, + 3720696502600521690, + 977251546365326678, + ]), + Fq::from_montgomery_limbs([ + 2443616537395128437, + 13678987928408466225, + 16807254711436855033, + 601335544571650468, + ]), + Fq::from_montgomery_limbs([ + 12969308795370128797, + 1532941629572075493, + 9106717660115400778, + 1089446992863060197, + ]), + Fq::from_montgomery_limbs([ + 16646776755234291239, + 15128084475268734564, + 11393204553412007553, + 838617701679652479, + ]), + Fq::from_montgomery_limbs([ + 13260373450845806376, + 13305876398081489975, + 15328643090518932448, + 818860400916977295, + ]), + Fq::from_montgomery_limbs([ + 17906146044330204615, + 17863342707079833111, + 13022629852534083638, + 1328181038047481506, + ]), + Fq::from_montgomery_limbs([ + 10820137181908478766, + 5520339361329099025, + 6461544718626485262, + 866252272778375002, + ]), + Fq::from_montgomery_limbs([ + 14688227483907802311, + 2519702212313051686, + 8103674382557125023, + 689198778502256390, + ]), + Fq::from_montgomery_limbs([ + 4422411727383004887, + 38494189414052956, + 7231885838058987299, + 306462357471198280, + ]), + Fq::from_montgomery_limbs([ + 8147364543363235664, + 5966406127022341654, + 9906078756256022488, + 1154653879133001463, + ]), + Fq::from_montgomery_limbs([ + 17616667317393619629, + 8830117592103096180, + 10242736408532701810, + 367000561528732856, + ]), + Fq::from_montgomery_limbs([ + 9905329343001728010, + 254719974105054165, + 11980601159747742583, + 1280526116709693810, + ]), + Fq::from_montgomery_limbs([ + 6868659545386222523, + 8844781874090119286, + 10793326335526947043, + 1292404946512391578, + ]), + Fq::from_montgomery_limbs([ + 17850102253172036488, + 16878929783220491580, + 12148612402256632289, + 1179496799944407367, + ]), + Fq::from_montgomery_limbs([ + 6929880085758156619, + 4120392668704643628, + 11836473204519946866, + 28485748677085595, + ]), + Fq::from_montgomery_limbs([ + 7800178991375085209, + 14774867153037785291, + 11799747171946617460, + 602919953250380891, + ]), + Fq::from_montgomery_limbs([ + 17054340314101625508, + 4698130283999778899, + 4742470825260640374, + 959009998492737982, + ]), + Fq::from_montgomery_limbs([ + 2393186109518086396, + 6858067904112781658, + 250925929886996803, + 813730459239750430, + ]), + Fq::from_montgomery_limbs([ + 2218833032329181388, + 552395772797949524, + 6530705058787819865, + 835936496067889425, + ]), + Fq::from_montgomery_limbs([ + 3262056243364729906, + 11024409760304501943, + 1452785405793489479, + 142671579891481074, + ]), + Fq::from_montgomery_limbs([ + 6735174709999307467, + 2125505582074675403, + 4509781828031030374, + 108593715289115480, + ]), + Fq::from_montgomery_limbs([ + 498171931293929377, + 12913268518770675643, + 1815201461805994707, + 946978086066606985, + ]), + Fq::from_montgomery_limbs([ + 16200210184230174374, + 3713355895827454434, + 14718940205181940826, + 1064592931466804937, + ]), + Fq::from_montgomery_limbs([ + 13536929950841620194, + 3713133295284324907, + 4736815980159531884, + 758794941833570859, + ]), + Fq::from_montgomery_limbs([ + 861407446467585047, + 12743454769660930162, + 7792877431815389510, + 943863054041968511, + ]), + Fq::from_montgomery_limbs([ + 10460589994003660312, + 13699084750678449563, + 6912858821101282428, + 983481932576822508, + ]), + Fq::from_montgomery_limbs([ + 6395189001561693172, + 909428077299806733, + 14034485419172147354, + 892696750070934303, + ]), + Fq::from_montgomery_limbs([ + 16314238556028756835, + 12721184065200972840, + 4215220052710637306, + 969581304771032797, + ]), + Fq::from_montgomery_limbs([ + 15243970771075793563, + 7265733909785546869, + 11400286633658577098, + 227245542346740687, + ]), + Fq::from_montgomery_limbs([ + 2661479521314659209, + 14172387955084721030, + 12674281103636294869, + 1085804564589438497, + ]), + Fq::from_montgomery_limbs([ + 18227002291515532973, + 15774793184931310359, + 6437329245046594308, + 396285509955206909, + ]), + Fq::from_montgomery_limbs([ + 6914466148291815333, + 4167126971788791314, + 4527924238135969746, + 1300810520025754908, + ]), + Fq::from_montgomery_limbs([ + 14395967678844513466, + 14422556923576200015, + 191387961653560003, + 729196198527215531, + ]), + Fq::from_montgomery_limbs([ + 7196572830394614073, + 16632412363674496211, + 16792884878696839152, + 457278866683205345, + ]), + Fq::from_montgomery_limbs([ + 9831172453260561658, + 4633416154293085629, + 748737550195349212, + 1194104217944615385, + ]), + Fq::from_montgomery_limbs([ + 6973573180719962464, + 5007888960458011612, + 8062128917836753116, + 744480032753315017, + ]), + Fq::from_montgomery_limbs([ + 16633938277270943002, + 664463662401382838, + 12794755704372974494, + 554917201554530927, + ]), + Fq::from_montgomery_limbs([ + 13757343111051456383, + 2277523607348509991, + 12211485585154160377, + 1191938841499200958, + ]), + Fq::from_montgomery_limbs([ + 2099651241677249799, + 16005931431677972788, + 4057176764026877324, + 707860945208429696, + ]), + Fq::from_montgomery_limbs([ + 2165339887464167998, + 7647994110899007446, + 5094066233657896225, + 709010531879165945, + ]), + Fq::from_montgomery_limbs([ + 3831632088851469384, + 13057932256077855788, + 8222411545973514625, + 843256628060293546, + ]), + Fq::from_montgomery_limbs([ + 11183603857561726385, + 11584937131366886392, + 10218687281854749192, + 1214449080735682681, + ]), + Fq::from_montgomery_limbs([ + 4616248479126876226, + 7741252456972311173, + 15728165050985347386, + 1181171544306467254, + ]), + Fq::from_montgomery_limbs([ + 9990077617045592495, + 15002413693275212677, + 15144228310702885841, + 620548150749293884, + ]), + Fq::from_montgomery_limbs([ + 11425804337294316958, + 7221778875452068210, + 12010104440786017368, + 1011771244946000970, + ]), + Fq::from_montgomery_limbs([ + 5747596481169639613, + 1104073856460899094, + 9146430142057149431, + 765525234705139109, + ]), + Fq::from_montgomery_limbs([ + 3812959281946602235, + 14465851686889375345, + 10322234575416122404, + 932678259808721672, + ]), + Fq::from_montgomery_limbs([ + 8276661801860095514, + 14823492496323764121, + 13701004212965117137, + 355220593809969742, + ]), + Fq::from_montgomery_limbs([ + 2822736401887161227, + 7201497867288478670, + 17622780267628213622, + 1209422737251283832, + ]), + Fq::from_montgomery_limbs([ + 6817376778442520781, + 4154445874851092990, + 16808416654356258571, + 874896460001984569, + ]), + Fq::from_montgomery_limbs([ + 6944399192847445119, + 11369644718917282470, + 2667187192361233639, + 556544027948695271, + ]), + Fq::from_montgomery_limbs([ + 5985721645222736084, + 16218645614583785224, + 4868776535917705543, + 340479768034825225, + ]), + Fq::from_montgomery_limbs([ + 423267142339143725, + 10672508482801134053, + 10023426192840323691, + 143702757733007341, + ]), + Fq::from_montgomery_limbs([ + 16968412399372724525, + 8496071221427589946, + 10167242106830249881, + 948296106142898645, + ]), + Fq::from_montgomery_limbs([ + 6077151186983453387, + 15293901317827186404, + 14701565635632126093, + 255295815714470534, + ]), + Fq::from_montgomery_limbs([ + 2340976401132931162, + 15060372762537152076, + 53380542410648341, + 264784757483154853, + ]), + Fq::from_montgomery_limbs([ + 18327041937543135548, + 9711578301735907982, + 14543056172433622210, + 917652325595281384, + ]), + Fq::from_montgomery_limbs([ + 16912960214874381489, + 15496697595960727025, + 10003663904717205393, + 692183641514800495, + ]), + Fq::from_montgomery_limbs([ + 631791826835558467, + 6501686441307729051, + 3099396544628491613, + 61251147299142612, + ]), + Fq::from_montgomery_limbs([ + 17691931260195143223, + 8098931117406259915, + 9971027644422011861, + 1136957700009068910, + ]), + Fq::from_montgomery_limbs([ + 2062604623511907833, + 2446845511672682965, + 13161140743748372941, + 284099378520214643, + ]), + Fq::from_montgomery_limbs([ + 10652315713215424934, + 14813440799481647832, + 13466669344664711667, + 1176746728204537787, + ]), + Fq::from_montgomery_limbs([ + 340206030049443520, + 12731571821339495677, + 14595218864578621848, + 861695502136866474, + ]), + Fq::from_montgomery_limbs([ + 3281942488953589693, + 3787812821549520969, + 9952331543838149583, + 1038372048519458034, + ]), + Fq::from_montgomery_limbs([ + 18390450269856250573, + 10364014773689157664, + 17543739276626667853, + 671606213095247190, + ]), + Fq::from_montgomery_limbs([ + 12094846023530852586, + 13769932740865047240, + 113296399784931588, + 214330261285932478, + ]), + Fq::from_montgomery_limbs([ + 6374588877936433558, + 11607665174546753642, + 15847675340170713041, + 474145143590361300, + ]), + Fq::from_montgomery_limbs([ + 4088002413776997222, + 16030858922743461837, + 4313473177343544055, + 817302900123673764, + ]), + Fq::from_montgomery_limbs([ + 18216186189548814543, + 5687648301273358200, + 6564098766262925833, + 235647764529877689, + ]), + Fq::from_montgomery_limbs([ + 1421650618584051851, + 9669410210003093316, + 15430467067773365518, + 994269415526604309, + ]), + Fq::from_montgomery_limbs([ + 7574559796775011993, + 9643962694113220666, + 1013275434882478619, + 543427156325963008, + ]), + Fq::from_montgomery_limbs([ + 4532353768594877907, + 2433286855157726742, + 15167390808651362948, + 914159030044677082, + ]), + Fq::from_montgomery_limbs([ + 14155199821083030453, + 3642619697360819367, + 7765405773737076472, + 1202115259646869817, + ]), + Fq::from_montgomery_limbs([ + 16335533268534142579, + 4358492749042076660, + 16385044626223358243, + 847268434257421024, + ]), + Fq::from_montgomery_limbs([ + 726136436292617217, + 4735276118883290434, + 6495677390337301519, + 1007951275499954400, + ]), + Fq::from_montgomery_limbs([ + 1441892049918589996, + 16125120862288806381, + 5244917656153261337, + 108755599353706277, + ]), + Fq::from_montgomery_limbs([ + 9330223445766086137, + 9406197553353640417, + 13281468059023600014, + 500503138812404763, + ]), + Fq::from_montgomery_limbs([ + 5355456155777194776, + 15418542913049291849, + 7681885321566295504, + 1188094463923126996, + ]), + Fq::from_montgomery_limbs([ + 11882193142358058793, + 4624069509548102427, + 6735235437551193554, + 962114122876706035, + ]), + Fq::from_montgomery_limbs([ + 1819083831857771980, + 8349663267034291058, + 14403983179525206765, + 942284040773068417, + ]), + Fq::from_montgomery_limbs([ + 7024062436534453440, + 15203692147142724388, + 17082973923084045231, + 1191890185052815108, + ]), + Fq::from_montgomery_limbs([ + 6672719206476059341, + 18362672287252020084, + 3555226216430454216, + 300718449399370145, + ]), + Fq::from_montgomery_limbs([ + 5828458911011841758, + 9271852277477872143, + 18378348640149073615, + 591074353691784318, + ]), + Fq::from_montgomery_limbs([ + 15397757499179479361, + 1878199828613873660, + 4164621900891789384, + 558990401377082502, + ]), + Fq::from_montgomery_limbs([ + 11069496558892348093, + 10253211614498485032, + 11458203419889384673, + 575447664584685933, + ]), + Fq::from_montgomery_limbs([ + 9808353214047792416, + 4805184465312945639, + 3985871967202506787, + 1229730183276593449, + ]), + Fq::from_montgomery_limbs([ + 8420435996312062450, + 11100705514596499443, + 1523101111273631766, + 639557004587150270, + ]), + Fq::from_montgomery_limbs([ + 15630012259368829028, + 15079774099427294323, + 16765804689810369633, + 834886070512612798, + ]), + Fq::from_montgomery_limbs([ + 2000344807995355152, + 8654391083188520616, + 13301563010992444431, + 490951127405891771, + ]), + Fq::from_montgomery_limbs([ + 11761875542266860374, + 709339183471929228, + 17682621289319303167, + 570040706396372700, + ]), + Fq::from_montgomery_limbs([ + 3366481512891059038, + 12720609556939839584, + 1707138651265172645, + 36940608792331559, + ]), + Fq::from_montgomery_limbs([ + 2427334396528044490, + 10170194639028880515, + 18243990154741074229, + 607502491270396977, + ]), + Fq::from_montgomery_limbs([ + 6267947100515031640, + 14520122887125811439, + 6695614471931546770, + 251319533602819784, + ]), + Fq::from_montgomery_limbs([ + 7663026857490478572, + 15777701966597798170, + 10617198553182548195, + 642318201966621785, + ]), + Fq::from_montgomery_limbs([ + 9959998770754152632, + 13119241263216166622, + 6328810982306793729, + 571460896430554998, + ]), + Fq::from_montgomery_limbs([ + 12042605027273090048, + 14859482580111939906, + 11509134713697889199, + 561895216440235106, + ]), + Fq::from_montgomery_limbs([ + 1156916933025613310, + 4529329408550568088, + 14286907616576238972, + 1309540780962817079, + ]), + Fq::from_montgomery_limbs([ + 7510365353910652337, + 14538991928012962248, + 4644117500717216624, + 1340316749461135700, + ]), + ]), + mds: MdsMatrix::<8, 7, 64, 49>::new_from_known([ + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 5443236819267423281, + 9444106377351672003, + 16592192658774520588, + 1198721234626210409, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 5443236819267423281, + 9444106377351672003, + 16592192658774520588, + 1198721234626210409, + ]), + Fq::from_montgomery_limbs([ + 13217949757478296855, + 18361600593446830079, + 18223280994163007859, + 471593720435477782, + ]), + ]), + alpha: Alpha::Exponent(17), + rounds: RoundNumbers { r_P: 31, r_F: 8 }, + optimized_mds: OptimizedMdsMatrices { + M_hat: SquareMatrix::<7, 49>::new_from_known([ + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 5443236819267423281, + 9444106377351672003, + 16592192658774520588, + 1198721234626210409, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 5443236819267423281, + 9444106377351672003, + 16592192658774520588, + 1198721234626210409, + ]), + Fq::from_montgomery_limbs([ + 13217949757478296855, + 18361600593446830079, + 18223280994163007859, + 471593720435477782, + ]), + ]), + v: Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + ]), + w: Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + ]), + M_prime: SquareMatrix::<8, 64>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 5443236819267423281, + 9444106377351672003, + 16592192658774520588, + 1198721234626210409, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 1152921504606846976]), + Fq::from_montgomery_limbs([ + 829043150522309210, + 7485532467658058089, + 17072453966431109601, + 610297755857677130, + ]), + Fq::from_montgomery_limbs([ + 18043687544558598371, + 8708325242362018018, + 16625116017321440141, + 277441131490434312, + ]), + Fq::from_montgomery_limbs([ + 1903578231313020389, + 13252279451564941743, + 6429417326301386859, + 900077037001125169, + ]), + Fq::from_montgomery_limbs([ + 14902495609461984461, + 16049616749407607193, + 8772353492731922841, + 1191393277823112260, + ]), + Fq::from_montgomery_limbs([ + 5443236819267423281, + 9444106377351672003, + 16592192658774520588, + 1198721234626210409, + ]), + Fq::from_montgomery_limbs([ + 13217949757478296855, + 18361600593446830079, + 18223280994163007859, + 471593720435477782, + ]), + ]), + M_doubleprime: SquareMatrix::<8, 64>::new_from_known([ + Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + Fq::from_montgomery_limbs([ + 5469465372454405746, + 11693688927749785195, + 9284229770381589387, + 263916402201309764, + ]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8025142443496737775, + 1611073224873590596, + 1595200312703520851, + 268362793599128279, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2646197433325367530, + 3327161674116363870, + 17523969835882673765, + 1224872920276084181, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3531022552160069605, + 1044916798369741293, + 13484540382795405112, + 975392012720575741, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3532672362950129848, + 13232567668052949956, + 3949082925084889589, + 1169300250855119928, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17405909644706202533, + 9068195655028130334, + 4993737853698066182, + 760630245260613434, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10760096219897954109, + 15819961273994906871, + 12000866060961275644, + 494051747708222359, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + ]), + M_inverse: SquareMatrix::<8, 64>::new_from_known([ + Fq::from_montgomery_limbs([ + 13084505025340709209, + 6658414703856389670, + 1229628874832604981, + 544699057731131701, + ]), + Fq::from_montgomery_limbs([ + 9271504314401065906, + 16573554673674659136, + 11112785265390720139, + 695302674280213266, + ]), + Fq::from_montgomery_limbs([ + 17755863455076530065, + 714019269282123475, + 2516777105896065646, + 758853547373067215, + ]), + Fq::from_montgomery_limbs([ + 18230149865394473823, + 17597653080170983126, + 8526134725373349310, + 254065511080298010, + ]), + Fq::from_montgomery_limbs([ + 12943062609168455850, + 4036522178185995734, + 13999395164871811986, + 158263095242933732, + ]), + Fq::from_montgomery_limbs([ + 9727917081763370379, + 12523860206965601712, + 6438415234309761598, + 578292727069385307, + ]), + Fq::from_montgomery_limbs([ + 4722164372208948539, + 6191995659471889704, + 9488304077820150497, + 383493821809394045, + ]), + Fq::from_montgomery_limbs([ + 6308417298426862088, + 11443735935349473316, + 5741617995111411363, + 1072746374115513684, + ]), + Fq::from_montgomery_limbs([ + 9271504314401065906, + 16573554673674659136, + 11112785265390720139, + 695302674280213266, + ]), + Fq::from_montgomery_limbs([ + 6461820328084053982, + 3713881430924031860, + 2384237101556363354, + 925204973024161309, + ]), + Fq::from_montgomery_limbs([ + 11045222492845432763, + 12330616953129622165, + 6721295490146207098, + 737212261478666249, + ]), + Fq::from_montgomery_limbs([ + 17374877272010299584, + 12910097275334870758, + 11030123918921243889, + 999547114982057960, + ]), + Fq::from_montgomery_limbs([ + 2710620113890028948, + 7440189668352585633, + 11434649235474493285, + 24415954842353912, + ]), + Fq::from_montgomery_limbs([ + 7017296967873341431, + 5083670538613016079, + 13450510072544819929, + 553876772227031394, + ]), + Fq::from_montgomery_limbs([ + 13756252569614172144, + 10114182252140374927, + 8424160399132869901, + 370135544443278065, + ]), + Fq::from_montgomery_limbs([ + 8192890567029291618, + 6189339163642963502, + 10515708329663122411, + 718287917303790275, + ]), + Fq::from_montgomery_limbs([ + 17755863455076530065, + 714019269282123475, + 2516777105896065646, + 758853547373067215, + ]), + Fq::from_montgomery_limbs([ + 11045222492845432763, + 12330616953129622165, + 6721295490146207098, + 737212261478666249, + ]), + Fq::from_montgomery_limbs([ + 1107303498763469844, + 5522738209527454529, + 7444362964372879018, + 94326278492989394, + ]), + Fq::from_montgomery_limbs([ + 17301615911438019293, + 6207101570101901683, + 6912719408314906153, + 670136716188149414, + ]), + Fq::from_montgomery_limbs([ + 8052773691804060961, + 7894827066734284032, + 17737200459541160653, + 1344927881702280038, + ]), + Fq::from_montgomery_limbs([ + 3579877764578944756, + 17358359975581377230, + 2902328015395623063, + 1076553286270705854, + ]), + Fq::from_montgomery_limbs([ + 7922495546740583511, + 13377932406425725078, + 312087136472518954, + 724215661521432074, + ]), + Fq::from_montgomery_limbs([ + 14304988956035390969, + 2978747834443270582, + 211153190861140083, + 1101825800236420991, + ]), + Fq::from_montgomery_limbs([ + 18230149865394473823, + 17597653080170983126, + 8526134725373349310, + 254065511080298010, + ]), + Fq::from_montgomery_limbs([ + 17374877272010299584, + 12910097275334870758, + 11030123918921243889, + 999547114982057960, + ]), + Fq::from_montgomery_limbs([ + 17301615911438019293, + 6207101570101901683, + 6912719408314906153, + 670136716188149414, + ]), + Fq::from_montgomery_limbs([ + 11280947822772662719, + 3998258523005585690, + 3083179120639342004, + 919842772758514385, + ]), + Fq::from_montgomery_limbs([ + 9288629788793402586, + 2259376874925369448, + 13217169487415398853, + 539099117435770765, + ]), + Fq::from_montgomery_limbs([ + 8430375547150652021, + 1001249403497996831, + 16789953243695164761, + 1344355087100203329, + ]), + Fq::from_montgomery_limbs([ + 527596723520651020, + 15187839531048996200, + 6255568353483246533, + 170911683896477388, + ]), + Fq::from_montgomery_limbs([ + 1734565667097520919, + 12020388067710193448, + 6095663732563761512, + 1138214739842689620, + ]), + Fq::from_montgomery_limbs([ + 12943062609168455850, + 4036522178185995734, + 13999395164871811986, + 158263095242933732, + ]), + Fq::from_montgomery_limbs([ + 2710620113890028948, + 7440189668352585633, + 11434649235474493285, + 24415954842353912, + ]), + Fq::from_montgomery_limbs([ + 8052773691804060961, + 7894827066734284032, + 17737200459541160653, + 1344927881702280038, + ]), + Fq::from_montgomery_limbs([ + 9288629788793402586, + 2259376874925369448, + 13217169487415398853, + 539099117435770765, + ]), + Fq::from_montgomery_limbs([ + 11829305752964125757, + 10778200385642703226, + 2095381984842221696, + 365296429444826263, + ]), + Fq::from_montgomery_limbs([ + 9209237328018148115, + 9013177660724622161, + 13411670809827118984, + 1159740245409298491, + ]), + Fq::from_montgomery_limbs([ + 1786760175787716883, + 16585118128488698423, + 3661827234912273881, + 1175179421357105610, + ]), + Fq::from_montgomery_limbs([ + 6997506992288193640, + 3314349379260916067, + 10669743096907430976, + 828027530724672872, + ]), + Fq::from_montgomery_limbs([ + 9727917081763370379, + 12523860206965601712, + 6438415234309761598, + 578292727069385307, + ]), + Fq::from_montgomery_limbs([ + 7017296967873341431, + 5083670538613016079, + 13450510072544819929, + 553876772227031394, + ]), + Fq::from_montgomery_limbs([ + 3579877764578944756, + 17358359975581377230, + 2902328015395623063, + 1076553286270705854, + ]), + Fq::from_montgomery_limbs([ + 8430375547150652021, + 1001249403497996831, + 16789953243695164761, + 1344355087100203329, + ]), + Fq::from_montgomery_limbs([ + 9209237328018148115, + 9013177660724622161, + 13411670809827118984, + 1159740245409298491, + ]), + Fq::from_montgomery_limbs([ + 2800053360411677182, + 7739112841912438666, + 4458443078052365313, + 1221561517743072277, + ]), + Fq::from_montgomery_limbs([ + 5714397546912390046, + 7204578223640664713, + 3369806468691410388, + 19539807714888073, + ]), + Fq::from_montgomery_limbs([ + 7912928165080095595, + 10691173171385779887, + 7900069818404182519, + 558654216499734169, + ]), + Fq::from_montgomery_limbs([ + 4722164372208948539, + 6191995659471889704, + 9488304077820150497, + 383493821809394045, + ]), + Fq::from_montgomery_limbs([ + 13756252569614172144, + 10114182252140374927, + 8424160399132869901, + 370135544443278065, + ]), + Fq::from_montgomery_limbs([ + 7922495546740583511, + 13377932406425725078, + 312087136472518954, + 724215661521432074, + ]), + Fq::from_montgomery_limbs([ + 527596723520651020, + 15187839531048996200, + 6255568353483246533, + 170911683896477388, + ]), + Fq::from_montgomery_limbs([ + 1786760175787716883, + 16585118128488698423, + 3661827234912273881, + 1175179421357105610, + ]), + Fq::from_montgomery_limbs([ + 5714397546912390046, + 7204578223640664713, + 3369806468691410388, + 19539807714888073, + ]), + Fq::from_montgomery_limbs([ + 11467623733094325177, + 12601944683740404995, + 14270804009154313170, + 1283543454792166291, + ]), + Fq::from_montgomery_limbs([ + 1591478553039085540, + 13629203225225281079, + 9223729349286412660, + 541375501705678927, + ]), + Fq::from_montgomery_limbs([ + 6308417298426862088, + 11443735935349473316, + 5741617995111411363, + 1072746374115513684, + ]), + Fq::from_montgomery_limbs([ + 8192890567029291618, + 6189339163642963502, + 10515708329663122411, + 718287917303790275, + ]), + Fq::from_montgomery_limbs([ + 14304988956035390969, + 2978747834443270582, + 211153190861140083, + 1101825800236420991, + ]), + Fq::from_montgomery_limbs([ + 1734565667097520919, + 12020388067710193448, + 6095663732563761512, + 1138214739842689620, + ]), + Fq::from_montgomery_limbs([ + 6997506992288193640, + 3314349379260916067, + 10669743096907430976, + 828027530724672872, + ]), + Fq::from_montgomery_limbs([ + 7912928165080095595, + 10691173171385779887, + 7900069818404182519, + 558654216499734169, + ]), + Fq::from_montgomery_limbs([ + 1591478553039085540, + 13629203225225281079, + 9223729349286412660, + 541375501705678927, + ]), + Fq::from_montgomery_limbs([ + 1183879673177082740, + 4195985459140120089, + 6602546398975040286, + 268356784116832629, + ]), + ]), + M_hat_inverse: SquareMatrix::<7, 49>::new_from_known([ + Fq::from_montgomery_limbs([ + 4596204885914937926, + 7838695242625897787, + 3035134948628881865, + 1207227057562625259, + ]), + Fq::from_montgomery_limbs([ + 15896440128761118173, + 15649465122428497798, + 4384954020081155217, + 913236075158308182, + ]), + Fq::from_montgomery_limbs([ + 2335397575999068166, + 14422783505571319241, + 2719190544357073120, + 274885737548821162, + ]), + Fq::from_montgomery_limbs([ + 9009029437947626511, + 7346990291023997455, + 3414440920242711508, + 50729493538167678, + ]), + Fq::from_montgomery_limbs([ + 1147572841630042462, + 8929633407603160962, + 14641836547291178689, + 426104246454882272, + ]), + Fq::from_montgomery_limbs([ + 17053865508971679549, + 2198382506890441430, + 11312636819879946010, + 1106661992673439325, + ]), + Fq::from_montgomery_limbs([ + 13854198271768011224, + 4053309739918946052, + 18433076019880982368, + 615216866081782140, + ]), + Fq::from_montgomery_limbs([ + 15896440128761118173, + 15649465122428497798, + 4384954020081155217, + 913236075158308182, + ]), + Fq::from_montgomery_limbs([ + 4761711418629517518, + 591743220415883789, + 2347216482122737487, + 541885199414988935, + ]), + Fq::from_montgomery_limbs([ + 16049706050976647208, + 9176322874162797755, + 12242590547654900654, + 61012554895502211, + ]), + Fq::from_montgomery_limbs([ + 10907149703911289876, + 345335516406280141, + 13671249158696272740, + 1076200797284812494, + ]), + Fq::from_montgomery_limbs([ + 3783029764742972160, + 8718337959668375608, + 9493474458284681386, + 1324609056502214356, + ]), + Fq::from_montgomery_limbs([ + 7820919546658569809, + 8474571377527450081, + 15463257988737541409, + 600187776405677822, + ]), + Fq::from_montgomery_limbs([ + 17765856891579054878, + 11653192174908829654, + 4966200605019140816, + 13151716642854399, + ]), + Fq::from_montgomery_limbs([ + 2335397575999068166, + 14422783505571319241, + 2719190544357073120, + 274885737548821162, + ]), + Fq::from_montgomery_limbs([ + 16049706050976647208, + 9176322874162797755, + 12242590547654900654, + 61012554895502211, + ]), + Fq::from_montgomery_limbs([ + 13442108051579804680, + 3187031622749351601, + 18435466452818364440, + 257424390549798158, + ]), + Fq::from_montgomery_limbs([ + 14787872399840322022, + 11612292071578382904, + 2915446897265489403, + 1027394734812832541, + ]), + Fq::from_montgomery_limbs([ + 14650186278276933856, + 11736505343490130034, + 4478509448304020774, + 790137565622286814, + ]), + Fq::from_montgomery_limbs([ + 16227186307902919639, + 13050765287152844350, + 6672057872444298207, + 1120660629979522345, + ]), + Fq::from_montgomery_limbs([ + 17280730943809781377, + 2101938472365641700, + 2221542087098170284, + 682975842437066220, + ]), + Fq::from_montgomery_limbs([ + 9009029437947626511, + 7346990291023997455, + 3414440920242711508, + 50729493538167678, + ]), + Fq::from_montgomery_limbs([ + 10907149703911289876, + 345335516406280141, + 13671249158696272740, + 1076200797284812494, + ]), + Fq::from_montgomery_limbs([ + 14787872399840322022, + 11612292071578382904, + 2915446897265489403, + 1027394734812832541, + ]), + Fq::from_montgomery_limbs([ + 9754754145024164416, + 9500194995930094065, + 4605218223030367360, + 489015282389927384, + ]), + Fq::from_montgomery_limbs([ + 11235823697266068713, + 9767911161281654263, + 15004902496107301847, + 1252504438181231825, + ]), + Fq::from_montgomery_limbs([ + 773466991163756584, + 6984379341355406564, + 2865211391772182450, + 1128797324971138943, + ]), + Fq::from_montgomery_limbs([ + 3783029764742972160, + 8718337959668375608, + 9493474458284681386, + 1324609056502214356, + ]), + Fq::from_montgomery_limbs([ + 1147572841630042462, + 8929633407603160962, + 14641836547291178689, + 426104246454882272, + ]), + Fq::from_montgomery_limbs([ + 3783029764742972160, + 8718337959668375608, + 9493474458284681386, + 1324609056502214356, + ]), + Fq::from_montgomery_limbs([ + 14650186278276933856, + 11736505343490130034, + 4478509448304020774, + 790137565622286814, + ]), + Fq::from_montgomery_limbs([ + 11235823697266068713, + 9767911161281654263, + 15004902496107301847, + 1252504438181231825, + ]), + Fq::from_montgomery_limbs([ + 10750604789646168140, + 372497979918419381, + 10429606583776526343, + 928966821232337907, + ]), + Fq::from_montgomery_limbs([ + 10962493869149920375, + 10887885654637674355, + 384224715829329873, + 165837155970255258, + ]), + Fq::from_montgomery_limbs([ + 2645295168975782308, + 13863838601458690618, + 7409022743292405220, + 617686796815916414, + ]), + Fq::from_montgomery_limbs([ + 17053865508971679549, + 2198382506890441430, + 11312636819879946010, + 1106661992673439325, + ]), + Fq::from_montgomery_limbs([ + 7820919546658569809, + 8474571377527450081, + 15463257988737541409, + 600187776405677822, + ]), + Fq::from_montgomery_limbs([ + 16227186307902919639, + 13050765287152844350, + 6672057872444298207, + 1120660629979522345, + ]), + Fq::from_montgomery_limbs([ + 773466991163756584, + 6984379341355406564, + 2865211391772182450, + 1128797324971138943, + ]), + Fq::from_montgomery_limbs([ + 10962493869149920375, + 10887885654637674355, + 384224715829329873, + 165837155970255258, + ]), + Fq::from_montgomery_limbs([ + 17704196732594477900, + 7529737242141985421, + 3056083190610322131, + 537754595320396000, + ]), + Fq::from_montgomery_limbs([ + 4588045927327100104, + 15273424236288740466, + 3730020508107780990, + 1184499396891674504, + ]), + Fq::from_montgomery_limbs([ + 13854198271768011224, + 4053309739918946052, + 18433076019880982368, + 615216866081782140, + ]), + Fq::from_montgomery_limbs([ + 17765856891579054878, + 11653192174908829654, + 4966200605019140816, + 13151716642854399, + ]), + Fq::from_montgomery_limbs([ + 17280730943809781377, + 2101938472365641700, + 2221542087098170284, + 682975842437066220, + ]), + Fq::from_montgomery_limbs([ + 3783029764742972160, + 8718337959668375608, + 9493474458284681386, + 1324609056502214356, + ]), + Fq::from_montgomery_limbs([ + 2645295168975782308, + 13863838601458690618, + 7409022743292405220, + 617686796815916414, + ]), + Fq::from_montgomery_limbs([ + 4588045927327100104, + 15273424236288740466, + 3730020508107780990, + 1184499396891674504, + ]), + Fq::from_montgomery_limbs([ + 5513671693009890019, + 13840477803572862779, + 13148892977164251883, + 530785029804846654, + ]), + ]), + M_00: Fq::from_montgomery_limbs([ + 17721242321237835775, + 11985636621509722110, + 11478464757469040638, + 960562638525520553, + ]), + M_i: Matrix::<8, 8, 64>::new_from_known([ + Fq::from_montgomery_limbs([ + 9015221291577245683, + 8239323489949974514, + 1646089257421115374, + 958099254763297437, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6320288599439722802, + 17139790906886685752, + 15622446705354855394, + 1250967766698858445, + ]), + Fq::from_montgomery_limbs([ + 12907953951183108118, + 570406863259453574, + 9479663564103955646, + 1023356057988386223, + ]), + Fq::from_montgomery_limbs([ + 5445632916888334837, + 1254961675994290676, + 17739625680446876718, + 887995330051968477, + ]), + Fq::from_montgomery_limbs([ + 6322290143919737275, + 6221802074515073157, + 3956268074861890555, + 1230594881276209560, + ]), + Fq::from_montgomery_limbs([ + 6707360385690721071, + 168555159922046132, + 3944622502497320499, + 871144945884010465, + ]), + Fq::from_montgomery_limbs([ + 2037533433720590943, + 11084683233172165964, + 9053730132862546054, + 793120143512682509, + ]), + Fq::from_montgomery_limbs([ + 16034329588701802957, + 3903236010590312092, + 9048724434495743556, + 974216030141738060, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12907953951183108118, + 570406863259453574, + 9479663564103955646, + 1023356057988386223, + ]), + Fq::from_montgomery_limbs([ + 2630356400630794821, + 484400404306129097, + 10294032504232056871, + 1245743613753800727, + ]), + Fq::from_montgomery_limbs([ + 7020374536790409354, + 11449249974296852948, + 11812715459389350230, + 761793057268134936, + ]), + Fq::from_montgomery_limbs([ + 14832891855204883256, + 1120380609975889545, + 13112310496604860424, + 265468754987956357, + ]), + Fq::from_montgomery_limbs([ + 1471871698735710625, + 5066062283984961905, + 18437666505161167766, + 732132698348695885, + ]), + Fq::from_montgomery_limbs([ + 12165164801578981607, + 2595888614156384905, + 3065973630931260883, + 580278735590489736, + ]), + Fq::from_montgomery_limbs([ + 14321853632102951979, + 5605761176730605396, + 4630454347263185176, + 122758557320262262, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 5445632916888334837, + 1254961675994290676, + 17739625680446876718, + 887995330051968477, + ]), + Fq::from_montgomery_limbs([ + 7020374536790409354, + 11449249974296852948, + 11812715459389350230, + 761793057268134936, + ]), + Fq::from_montgomery_limbs([ + 8776438364931459725, + 12817858402105398175, + 11110959846851041399, + 66365362687656724, + ]), + Fq::from_montgomery_limbs([ + 8240747731577468633, + 14565407531273622630, + 3117214821926093855, + 377503066268731506, + ]), + Fq::from_montgomery_limbs([ + 3910521513192788403, + 13982250796740762630, + 7488541789654977578, + 950543461716681145, + ]), + Fq::from_montgomery_limbs([ + 13037154073613592925, + 5935342861935913439, + 15852552537899162249, + 940304910644322576, + ]), + Fq::from_montgomery_limbs([ + 6931234819087160937, + 3778580043557980929, + 15772931149205513556, + 42782763261291533, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6322290143919737275, + 6221802074515073157, + 3956268074861890555, + 1230594881276209560, + ]), + Fq::from_montgomery_limbs([ + 14832891855204883256, + 1120380609975889545, + 13112310496604860424, + 265468754987956357, + ]), + Fq::from_montgomery_limbs([ + 8240747731577468633, + 14565407531273622630, + 3117214821926093855, + 377503066268731506, + ]), + Fq::from_montgomery_limbs([ + 11125067532471981344, + 14191984257965181085, + 12061981722855456559, + 593208493053362841, + ]), + Fq::from_montgomery_limbs([ + 12343763401003110605, + 14101666204297852634, + 12890733422632852105, + 917529488625337921, + ]), + Fq::from_montgomery_limbs([ + 12402063032118952752, + 2700777936756282138, + 16216549649819784559, + 1155661828697936045, + ]), + Fq::from_montgomery_limbs([ + 2194969812170857806, + 13161078840371575175, + 5264735936454844546, + 101144700881461918, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6707360385690721071, + 168555159922046132, + 3944622502497320499, + 871144945884010465, + ]), + Fq::from_montgomery_limbs([ + 1471871698735710625, + 5066062283984961905, + 18437666505161167766, + 732132698348695885, + ]), + Fq::from_montgomery_limbs([ + 3910521513192788403, + 13982250796740762630, + 7488541789654977578, + 950543461716681145, + ]), + Fq::from_montgomery_limbs([ + 12343763401003110605, + 14101666204297852634, + 12890733422632852105, + 917529488625337921, + ]), + Fq::from_montgomery_limbs([ + 11359111242441949022, + 11240352269459571893, + 17263815313749644065, + 781240072875924051, + ]), + Fq::from_montgomery_limbs([ + 16712698548631210778, + 8113828394758785535, + 9984182942939561022, + 781254146059533921, + ]), + Fq::from_montgomery_limbs([ + 7404478796369705144, + 1939616247903098428, + 2043282094878258870, + 67588237262069794, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2037533433720590943, + 11084683233172165964, + 9053730132862546054, + 793120143512682509, + ]), + Fq::from_montgomery_limbs([ + 12165164801578981607, + 2595888614156384905, + 3065973630931260883, + 580278735590489736, + ]), + Fq::from_montgomery_limbs([ + 13037154073613592925, + 5935342861935913439, + 15852552537899162249, + 940304910644322576, + ]), + Fq::from_montgomery_limbs([ + 12402063032118952752, + 2700777936756282138, + 16216549649819784559, + 1155661828697936045, + ]), + Fq::from_montgomery_limbs([ + 16712698548631210778, + 8113828394758785535, + 9984182942939561022, + 781254146059533921, + ]), + Fq::from_montgomery_limbs([ + 6959694198409880686, + 10513484520296585955, + 17245503495642767610, + 326963768321955511, + ]), + Fq::from_montgomery_limbs([ + 10751863449412314814, + 12531617507536929183, + 2333159255918151628, + 108101348738232165, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16034329588701802957, + 3903236010590312092, + 9048724434495743556, + 974216030141738060, + ]), + Fq::from_montgomery_limbs([ + 14321853632102951979, + 5605761176730605396, + 4630454347263185176, + 122758557320262262, + ]), + Fq::from_montgomery_limbs([ + 6931234819087160937, + 3778580043557980929, + 15772931149205513556, + 42782763261291533, + ]), + Fq::from_montgomery_limbs([ + 2194969812170857806, + 13161078840371575175, + 5264735936454844546, + 101144700881461918, + ]), + Fq::from_montgomery_limbs([ + 7404478796369705144, + 1939616247903098428, + 2043282094878258870, + 67588237262069794, + ]), + Fq::from_montgomery_limbs([ + 10751863449412314814, + 12531617507536929183, + 2333159255918151628, + 108101348738232165, + ]), + Fq::from_montgomery_limbs([ + 8242539079403140188, + 8061347952042345076, + 11707135840504604934, + 914785475508666052, + ]), + ]), + v_collection: [ + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 17640631015407645126, + 17416650484724036037, + 14803487960933328666, + 554882262980868625, + ]), + Fq::from_montgomery_limbs([ + 10632745392742701465, + 7191381972905833266, + 10576427669223334706, + 1037506184958051122, + ]), + Fq::from_montgomery_limbs([ + 7989155441247042094, + 18276457113184108543, + 17999817914616464103, + 943187440870955565, + ]), + Fq::from_montgomery_limbs([ + 18204910156218979669, + 16293041589642941780, + 9975069610392864084, + 1088801882579738168, + ]), + Fq::from_montgomery_limbs([ + 15441359965645378481, + 7022857083512140090, + 11162758362666494739, + 1108530997049617801, + ]), + Fq::from_montgomery_limbs([ + 7802104352665277001, + 1712233803072817444, + 12180777293186749586, + 1125441666595228915, + ]), + Fq::from_montgomery_limbs([ + 7330330845985706257, + 6947957132670498679, + 9373711551562393463, + 1140097580201425214, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 18366132767879360967, + 5431013863214313926, + 3325023203464288028, + 747241129062195048, + ]), + Fq::from_montgomery_limbs([ + 4861545468195100803, + 11791803721085820360, + 16861242526837808182, + 587224779081284519, + ]), + Fq::from_montgomery_limbs([ + 6038434302262732315, + 17199494462234427620, + 17847977008226730647, + 613398622514363430, + ]), + Fq::from_montgomery_limbs([ + 8422783269805610096, + 16656220536572751252, + 7918639979705401643, + 170910085608382473, + ]), + Fq::from_montgomery_limbs([ + 18349346982789927355, + 8017591337915184637, + 18372658176979362927, + 927323834744911125, + ]), + Fq::from_montgomery_limbs([ + 6098144161467281354, + 2162126959782930019, + 8016715582812993181, + 87916415604842323, + ]), + Fq::from_montgomery_limbs([ + 14926888907449900570, + 16034226105739794058, + 8242495446855270900, + 170857479056428767, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 13761299995988853307, + 10330765076738035315, + 13655052507848964233, + 121839220114831784, + ]), + Fq::from_montgomery_limbs([ + 15369322242721768225, + 7050142047224256972, + 12643665775034470999, + 1102328692521833676, + ]), + Fq::from_montgomery_limbs([ + 10555474781715655116, + 6656109843697517764, + 16567476834724252290, + 1315407115111807184, + ]), + Fq::from_montgomery_limbs([ + 15635518385029844173, + 579774923863089338, + 4907175580968184975, + 679471495325209728, + ]), + Fq::from_montgomery_limbs([ + 11185461100085345821, + 8221939874744266357, + 12287775310123057539, + 1019299127883999231, + ]), + Fq::from_montgomery_limbs([ + 586274284242963056, + 8310909834705600558, + 3054222778649762639, + 763190023338919332, + ]), + Fq::from_montgomery_limbs([ + 6717490082866871699, + 9561189803595277803, + 2358146706687598339, + 229707033421591253, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 9862704231385218313, + 13914100249743202263, + 10014223727046890158, + 679200801234608014, + ]), + Fq::from_montgomery_limbs([ + 16286005160576575401, + 2766108936000922095, + 13859049965904094985, + 720362228683248654, + ]), + Fq::from_montgomery_limbs([ + 18028696975939559798, + 6945291324150110288, + 3594371327059432745, + 1256526022736975448, + ]), + Fq::from_montgomery_limbs([ + 13724722228213474447, + 17954541567374385206, + 10748596771783277924, + 116970063643881223, + ]), + Fq::from_montgomery_limbs([ + 17627786090808150672, + 7901620020601608720, + 1877160764958626418, + 756288000881176875, + ]), + Fq::from_montgomery_limbs([ + 14537377980409294015, + 18005737005152562388, + 9571375812741383887, + 59753059053707643, + ]), + Fq::from_montgomery_limbs([ + 4228748937594043872, + 11086846199995865064, + 15359245871481193897, + 1099589394616459299, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 6835681309479739469, + 2522595035308448012, + 13579423836020142879, + 321430679545810677, + ]), + Fq::from_montgomery_limbs([ + 8928134061485321773, + 14157720579697729134, + 10344780082168020995, + 97202987142506800, + ]), + Fq::from_montgomery_limbs([ + 3126697640027307204, + 1153410184564297189, + 4809813821719177551, + 994774295722128937, + ]), + Fq::from_montgomery_limbs([ + 3918576597698600036, + 13183810862438807325, + 15214887128855617985, + 279159001700097111, + ]), + Fq::from_montgomery_limbs([ + 2830967354854515654, + 17469509170635724421, + 8035672669498122237, + 267629026497518109, + ]), + Fq::from_montgomery_limbs([ + 13871567487914888086, + 5246409741722402492, + 16832389611931438025, + 1295010963726258350, + ]), + Fq::from_montgomery_limbs([ + 17057934674164606699, + 6421519839681476555, + 2956724044796119398, + 327825682992218753, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 4795884052041907920, + 14375534011696101577, + 2427060550596560456, + 393919458849239754, + ]), + Fq::from_montgomery_limbs([ + 15372002461943753964, + 11342165919824154367, + 11980800855746001270, + 994521975576249810, + ]), + Fq::from_montgomery_limbs([ + 3093026885592381242, + 16909708896875106142, + 9191689902351332536, + 192118286974103755, + ]), + Fq::from_montgomery_limbs([ + 2545301077237922815, + 15144706238324940883, + 6113286606593174468, + 372600161316484359, + ]), + Fq::from_montgomery_limbs([ + 2142773713360590483, + 4755608127774394592, + 14813148169732966311, + 917761966614679749, + ]), + Fq::from_montgomery_limbs([ + 4228649950611283773, + 11633437476481650378, + 40335982213672820, + 963989416626637070, + ]), + Fq::from_montgomery_limbs([ + 7391565095119442761, + 5231979613403440246, + 15148609598356850747, + 95369680580052342, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 6221242600163036024, + 13151745595003222769, + 1880070415953293074, + 859483057557051135, + ]), + Fq::from_montgomery_limbs([ + 4057704583061373110, + 330438596431033553, + 11138603368324646862, + 567019942240333219, + ]), + Fq::from_montgomery_limbs([ + 6808348652855723900, + 16038145083514774712, + 7335293401571608063, + 1256860263027810296, + ]), + Fq::from_montgomery_limbs([ + 14712597649859914536, + 2461131389363589307, + 14971367896336061978, + 440886131765627826, + ]), + Fq::from_montgomery_limbs([ + 12563821899625315748, + 1397025790367362621, + 11711011249975071041, + 1326491445493487906, + ]), + Fq::from_montgomery_limbs([ + 7386366618870533036, + 17891650149672567880, + 7623078793319051970, + 896259535119079804, + ]), + Fq::from_montgomery_limbs([ + 10076387373785417531, + 11621404135443198278, + 2342191148009104794, + 1208570082728513479, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15679839989875735864, + 3094159736795405193, + 8433247987399569527, + 598394739716746812, + ]), + Fq::from_montgomery_limbs([ + 13169926426306420693, + 1494478164246339314, + 1807871555080064306, + 341871317105251652, + ]), + Fq::from_montgomery_limbs([ + 8871477167695700102, + 7124763693791718581, + 9576781928097497051, + 714519781637518717, + ]), + Fq::from_montgomery_limbs([ + 5983131451216637528, + 14746501237947100556, + 5131581902376092495, + 53578888100518755, + ]), + Fq::from_montgomery_limbs([ + 4061768962354414816, + 11864639021370326188, + 865372274790703007, + 960248048765553610, + ]), + Fq::from_montgomery_limbs([ + 13741178490350281184, + 16104064291813496481, + 430569565272838614, + 1002559943654640050, + ]), + Fq::from_montgomery_limbs([ + 2394748621667543278, + 9724971631453415812, + 4137744279709050144, + 1128204720227512009, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 8347131072359520901, + 7051906710316929352, + 16145803176151958291, + 425602845445213918, + ]), + Fq::from_montgomery_limbs([ + 1777783046051939958, + 9344856863579469212, + 15141578180236122558, + 1282494716270035254, + ]), + Fq::from_montgomery_limbs([ + 9034384578885080751, + 4457232682759798992, + 2752092198692805323, + 133997596024339666, + ]), + Fq::from_montgomery_limbs([ + 6632806707492790657, + 4419466991289176034, + 10545594397744340230, + 225792487504094029, + ]), + Fq::from_montgomery_limbs([ + 13666870638471858948, + 6325954648727450515, + 6820384268867641136, + 650912658514216838, + ]), + Fq::from_montgomery_limbs([ + 18425172866543397587, + 460014089142918565, + 13475177727189665478, + 755199790640816277, + ]), + Fq::from_montgomery_limbs([ + 17074816481639390245, + 8326625026248068453, + 11628221368426774047, + 168403074861182097, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 6496117145112017285, + 8108611305258852743, + 1288333658986417240, + 489166257449840915, + ]), + Fq::from_montgomery_limbs([ + 5905164426314492425, + 14726319284315803257, + 15419119459033009106, + 748785652021292365, + ]), + Fq::from_montgomery_limbs([ + 2903900515980491508, + 14518787377368638193, + 5737950893394728457, + 1246585555966129910, + ]), + Fq::from_montgomery_limbs([ + 13545067403644787822, + 12929589241462425919, + 6328577959723156897, + 669792805130642725, + ]), + Fq::from_montgomery_limbs([ + 10880665937604410417, + 12182942785008105675, + 8043148962657686879, + 114751567600998309, + ]), + Fq::from_montgomery_limbs([ + 475884094757470315, + 13519631230544868403, + 15555278094421071668, + 284046901452720062, + ]), + Fq::from_montgomery_limbs([ + 4404185810772829111, + 13082485550708084688, + 4458404332519456617, + 747118566938719314, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 9005422667436345080, + 6610327294069915149, + 3392047280994887983, + 185928194404395622, + ]), + Fq::from_montgomery_limbs([ + 5907489245706778002, + 2611521107474717810, + 15424563447378789128, + 1081732924695236796, + ]), + Fq::from_montgomery_limbs([ + 6936175948569238427, + 16265819354303431672, + 9296694820053549015, + 380971488662375691, + ]), + Fq::from_montgomery_limbs([ + 11847879878992849222, + 17246157629192690467, + 2240336221502957918, + 551120206298529047, + ]), + Fq::from_montgomery_limbs([ + 13322826606934505627, + 11726197427344458839, + 11800080869580456447, + 426669602496174268, + ]), + Fq::from_montgomery_limbs([ + 6217036164702465819, + 14690910531871435703, + 13161157531336562298, + 732442567722820811, + ]), + Fq::from_montgomery_limbs([ + 14882293327891629398, + 9369498032959659338, + 7000848696812799171, + 754562041670533469, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 7595387151201254327, + 16626796275200533088, + 2940178911825115337, + 1184031511121567741, + ]), + Fq::from_montgomery_limbs([ + 9948362750111031958, + 14209593175711129688, + 8446364573948386189, + 802006068920106393, + ]), + Fq::from_montgomery_limbs([ + 15169311970095301438, + 12318244252296365506, + 11639105278755798079, + 84817162733084173, + ]), + Fq::from_montgomery_limbs([ + 5831579622220754273, + 10846086049576885619, + 15991974831220053526, + 756084870377153501, + ]), + Fq::from_montgomery_limbs([ + 4538407139413953048, + 3210811593774606829, + 7928892177512965493, + 295438458271184500, + ]), + Fq::from_montgomery_limbs([ + 16833512221632219759, + 4464061448066183306, + 13162091753490675863, + 292236190186079508, + ]), + Fq::from_montgomery_limbs([ + 13779800725609980259, + 9773765625728017659, + 15074810316420391540, + 950783607166623145, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15895706787288222123, + 9777370406550782832, + 1347824831892755594, + 1241011767014366278, + ]), + Fq::from_montgomery_limbs([ + 12826978362776209042, + 10633709265050784734, + 17957605540213546613, + 887698438045779720, + ]), + Fq::from_montgomery_limbs([ + 7324188878915493946, + 6492479003127466111, + 8377249725203128879, + 1000161290003049779, + ]), + Fq::from_montgomery_limbs([ + 6704086117324761110, + 146265122731217307, + 2383903051894120264, + 719647807141165334, + ]), + Fq::from_montgomery_limbs([ + 1940312057575972126, + 17930067253838912265, + 317360086895888872, + 5748540581767140, + ]), + Fq::from_montgomery_limbs([ + 17103257683729273147, + 13931874259783487325, + 11872224486078756015, + 956814895668207498, + ]), + Fq::from_montgomery_limbs([ + 13769500095117682353, + 516850361598419166, + 16964626273259476242, + 769634211482580445, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 3113137472185380309, + 3788943308088978270, + 15570984136244536866, + 64143465381601420, + ]), + Fq::from_montgomery_limbs([ + 7162163846740423034, + 17407158529676601980, + 982523548091459495, + 1241886141897586570, + ]), + Fq::from_montgomery_limbs([ + 14248266967200521181, + 12810010597713281838, + 15956352259342376510, + 1249991327654319042, + ]), + Fq::from_montgomery_limbs([ + 14421471441198040024, + 4052632755320875533, + 10507979567878886533, + 966126597683502788, + ]), + Fq::from_montgomery_limbs([ + 1330169793100628257, + 5902370011388045841, + 4268141693837804182, + 504954696237745802, + ]), + Fq::from_montgomery_limbs([ + 12989224119893885561, + 17234018500273188391, + 10939008301878322098, + 259903928118608299, + ]), + Fq::from_montgomery_limbs([ + 10430146681254844704, + 16501713083418526441, + 1818813698196386223, + 290604987547570674, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 2272958606081209500, + 2462669223449072253, + 9500254477224930595, + 45443314528508583, + ]), + Fq::from_montgomery_limbs([ + 15776657251710579335, + 14822492561927322901, + 3903750765721394200, + 630182332308162068, + ]), + Fq::from_montgomery_limbs([ + 12563868195165779174, + 12561252953252587550, + 11907364401269631108, + 581676404653821486, + ]), + Fq::from_montgomery_limbs([ + 148332194159159988, + 10068425626588210986, + 13535393921505334097, + 153553395999465163, + ]), + Fq::from_montgomery_limbs([ + 7747426768506042379, + 7652171709845608793, + 11069887529886935999, + 60205371617013159, + ]), + Fq::from_montgomery_limbs([ + 9292570341502960523, + 3236193786725371597, + 8898130554136882239, + 1009410450149925646, + ]), + Fq::from_montgomery_limbs([ + 12885815634665358426, + 15963150787962414249, + 4369817253063661209, + 642948406974549063, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 1380867230584918716, + 16725144872260989882, + 11444322500251449972, + 837022230218511427, + ]), + Fq::from_montgomery_limbs([ + 1087920425360181417, + 17141257576042242544, + 8987292985620878561, + 1110305532217600753, + ]), + Fq::from_montgomery_limbs([ + 10359964772262918650, + 10077460265989495047, + 17578499003187392916, + 757342367774183991, + ]), + Fq::from_montgomery_limbs([ + 2779779035056260202, + 2282975003625087828, + 1919400866622348845, + 493318954648288095, + ]), + Fq::from_montgomery_limbs([ + 15672164960009522373, + 3256607523370073938, + 13852207222752867333, + 1244522698781289416, + ]), + Fq::from_montgomery_limbs([ + 12874545038411867774, + 1217025423748364582, + 75869870772488332, + 1001217245879206186, + ]), + Fq::from_montgomery_limbs([ + 8523257600072604774, + 8621165006673159831, + 1464388999950649637, + 1217963817687697670, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15922812187951378322, + 4516460162368536866, + 15018766830043386765, + 1340613465456337965, + ]), + Fq::from_montgomery_limbs([ + 287441026936003136, + 14764192345714853717, + 4173276030750185119, + 472111033963352598, + ]), + Fq::from_montgomery_limbs([ + 10839733167051473961, + 3454260583859678864, + 11304905847738494430, + 650946296327920383, + ]), + Fq::from_montgomery_limbs([ + 9515448149018827481, + 3488032113770392732, + 10593726245432275549, + 583635792309485522, + ]), + Fq::from_montgomery_limbs([ + 2742448600840811735, + 6652758193289359848, + 9635320418424938172, + 967821689260084870, + ]), + Fq::from_montgomery_limbs([ + 9881468678921411834, + 11537438085600848038, + 7216253876764370660, + 1304070984061260617, + ]), + Fq::from_montgomery_limbs([ + 6196769084394513175, + 1271040910625745125, + 11073763102896512393, + 1165794523446068715, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15799597978241847363, + 12818531158251383624, + 6963429972659041410, + 397194962489148197, + ]), + Fq::from_montgomery_limbs([ + 138391674938830183, + 6888521073413350790, + 13718840433311127770, + 1101538822720967029, + ]), + Fq::from_montgomery_limbs([ + 12684981053383903956, + 5500073381157750545, + 4169486943568405011, + 879134225324190092, + ]), + Fq::from_montgomery_limbs([ + 464851715795247463, + 2927900015464510347, + 17346267830876442053, + 1137028262870600951, + ]), + Fq::from_montgomery_limbs([ + 1966072756669882436, + 14267740345733608423, + 3868025407329923728, + 1329300268340841458, + ]), + Fq::from_montgomery_limbs([ + 12791556832852048085, + 7187847328998161782, + 6410129678700860221, + 1141843742471101195, + ]), + Fq::from_montgomery_limbs([ + 17394082241710727109, + 3925707544410201182, + 15631236622778680461, + 867359934041458160, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 12197981561714622691, + 3447558190007550222, + 8731482567404865792, + 504033851083789168, + ]), + Fq::from_montgomery_limbs([ + 15548011549070215821, + 18176746913742005334, + 6759691930131684149, + 748826448544702472, + ]), + Fq::from_montgomery_limbs([ + 14426381672075599127, + 6754779155763548400, + 1569326308679565884, + 301254674498691116, + ]), + Fq::from_montgomery_limbs([ + 1190926793578469751, + 4569874070454135204, + 15349066761719847213, + 1143729593598143496, + ]), + Fq::from_montgomery_limbs([ + 4377698380788322951, + 626231241120536954, + 5782570196326664329, + 794203002404066761, + ]), + Fq::from_montgomery_limbs([ + 18203023968026598600, + 769509082182406304, + 14347905833288757784, + 849309248009120890, + ]), + Fq::from_montgomery_limbs([ + 6219667569923491560, + 12993749535175636460, + 9317843769426981121, + 466063065647080758, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 12360205003642410439, + 12233377474426101645, + 8749241487473360725, + 771733806369229100, + ]), + Fq::from_montgomery_limbs([ + 12909744147344161535, + 15270140525914393786, + 958053852923168614, + 1122903083941798107, + ]), + Fq::from_montgomery_limbs([ + 11512594517381251244, + 7788994558197263271, + 17789727628017887833, + 604964920168437514, + ]), + Fq::from_montgomery_limbs([ + 11365008776320664479, + 7674849678441687585, + 10947191902817323894, + 745598673291635479, + ]), + Fq::from_montgomery_limbs([ + 9298337976025138670, + 3504219772802793091, + 18423486933153538231, + 674863471944898182, + ]), + Fq::from_montgomery_limbs([ + 10037370553997808960, + 5643541321548796784, + 3954322339884102888, + 1116686823797890292, + ]), + Fq::from_montgomery_limbs([ + 9151115627925470056, + 1080688967380275155, + 15991630648226528878, + 1130423917661403285, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 16294982486276945283, + 7049820508618491066, + 8145571059898393342, + 186002704339584638, + ]), + Fq::from_montgomery_limbs([ + 755176559839955182, + 11156178401444222993, + 14456074258881310686, + 278477091367678088, + ]), + Fq::from_montgomery_limbs([ + 1257685548905109784, + 5141440235439936072, + 17862579642779035136, + 330137635933850138, + ]), + Fq::from_montgomery_limbs([ + 7830781886086349569, + 12605497826381107847, + 6483908192271317597, + 742032532267494998, + ]), + Fq::from_montgomery_limbs([ + 15889009530646425854, + 4873730462912310136, + 2661766248464352916, + 886629163939946863, + ]), + Fq::from_montgomery_limbs([ + 12291205541312705254, + 7759245016766434277, + 14282726477924298523, + 275206715444074183, + ]), + Fq::from_montgomery_limbs([ + 7015277851946876128, + 6540146872039720132, + 3413400018095950201, + 488630649619127768, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 8080067703614789529, + 14335022802712765520, + 12181558540579879368, + 1181883134308686818, + ]), + Fq::from_montgomery_limbs([ + 3930610870091700987, + 11870595227272460342, + 5614691549969018824, + 1036838548873476989, + ]), + Fq::from_montgomery_limbs([ + 15116537084696928201, + 6562302783432438956, + 8446888808137423003, + 1165521566881319341, + ]), + Fq::from_montgomery_limbs([ + 7622363474306732593, + 14018499983613194146, + 5504535021523794239, + 1156251508187455677, + ]), + Fq::from_montgomery_limbs([ + 18353812883604490408, + 7863175561039540930, + 16157508248448358210, + 295160799461001215, + ]), + Fq::from_montgomery_limbs([ + 9630152100811825815, + 18335618989479732132, + 8847214215895375728, + 938895491334142608, + ]), + Fq::from_montgomery_limbs([ + 13116080893996470839, + 13627909126954009780, + 15760064020863415616, + 884515223942721558, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 6687780439253411478, + 6719196503388333019, + 88771745794551678, + 987619641692746386, + ]), + Fq::from_montgomery_limbs([ + 18227317062064988196, + 14045861136043637767, + 16184554390694852575, + 168316121892514264, + ]), + Fq::from_montgomery_limbs([ + 2567020624281662578, + 12408201210305429297, + 15172611508502121839, + 184308211509770511, + ]), + Fq::from_montgomery_limbs([ + 6504349685450813046, + 6151032549024957176, + 8446915662866336279, + 721911887099189465, + ]), + Fq::from_montgomery_limbs([ + 3337661731072526341, + 2993440831960528581, + 1509729075929391927, + 478329275350342603, + ]), + Fq::from_montgomery_limbs([ + 1009230922039257241, + 6930789170818330480, + 4189309447677808153, + 116099938331986078, + ]), + Fq::from_montgomery_limbs([ + 11734050699831527761, + 10637489645393719148, + 526453959140559372, + 879302010498683200, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 4873204063755775221, + 9933480403362446589, + 9949453296663390065, + 246028972103247826, + ]), + Fq::from_montgomery_limbs([ + 1486515864865111240, + 8186666825731582288, + 17298579416284146352, + 75432580959795592, + ]), + Fq::from_montgomery_limbs([ + 505624159752585300, + 400192717675446053, + 16830576854563029465, + 1083591845791403649, + ]), + Fq::from_montgomery_limbs([ + 15707645648143644435, + 15104101221834649015, + 2714910978190477603, + 1152442812583011873, + ]), + Fq::from_montgomery_limbs([ + 13680539759561187051, + 166623071797346207, + 14072328976002035503, + 1262049047131890020, + ]), + Fq::from_montgomery_limbs([ + 1997216355444588659, + 4362151030955817495, + 4119100627602964220, + 86616090171999332, + ]), + Fq::from_montgomery_limbs([ + 2511307420156057573, + 14546073810053310617, + 2740719298105876931, + 1306803605810669667, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 9796594921607316066, + 9046940149281062534, + 3066668479453506525, + 629717731494457650, + ]), + Fq::from_montgomery_limbs([ + 15245080183700001743, + 17772522498139932944, + 1303200707700973869, + 1321448515508953860, + ]), + Fq::from_montgomery_limbs([ + 15382852889694635458, + 13258286043643865801, + 9129565020842704924, + 647265428745294973, + ]), + Fq::from_montgomery_limbs([ + 406339679439528630, + 358526789424126981, + 15360185281241795369, + 402771395127408535, + ]), + Fq::from_montgomery_limbs([ + 14729795014613647379, + 6659603767330364601, + 10382867237853880917, + 983014168589450240, + ]), + Fq::from_montgomery_limbs([ + 130913533882362207, + 3464497722457480940, + 6174897712775413536, + 362284933576221116, + ]), + Fq::from_montgomery_limbs([ + 6802705157024058052, + 13442544871481896094, + 13780491571272760495, + 909644424511448796, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15361452699552249664, + 9640740743000109947, + 5568737378741199451, + 962844949024683508, + ]), + Fq::from_montgomery_limbs([ + 459261181401017545, + 7171449908290213843, + 15871949118083492196, + 158962359341824787, + ]), + Fq::from_montgomery_limbs([ + 7906547241546612427, + 7911718846541029411, + 14951976648354808013, + 421942213347946833, + ]), + Fq::from_montgomery_limbs([ + 11183093321955941025, + 11064782095852757040, + 17028937525080502941, + 84626144143427215, + ]), + Fq::from_montgomery_limbs([ + 15224853022182992564, + 6262171785917223470, + 16177655818423871790, + 1014568265658824394, + ]), + Fq::from_montgomery_limbs([ + 625719919361420446, + 8380808592474630812, + 3431067771421433694, + 687333698000967202, + ]), + Fq::from_montgomery_limbs([ + 16024186533956349632, + 6397405785318083633, + 15989828043790400414, + 850765743467676249, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 16821206357298616469, + 1130392039725774709, + 5626389420189454642, + 1118339463429080277, + ]), + Fq::from_montgomery_limbs([ + 8638502030638568937, + 14913248685358382503, + 2067471807256194154, + 1100154439569300281, + ]), + Fq::from_montgomery_limbs([ + 17564526714798056567, + 2679133728209391057, + 12485118550630518387, + 962529009983964522, + ]), + Fq::from_montgomery_limbs([ + 4671481911068696338, + 11211404871059653651, + 4714104003967750529, + 460522700989518506, + ]), + Fq::from_montgomery_limbs([ + 6601065644493764993, + 6108401876661130452, + 518511813649845646, + 611513774682652448, + ]), + Fq::from_montgomery_limbs([ + 2861830270848819795, + 16356361265808876600, + 12810879004275814176, + 1286972374050895235, + ]), + Fq::from_montgomery_limbs([ + 15194368129140163866, + 4422109454732341537, + 16494227980417936974, + 290982210272018089, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 17007536869668539214, + 3870339684122566773, + 7418389053554657334, + 263511272051190454, + ]), + Fq::from_montgomery_limbs([ + 12410612082473707857, + 4040398757796296521, + 16094020059960359234, + 939075584469470040, + ]), + Fq::from_montgomery_limbs([ + 7418236128585187557, + 15691596850766474049, + 4839121991874976767, + 1173030423683112566, + ]), + Fq::from_montgomery_limbs([ + 5215564176166340124, + 2655381196051933641, + 6045374250672288630, + 176416756249057657, + ]), + Fq::from_montgomery_limbs([ + 13952195320089654608, + 13938861125107555897, + 13572960470464709581, + 247820705708880751, + ]), + Fq::from_montgomery_limbs([ + 7397318582807137181, + 18043760894393149278, + 14776480882092071507, + 1134492376276011511, + ]), + Fq::from_montgomery_limbs([ + 10024735062566598040, + 5074414902312726054, + 16541770110513564624, + 1319392307629355494, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 17701692352398604469, + 12227868835058163041, + 6355645072062803626, + 46662470597422118, + ]), + Fq::from_montgomery_limbs([ + 17486353498011500258, + 14688387905134443671, + 86673003791736603, + 334193962485781999, + ]), + Fq::from_montgomery_limbs([ + 2725938978570184818, + 12538279414757715369, + 4423739824876634382, + 990960136859773111, + ]), + Fq::from_montgomery_limbs([ + 1658418413165666717, + 4481948955101880251, + 2380234418157645031, + 242453692938449648, + ]), + Fq::from_montgomery_limbs([ + 16462799862547279938, + 15860491361132810167, + 17855590817263886803, + 566253932393246465, + ]), + Fq::from_montgomery_limbs([ + 7795866114233701913, + 671818567137775288, + 8587656269292170703, + 1248608466500904131, + ]), + Fq::from_montgomery_limbs([ + 12734974453986836356, + 13876952892523324606, + 8958492656376686082, + 1219220119207244562, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 16939094048589357804, + 27828887622580244, + 17879324893769825916, + 1323982021311509582, + ]), + Fq::from_montgomery_limbs([ + 3829148264852223810, + 16344601064097516632, + 17405856957400469367, + 1015406940125315334, + ]), + Fq::from_montgomery_limbs([ + 2496078501178333445, + 3431033003985481851, + 18046940389757892591, + 78803126847324668, + ]), + Fq::from_montgomery_limbs([ + 10354574228107355459, + 2956204224517963071, + 4281810991966937657, + 773005109651151512, + ]), + Fq::from_montgomery_limbs([ + 11661373254033173032, + 7617994408757678472, + 3818523458153749994, + 1124211529831618075, + ]), + Fq::from_montgomery_limbs([ + 5343527255304572547, + 18057091451537453565, + 7219465431491887651, + 438777407253439449, + ]), + Fq::from_montgomery_limbs([ + 6944386246740202781, + 15457528402087694028, + 3684425466632772887, + 516255567451219667, + ]), + ]), + Matrix::<1, 7, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 11265451120049686448, + 17733431402661201252, + 10181100791013355567, + 1222168459125423207, + ]), + Fq::from_montgomery_limbs([ + 16541130910067039592, + 8550248424255720611, + 5388592089365012797, + 401807388479450663, + ]), + Fq::from_montgomery_limbs([ + 15535862948076515909, + 14246335147027067446, + 3440553300570031637, + 1140798916603065405, + ]), + Fq::from_montgomery_limbs([ + 181454369079184993, + 10259998444066142751, + 13378833995981646023, + 1233479771041134216, + ]), + Fq::from_montgomery_limbs([ + 16855179079358889281, + 15202871199402424660, + 10704979988227736970, + 1092640973189828568, + ]), + Fq::from_montgomery_limbs([ + 8641652447153871125, + 14767053670343766852, + 14349039701716536407, + 776309354634057048, + ]), + Fq::from_montgomery_limbs([ + 16709348381005515895, + 522436120289473263, + 2848448538858947951, + 930729981926185853, + ]), + ]), + ], + w_hat_collection: [ + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 5469465372454405746, + 11693688927749785195, + 9284229770381589387, + 263916402201309764, + ]), + Fq::from_montgomery_limbs([ + 8025142443496737775, + 1611073224873590596, + 1595200312703520851, + 268362793599128279, + ]), + Fq::from_montgomery_limbs([ + 2646197433325367530, + 3327161674116363870, + 17523969835882673765, + 1224872920276084181, + ]), + Fq::from_montgomery_limbs([ + 3531022552160069605, + 1044916798369741293, + 13484540382795405112, + 975392012720575741, + ]), + Fq::from_montgomery_limbs([ + 3532672362950129848, + 13232567668052949956, + 3949082925084889589, + 1169300250855119928, + ]), + Fq::from_montgomery_limbs([ + 17405909644706202533, + 9068195655028130334, + 4993737853698066182, + 760630245260613434, + ]), + Fq::from_montgomery_limbs([ + 10760096219897954109, + 15819961273994906871, + 12000866060961275644, + 494051747708222359, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 6362811837083607038, + 10112120774028974554, + 18223478424715278594, + 334017453759956923, + ]), + Fq::from_montgomery_limbs([ + 9425287269899366801, + 11550170751949156528, + 13535057945185910331, + 481928711879823346, + ]), + Fq::from_montgomery_limbs([ + 17472259370242997056, + 5455690506444253075, + 8901482994501262481, + 216965978934341710, + ]), + Fq::from_montgomery_limbs([ + 6461374808168440859, + 2522061882145442234, + 15960549034903032234, + 172640120507478914, + ]), + Fq::from_montgomery_limbs([ + 15948529219279584260, + 15982605346874278694, + 6269535640895470052, + 598935737770408401, + ]), + Fq::from_montgomery_limbs([ + 6387843144535167444, + 3817387412721348785, + 8453759171668596794, + 249153266075439378, + ]), + Fq::from_montgomery_limbs([ + 12733356128673768262, + 1719659461140646111, + 6773786044742649854, + 1187765335723023490, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 13381096107094038201, + 17813208526318089114, + 18335536409132991824, + 339697501389957039, + ]), + Fq::from_montgomery_limbs([ + 17742161265183589279, + 16788867255988109560, + 14412857631192854758, + 241525962952821929, + ]), + Fq::from_montgomery_limbs([ + 3132656462108501803, + 7337059831094147936, + 10405916960575845901, + 228104793330536468, + ]), + Fq::from_montgomery_limbs([ + 4603265731852134279, + 5399214122633296191, + 8344043762552329652, + 985455486033881462, + ]), + Fq::from_montgomery_limbs([ + 14183899592653698860, + 2177269342994828180, + 10884678024220653483, + 217447665355687992, + ]), + Fq::from_montgomery_limbs([ + 11323936221359713158, + 3341391736943984982, + 17508560691141182274, + 13239895022264913, + ]), + Fq::from_montgomery_limbs([ + 13840945524485292215, + 9974520753931283863, + 4195523720400973895, + 762227204403897594, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 4114179516470424298, + 6425976053490693203, + 12882959905974456947, + 110103675307258331, + ]), + Fq::from_montgomery_limbs([ + 15116210321604905525, + 4118549106744296512, + 3828886987178664227, + 25697701772294022, + ]), + Fq::from_montgomery_limbs([ + 17140438063675080897, + 14878172760305139023, + 16025135762152951507, + 855206538655380046, + ]), + Fq::from_montgomery_limbs([ + 10902652921411376407, + 298732053043081440, + 3474200546567636561, + 73249755607734230, + ]), + Fq::from_montgomery_limbs([ + 10553805817393106605, + 11201074828085121396, + 245273431044608348, + 1118444153373328294, + ]), + Fq::from_montgomery_limbs([ + 10914295885365195477, + 9781502968861552189, + 3016024785085649390, + 1070566622248381309, + ]), + Fq::from_montgomery_limbs([ + 17207023773498274582, + 16270409020606599297, + 15615674408609362833, + 496415543408113636, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 12908589501999937487, + 8065526495594728145, + 14801981742319743709, + 275346991162297736, + ]), + Fq::from_montgomery_limbs([ + 17950935244956210974, + 2150016307817314195, + 16459867286579284659, + 1042519399748946084, + ]), + Fq::from_montgomery_limbs([ + 17900103050404502082, + 14452186078281849672, + 6480606341801761206, + 622530813027865777, + ]), + Fq::from_montgomery_limbs([ + 6659043465579778142, + 5257478652828025077, + 4476708827204863480, + 16044674601944326, + ]), + Fq::from_montgomery_limbs([ + 12982211781831995222, + 12049124325752315255, + 8705698258631367529, + 1297634030024262944, + ]), + Fq::from_montgomery_limbs([ + 6491213021781179190, + 6621864740150572837, + 16900492784527502379, + 1222186981051134852, + ]), + Fq::from_montgomery_limbs([ + 10406390218848689011, + 15713870170786523261, + 10757974052401463167, + 1094311561986616580, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 7587047764889575280, + 11453570134345482138, + 6685160859155170229, + 1173043895898907255, + ]), + Fq::from_montgomery_limbs([ + 16754290437895255736, + 9337309604462582506, + 12206937090776739366, + 420058562194519310, + ]), + Fq::from_montgomery_limbs([ + 6762379518159147694, + 8708770658919355547, + 10850018038610162125, + 1008085848049838570, + ]), + Fq::from_montgomery_limbs([ + 13364112208667503342, + 15694121621742726571, + 10880035211673377855, + 373642360429768529, + ]), + Fq::from_montgomery_limbs([ + 2270999049018193688, + 1120874468185376800, + 411758025544146420, + 1286339318101647584, + ]), + Fq::from_montgomery_limbs([ + 6487825500972649335, + 16454995602857338429, + 5467561124775466727, + 878704090415683008, + ]), + Fq::from_montgomery_limbs([ + 1065155450424764553, + 12374494253224172277, + 8660000041795033471, + 1111585064452242609, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 13207693125029693018, + 4845337225517968099, + 6777888238547968314, + 1213784418907181141, + ]), + Fq::from_montgomery_limbs([ + 8840475980926169942, + 2439983533649319439, + 10722568534952104178, + 237040204857642763, + ]), + Fq::from_montgomery_limbs([ + 12845192406743600306, + 2989732167685602396, + 9737375858921653666, + 1230697363927166390, + ]), + Fq::from_montgomery_limbs([ + 17347381872588777362, + 13861116144606039805, + 13092379011701123650, + 764219716687899335, + ]), + Fq::from_montgomery_limbs([ + 17560394342108123527, + 2417597080550067173, + 4892519055479234860, + 41147728874013821, + ]), + Fq::from_montgomery_limbs([ + 16525591378009204013, + 15575464991459515509, + 8422968616365174468, + 411199147172891757, + ]), + Fq::from_montgomery_limbs([ + 2381387149440902461, + 5412036122050682991, + 13528312040883572709, + 906698787086289152, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 3906793572005745013, + 18158346260651031144, + 13885155522309058406, + 81682927312739464, + ]), + Fq::from_montgomery_limbs([ + 11556601788249882111, + 16294603434168644341, + 3233905800589936432, + 205935519984731, + ]), + Fq::from_montgomery_limbs([ + 15060956636956141748, + 14545891040349678052, + 11359264221189720465, + 356824974507480378, + ]), + Fq::from_montgomery_limbs([ + 13651037643855144634, + 9057349283398801990, + 11128939939991098829, + 339192257850626331, + ]), + Fq::from_montgomery_limbs([ + 13297032679166497156, + 9615759066125111838, + 17802636590285232697, + 561508163130847528, + ]), + Fq::from_montgomery_limbs([ + 8397658199708546603, + 7714753189153428100, + 7790178778963243461, + 185139104215370464, + ]), + Fq::from_montgomery_limbs([ + 2180790926999539040, + 13412426570621087300, + 11981287146222961423, + 639288905678439923, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 14052035671409641250, + 13059764049401289819, + 11971569074865081653, + 1150074447408905206, + ]), + Fq::from_montgomery_limbs([ + 9430708294750522894, + 10157980309621419039, + 15263989057722108309, + 986177323832836397, + ]), + Fq::from_montgomery_limbs([ + 16901845294627087710, + 3489277370587647922, + 16697435307791475526, + 77304496269930872, + ]), + Fq::from_montgomery_limbs([ + 11082416581543669906, + 10393162674600623371, + 3285406343096341615, + 1301030845466123760, + ]), + Fq::from_montgomery_limbs([ + 18004954247480805141, + 5840089398123238351, + 10933632362911021710, + 691842568234993272, + ]), + Fq::from_montgomery_limbs([ + 17084441454288473640, + 2235549442526480819, + 4281084601663253516, + 854500520628530615, + ]), + Fq::from_montgomery_limbs([ + 15995978179451110635, + 5254996480963543781, + 12228168137501357375, + 768298814850744789, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 14897923782972976882, + 14769556083418318998, + 1736582590048574781, + 834637190815349022, + ]), + Fq::from_montgomery_limbs([ + 15951362473351174286, + 7550580364442366310, + 1142582367377712360, + 493901798774432186, + ]), + Fq::from_montgomery_limbs([ + 6843713892592087790, + 17187186375181169829, + 2346758743517403254, + 440860120126405528, + ]), + Fq::from_montgomery_limbs([ + 16233685001159101924, + 3591097020136681981, + 3308092724991209243, + 753631765436882275, + ]), + Fq::from_montgomery_limbs([ + 12817371395153180792, + 11781447572225130349, + 6186298687319142696, + 3684689165947228, + ]), + Fq::from_montgomery_limbs([ + 373243522249877820, + 14362378102133706173, + 11334127490376039043, + 1029386563565171794, + ]), + Fq::from_montgomery_limbs([ + 3320051586177558481, + 3693313581776176503, + 4243258718797155237, + 280296683627599109, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15777714567664176983, + 13315644392893971158, + 17663595314793470728, + 277994346352588461, + ]), + Fq::from_montgomery_limbs([ + 10698748229571229513, + 4993514528007275782, + 9851470184989070944, + 486473547501834583, + ]), + Fq::from_montgomery_limbs([ + 15731541659238915573, + 10580160097474154328, + 14072730437229004460, + 541485168141790138, + ]), + Fq::from_montgomery_limbs([ + 3621838382408245781, + 5140837518507686846, + 692462686779552266, + 1071238232671920069, + ]), + Fq::from_montgomery_limbs([ + 16903035807706989718, + 16402342976729397848, + 6638418596135594138, + 766006849863633370, + ]), + Fq::from_montgomery_limbs([ + 3391835462656069558, + 8478240763735883610, + 6583767175704093831, + 605702159954668519, + ]), + Fq::from_montgomery_limbs([ + 13153440956937332187, + 8778062398439311613, + 14496687227146002795, + 1184865635693926839, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 5492025723621450587, + 4802310335533070821, + 5103778166610184416, + 1237824309223979752, + ]), + Fq::from_montgomery_limbs([ + 13230781860208750726, + 13444089818089484139, + 17921412814723519524, + 1222680843018701540, + ]), + Fq::from_montgomery_limbs([ + 6469994574006187252, + 9454411230540098121, + 347262197325431191, + 486705196263913773, + ]), + Fq::from_montgomery_limbs([ + 3947674970632735265, + 2916300977963946491, + 6881904307166023017, + 457112286806257099, + ]), + Fq::from_montgomery_limbs([ + 8734203063029639947, + 9235030054635977911, + 17117573327238268274, + 1336943205846791314, + ]), + Fq::from_montgomery_limbs([ + 14915061407614767729, + 5343187615398945512, + 5552119928369165945, + 230612833250200287, + ]), + Fq::from_montgomery_limbs([ + 15343760251811669074, + 11849716817931855852, + 12235003752862513196, + 1092174591577707855, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 16055670419025007879, + 10167255563356161134, + 5873677174484181331, + 1119183194058634412, + ]), + Fq::from_montgomery_limbs([ + 6545073505115712765, + 12208880957985144024, + 2413898051352165752, + 200177087583496979, + ]), + Fq::from_montgomery_limbs([ + 10675772825457541870, + 13221200307080776964, + 8360161479127911800, + 166239764386669819, + ]), + Fq::from_montgomery_limbs([ + 2006419824145230446, + 1298290087846863922, + 11954724771700273308, + 1258575857924774921, + ]), + Fq::from_montgomery_limbs([ + 5182647705377916601, + 12490693483304324120, + 16433633239279713593, + 95750642123415707, + ]), + Fq::from_montgomery_limbs([ + 95333990082317168, + 17157473840728451869, + 10012571168547117601, + 89162384671094023, + ]), + Fq::from_montgomery_limbs([ + 4909644498074356100, + 4736187679400324044, + 5882012018493447769, + 1092049061252631253, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 7311109856180655396, + 11772066066061778775, + 4758323204662324777, + 424401521788398695, + ]), + Fq::from_montgomery_limbs([ + 10327551942056000767, + 7896891757351259654, + 5415141459879741043, + 970729526627356745, + ]), + Fq::from_montgomery_limbs([ + 16598021919990022911, + 4748198554306289116, + 17393884082489388120, + 1042289367721564407, + ]), + Fq::from_montgomery_limbs([ + 6071815438135838764, + 6957160250256416369, + 5727172448350823478, + 363080876294209892, + ]), + Fq::from_montgomery_limbs([ + 9289142807381535883, + 17159982138314567248, + 17888157697874972247, + 525936327365438813, + ]), + Fq::from_montgomery_limbs([ + 13845673834923418042, + 3021171551531346231, + 6196055431827427575, + 879039969582851499, + ]), + Fq::from_montgomery_limbs([ + 5868202154697212122, + 13487005442942356371, + 16163257120298149093, + 656445568990681140, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 6021369790491535593, + 2415914828808962567, + 8804789562076458409, + 141257607088107152, + ]), + Fq::from_montgomery_limbs([ + 8888538666372726960, + 417693810472292690, + 6625260792856360214, + 48639855527887045, + ]), + Fq::from_montgomery_limbs([ + 6477686476345016713, + 5099365493188187874, + 9710843539546247353, + 356644031678310872, + ]), + Fq::from_montgomery_limbs([ + 514050899336931730, + 1305432265166896997, + 3022676376566559511, + 992533360610514607, + ]), + Fq::from_montgomery_limbs([ + 3586775418789355531, + 9516764397514990497, + 13077440505677103078, + 1193605133897764836, + ]), + Fq::from_montgomery_limbs([ + 11915336245727353796, + 3787026284924392313, + 9686187959466848805, + 331336880299973516, + ]), + Fq::from_montgomery_limbs([ + 13079652964588155522, + 3686330961737298646, + 12410090506639101095, + 1254304946836077906, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 14841602521644800285, + 9707581858559806753, + 8194272850889842673, + 1175777861699186223, + ]), + Fq::from_montgomery_limbs([ + 8340457880130547197, + 17733479127111148650, + 9935013927746385786, + 727641041410784864, + ]), + Fq::from_montgomery_limbs([ + 15762625424586722564, + 3435382265052399320, + 8159926067386473340, + 197998409655179296, + ]), + Fq::from_montgomery_limbs([ + 8605915918798970675, + 13692084072552856212, + 4328810091072359910, + 868588572376767645, + ]), + Fq::from_montgomery_limbs([ + 1361081942051675201, + 15249716130118278159, + 2121941051566676057, + 559576702023081922, + ]), + Fq::from_montgomery_limbs([ + 10752810451997705936, + 2862464874834320603, + 10309748098106940300, + 1304236557076849780, + ]), + Fq::from_montgomery_limbs([ + 2835871431608154484, + 1749514314752450621, + 2725234542965358215, + 1201694229063035252, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 1073940549267563537, + 6847045449574399581, + 17756819714770896582, + 1117463338790312145, + ]), + Fq::from_montgomery_limbs([ + 12704094153865092665, + 8539050408973245584, + 17734788789994913591, + 929238621728331350, + ]), + Fq::from_montgomery_limbs([ + 10082772236499648827, + 15108304350645714070, + 3086595294879967436, + 1200387991311725607, + ]), + Fq::from_montgomery_limbs([ + 5047622605931054175, + 7557906648527048263, + 9624095609160422424, + 45506591031030909, + ]), + Fq::from_montgomery_limbs([ + 6965550813182250949, + 565066047981282920, + 13462964114732145360, + 980356066902323608, + ]), + Fq::from_montgomery_limbs([ + 15558299170349086309, + 1286346204199469533, + 3574858446200038472, + 851991524979889708, + ]), + Fq::from_montgomery_limbs([ + 7325586067383897002, + 10233684635542340023, + 17557031856919477181, + 132029230490414274, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 7217923862445368663, + 3794612520606418012, + 8670181285195573375, + 240971390392704685, + ]), + Fq::from_montgomery_limbs([ + 537441915444801171, + 3014981172602304732, + 1479722163959615169, + 155749091741220885, + ]), + Fq::from_montgomery_limbs([ + 13062793399299583557, + 1159027774347651884, + 2336679478816355142, + 270200510125259051, + ]), + Fq::from_montgomery_limbs([ + 3831694067573543757, + 10964370664526245902, + 4087998121879874921, + 905965084930019006, + ]), + Fq::from_montgomery_limbs([ + 13194259065052094927, + 388722439697642959, + 178624285496351497, + 578824842066706531, + ]), + Fq::from_montgomery_limbs([ + 17948259725763227950, + 9014484167981796209, + 6107081279184176814, + 69534426400404264, + ]), + Fq::from_montgomery_limbs([ + 7978550262967360739, + 7491565367832202367, + 4365729291374404994, + 1335365781615388178, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 10669459440663038789, + 6552676677342008487, + 13316372054996453680, + 550925049999738916, + ]), + Fq::from_montgomery_limbs([ + 4419333495078684322, + 6927538080001000341, + 2225108594758156053, + 1079053614093719540, + ]), + Fq::from_montgomery_limbs([ + 1972675078636948291, + 12089663092664065043, + 17766574022138625521, + 121432615644490431, + ]), + Fq::from_montgomery_limbs([ + 1053520141057629369, + 10770912132989963882, + 1148187868111152786, + 707938827427743885, + ]), + Fq::from_montgomery_limbs([ + 3260322753636284964, + 10729835216415125135, + 716444025392599556, + 690504199610876560, + ]), + Fq::from_montgomery_limbs([ + 6934370135811844333, + 6301658833825444793, + 4848235658034124485, + 472091301484588447, + ]), + Fq::from_montgomery_limbs([ + 9777643377073268806, + 791842489813847254, + 12448150674843197239, + 458910758561278370, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15803810666230694733, + 17547487450377911929, + 11906139405746854533, + 825285431509255503, + ]), + Fq::from_montgomery_limbs([ + 16600353337473024459, + 1886864376737549006, + 616311009164692973, + 639902607392049032, + ]), + Fq::from_montgomery_limbs([ + 1680268521087434801, + 1091097160854707765, + 18087803601592847532, + 572438372434779394, + ]), + Fq::from_montgomery_limbs([ + 13425154509660903739, + 7155042440442144058, + 5484293510771639701, + 440694050533320954, + ]), + Fq::from_montgomery_limbs([ + 18374411341880395201, + 14499066397809595914, + 13606711309161552316, + 988627169135416549, + ]), + Fq::from_montgomery_limbs([ + 2227485226860398923, + 6037771840516072237, + 10092335873046301438, + 263890669231622026, + ]), + Fq::from_montgomery_limbs([ + 16396442279804673220, + 11758563075897600330, + 14728620288909029404, + 1009629620490761817, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 17746049445618651584, + 15474250106095074477, + 6808865525843107141, + 252069263355480366, + ]), + Fq::from_montgomery_limbs([ + 10094119795803932244, + 10978354614679659751, + 7451382830965148493, + 1131617137883762978, + ]), + Fq::from_montgomery_limbs([ + 16463020271793267367, + 16484453755363327531, + 16299428051085732734, + 1215317962997421603, + ]), + Fq::from_montgomery_limbs([ + 222141886324808295, + 13928396678279854231, + 10143359980064533818, + 815662865945589973, + ]), + Fq::from_montgomery_limbs([ + 12231656940181472813, + 6572412520702222123, + 12613052303172694748, + 266113525618574574, + ]), + Fq::from_montgomery_limbs([ + 988110300489242272, + 2246797931487708434, + 10572926100714461647, + 903118853801541805, + ]), + Fq::from_montgomery_limbs([ + 530795899436597525, + 8521163943052335338, + 8151289800410686217, + 36252124276088895, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 15950738796712300438, + 5211784799364900458, + 10872161777257884476, + 622500837165264302, + ]), + Fq::from_montgomery_limbs([ + 1796299668914971469, + 10069069742410689124, + 17398930418864211639, + 571074796095573997, + ]), + Fq::from_montgomery_limbs([ + 17415629526903541572, + 60522099572337001, + 7357276421993594658, + 67139681069623750, + ]), + Fq::from_montgomery_limbs([ + 3150476614427182634, + 11400695529363767640, + 9974085938634932190, + 201799321821634924, + ]), + Fq::from_montgomery_limbs([ + 17211147489720667761, + 15454125189814636772, + 1785683860014593630, + 1234545901167080662, + ]), + Fq::from_montgomery_limbs([ + 12917754021603623789, + 10145571812631521550, + 5237021007548635344, + 113519696768852825, + ]), + Fq::from_montgomery_limbs([ + 15503258828146475946, + 914788767927389955, + 8850539145480636682, + 452504293017031100, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 3745554364046936255, + 4597306622888789154, + 5979651250338667136, + 1238385628454513051, + ]), + Fq::from_montgomery_limbs([ + 3776630884323931547, + 3549782146440747750, + 5508785071859620867, + 701959603932551327, + ]), + Fq::from_montgomery_limbs([ + 15669417982403128442, + 4987063011318496848, + 2675129774208819610, + 752856218864954922, + ]), + Fq::from_montgomery_limbs([ + 12384169795306075140, + 13266521557806758758, + 8976316392650036414, + 779369456063978984, + ]), + Fq::from_montgomery_limbs([ + 7882432423342926513, + 17205292058596297059, + 11479846445566224721, + 1260089851413577942, + ]), + Fq::from_montgomery_limbs([ + 14020835325904272518, + 10352766579517264043, + 15417820050597494655, + 621361945178146722, + ]), + Fq::from_montgomery_limbs([ + 17051687952810193326, + 6871472877919148363, + 3489400199188897362, + 687766677359196782, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 17382705588788402853, + 4598916697035859633, + 4518832565581736311, + 653080619696360531, + ]), + Fq::from_montgomery_limbs([ + 2250500707327888710, + 8472537755265510597, + 8234912680399854173, + 435433220178846885, + ]), + Fq::from_montgomery_limbs([ + 11580178681277497490, + 5498607256285409706, + 4135785859002967214, + 1124489661838811902, + ]), + Fq::from_montgomery_limbs([ + 17779714097123614458, + 8699423459123996923, + 15631484148488778752, + 909516986337557641, + ]), + Fq::from_montgomery_limbs([ + 18163751795979980990, + 11867922209368440763, + 10515761459427034219, + 1332994349752029313, + ]), + Fq::from_montgomery_limbs([ + 6467500727988715108, + 9306282235622577642, + 13541102366651570877, + 416775728642319774, + ]), + Fq::from_montgomery_limbs([ + 10383099790322168017, + 17058343682036470720, + 16556281441888606360, + 1108176927190266030, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 8622953880956768188, + 7398970229585501839, + 3084527402086859984, + 1314489003639612227, + ]), + Fq::from_montgomery_limbs([ + 2647974631426734642, + 3924418247812102940, + 4184932287519868312, + 1194114797716949792, + ]), + Fq::from_montgomery_limbs([ + 14598747211696490139, + 10879316167117011549, + 9287974170985802960, + 731429090606059611, + ]), + Fq::from_montgomery_limbs([ + 9444556880219125709, + 5586056795682328427, + 7367116120983861589, + 588219877692556070, + ]), + Fq::from_montgomery_limbs([ + 10966009764315859760, + 10742608081271307349, + 3709772539537310986, + 497532886403996414, + ]), + Fq::from_montgomery_limbs([ + 15416260817024711436, + 431667905910500746, + 1387964135713748516, + 918060216721194080, + ]), + Fq::from_montgomery_limbs([ + 11657403806820742348, + 10510065601598889238, + 8349835292055724063, + 502241567933397208, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 5125027997144123095, + 7303165910753964935, + 10691796975927186405, + 1054799562052499765, + ]), + Fq::from_montgomery_limbs([ + 3677058682136778866, + 2112392306281972958, + 6200265695478657913, + 720439016775781556, + ]), + Fq::from_montgomery_limbs([ + 8272146025997512256, + 10341698166702554611, + 15851101317909170235, + 452521866559100336, + ]), + Fq::from_montgomery_limbs([ + 9968119379746477391, + 13931547738079661500, + 12809160964499846690, + 770440521239403115, + ]), + Fq::from_montgomery_limbs([ + 11434415940462413800, + 16684667769948280834, + 17418898698438354203, + 1004769570334088081, + ]), + Fq::from_montgomery_limbs([ + 3258653721799542419, + 3871032496675885535, + 15086212796812657551, + 548348409520277973, + ]), + Fq::from_montgomery_limbs([ + 9315341100800814485, + 16973311177794380607, + 9399876472392037546, + 371744665007363788, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 13784204593688045203, + 987916117600213001, + 10766183396659311558, + 616603627600417345, + ]), + Fq::from_montgomery_limbs([ + 16045652418239566399, + 8490486261587787544, + 17701136459350400996, + 200715104605533295, + ]), + Fq::from_montgomery_limbs([ + 16284971980816740279, + 8206294557799882679, + 2790028614836001157, + 1230396046687758171, + ]), + Fq::from_montgomery_limbs([ + 9870167375285365220, + 7246310481239931900, + 17367559916410875637, + 828013539220163509, + ]), + Fq::from_montgomery_limbs([ + 16072962173730053757, + 4193938980038706222, + 11164976873168367038, + 230857852443905890, + ]), + Fq::from_montgomery_limbs([ + 7523323272036182261, + 7860098358273104019, + 14378442365280097332, + 1330897076351403427, + ]), + Fq::from_montgomery_limbs([ + 5166916295217303780, + 12258429519770930476, + 7573997247042435361, + 682178487313104306, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 2043764091903620445, + 4485903403091863087, + 7882707843266586726, + 32588602135411527, + ]), + Fq::from_montgomery_limbs([ + 15445407966754968040, + 18357001192960460653, + 4704086230082948769, + 786939246434391312, + ]), + Fq::from_montgomery_limbs([ + 16117366278228333427, + 18271129267524238221, + 10279609063883049289, + 1039698878929789014, + ]), + Fq::from_montgomery_limbs([ + 7187518414442758799, + 1779717612181090682, + 11702580549115117112, + 938810897647106356, + ]), + Fq::from_montgomery_limbs([ + 17722222577775244941, + 9996465098177475040, + 6523413930963943566, + 594985722442752339, + ]), + Fq::from_montgomery_limbs([ + 14942503613037167587, + 18043065733746265056, + 18350946329946766564, + 456482704506596726, + ]), + Fq::from_montgomery_limbs([ + 413913659191909137, + 6804960474770818549, + 11211569852612831192, + 29172099643213194, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 12244020429757927595, + 7878431481226438368, + 15736494002689538032, + 952552586365680365, + ]), + Fq::from_montgomery_limbs([ + 6811639335636941408, + 13087253934833450042, + 14243138544038514009, + 802500736974958878, + ]), + Fq::from_montgomery_limbs([ + 5119841013779673124, + 924763452388520667, + 13728889174508658116, + 1253763325687067827, + ]), + Fq::from_montgomery_limbs([ + 15043507624384025219, + 14829641103772380163, + 3009461704678867396, + 937642236989310683, + ]), + Fq::from_montgomery_limbs([ + 11671642017952121222, + 16541053200478701290, + 1980039776401781944, + 588963913112990120, + ]), + Fq::from_montgomery_limbs([ + 10584858696775764162, + 11016739814752144940, + 16324314276275577748, + 654922621317102495, + ]), + Fq::from_montgomery_limbs([ + 3244897877015736117, + 11237789704802235882, + 15022173147815144257, + 40109243059779922, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 13421818826894964525, + 6843121314819036302, + 177656756133214759, + 1219229288475674852, + ]), + Fq::from_montgomery_limbs([ + 6718699512784917601, + 586674041776306822, + 18334677892276409595, + 789222582574373919, + ]), + Fq::from_montgomery_limbs([ + 2284827956975526833, + 6582209151387402444, + 16582912253436322211, + 341803586231976372, + ]), + Fq::from_montgomery_limbs([ + 7256396544134998118, + 8214951682602116321, + 3245431556959173874, + 1245025275513704302, + ]), + Fq::from_montgomery_limbs([ + 15432965983836887543, + 14720892157109837025, + 15495565877696769481, + 28040874075986580, + ]), + Fq::from_montgomery_limbs([ + 2845048156588876954, + 8511864041625766030, + 12227720668782503297, + 751125685338714507, + ]), + Fq::from_montgomery_limbs([ + 16400929974316258476, + 14955948068318960184, + 10179371694614714547, + 1203413977422071153, + ]), + ]), + Matrix::<7, 1, 7>::new_from_known([ + Fq::from_montgomery_limbs([ + 6945749691605470013, + 11814685140591736549, + 9661986044853389934, + 549110123010799116, + ]), + Fq::from_montgomery_limbs([ + 10314852142802128718, + 16931011931436831749, + 6272554436628472312, + 613946066674111963, + ]), + Fq::from_montgomery_limbs([ + 7885885393747543748, + 6205273416854026781, + 3045614234898978712, + 325443134576651832, + ]), + Fq::from_montgomery_limbs([ + 16340716059032367665, + 13900104810468791197, + 13840116352417324181, + 807825755702914983, + ]), + Fq::from_montgomery_limbs([ + 11307065830129329386, + 17314979792657924564, + 1031027443933101440, + 670942943796932032, + ]), + Fq::from_montgomery_limbs([ + 16427383528817659047, + 269318770779983782, + 12646967434416881049, + 792232402464509209, + ]), + Fq::from_montgomery_limbs([ + 5305513183378836911, + 3912518176481377699, + 15813014949092997837, + 717786010393961950, + ]), + ]), + ], + }, + optimized_arc: OptimizedArcMatrix::<39, 8, 312>::new_from_known([ + Fq::from_montgomery_limbs([ + 17670646277747935280, + 16706444459999957760, + 7654997937391160943, + 659194013361630234, + ]), + Fq::from_montgomery_limbs([ + 9306410324956668761, + 11918867663968452855, + 16159669320449336406, + 1027263653273380654, + ]), + Fq::from_montgomery_limbs([ + 10424544810878645940, + 11533042162917906716, + 11405431418950019185, + 1181592306684207657, + ]), + Fq::from_montgomery_limbs([ + 15511314950168773025, + 2706584092620486610, + 12589344906057924987, + 198949415522711747, + ]), + Fq::from_montgomery_limbs([ + 6463242934034011456, + 4480775049700236083, + 1147244402884869561, + 251099301522684222, + ]), + Fq::from_montgomery_limbs([ + 6076653156556680739, + 6058362204127962922, + 2609006430585927072, + 1274277644859784421, + ]), + Fq::from_montgomery_limbs([ + 4034147285618545471, + 16309046946281719379, + 11732506942908882170, + 1141734761043516350, + ]), + Fq::from_montgomery_limbs([ + 15181402120606708665, + 769117698742393942, + 8000709366545785093, + 128042919054960870, + ]), + Fq::from_montgomery_limbs([ + 1723632755773767909, + 7425611528820224114, + 3846361608213771012, + 1317157014229771878, + ]), + Fq::from_montgomery_limbs([ + 1180004570926588292, + 9835115993104089813, + 255514544102365106, + 370024046994873563, + ]), + Fq::from_montgomery_limbs([ + 16507101987459533719, + 15603514395660572922, + 14849362947260167652, + 1094669615299361663, + ]), + Fq::from_montgomery_limbs([ + 1641419564627940104, + 1734977130266781622, + 2359844858057393580, + 88569664018692634, + ]), + Fq::from_montgomery_limbs([ + 16267328831985402574, + 4504129177123355587, + 2430336937000039615, + 182724946762968945, + ]), + Fq::from_montgomery_limbs([ + 17793535158928999608, + 5634031392654154747, + 10364337635238532583, + 1179994829791766723, + ]), + Fq::from_montgomery_limbs([ + 145700301814233551, + 7743364595931833861, + 13600389751414362190, + 60896176710147956, + ]), + Fq::from_montgomery_limbs([ + 17934232373820563709, + 6533845630243602776, + 15324676632824344806, + 193078344538210235, + ]), + Fq::from_montgomery_limbs([ + 3358859423299088468, + 11840854300859333122, + 8971776175135254558, + 1017237487419914281, + ]), + Fq::from_montgomery_limbs([ + 16328481477177681368, + 1582997519876787207, + 5731557971602616313, + 498420306800783215, + ]), + Fq::from_montgomery_limbs([ + 12526989383108933614, + 11731194362815364383, + 12171285115754354694, + 1149426086446852474, + ]), + Fq::from_montgomery_limbs([ + 809732533742229508, + 9195963923014534752, + 11886583635578374853, + 1292532069463172705, + ]), + Fq::from_montgomery_limbs([ + 15459398930996981001, + 17972537529111616674, + 6256384561719931081, + 1099908904421687269, + ]), + Fq::from_montgomery_limbs([ + 6194631511262826563, + 5980361634035332899, + 6132585703186883039, + 1343152289862207638, + ]), + Fq::from_montgomery_limbs([ + 13704532277655419198, + 9493963458736770267, + 12653804519172949169, + 218428805830292650, + ]), + Fq::from_montgomery_limbs([ + 8013496787819495990, + 18081394694809078101, + 14689354188530395484, + 215594972753885108, + ]), + Fq::from_montgomery_limbs([ + 1765918642197202432, + 14609627278749496598, + 17838479232731490790, + 483435431183692300, + ]), + Fq::from_montgomery_limbs([ + 16887594024800193480, + 1328476430727273505, + 17409984215868190656, + 1068059229250495642, + ]), + Fq::from_montgomery_limbs([ + 15487315671093445122, + 4028755842123792652, + 14118515559434131307, + 600004660835889583, + ]), + Fq::from_montgomery_limbs([ + 13620558349664282044, + 9072735252525972202, + 312787852320488038, + 47231029883010665, + ]), + Fq::from_montgomery_limbs([ + 9895950479699930991, + 1320083262020086701, + 9381389112858508819, + 928504768072893822, + ]), + Fq::from_montgomery_limbs([ + 10747871248019763953, + 4479404654791651748, + 11550770912037988700, + 438216942461032792, + ]), + Fq::from_montgomery_limbs([ + 18385142532667962947, + 12272398000439779637, + 7461987138462771945, + 558726769125714997, + ]), + Fq::from_montgomery_limbs([ + 14139485618053732983, + 8348792317702713313, + 367233286875102863, + 186067690854023043, + ]), + Fq::from_montgomery_limbs([ + 9041249832633195933, + 456527929350696070, + 3136123267563166118, + 862425036609816636, + ]), + Fq::from_montgomery_limbs([ + 15124489565605096262, + 9591776999407651202, + 9949743867591863836, + 379301809986101293, + ]), + Fq::from_montgomery_limbs([ + 7936212225265692567, + 5167873242552786141, + 15086007892632579186, + 34123317109097916, + ]), + Fq::from_montgomery_limbs([ + 11979204740795107684, + 9025639229793397244, + 5413420333413553932, + 863248811490344887, + ]), + Fq::from_montgomery_limbs([ + 9695363700834200933, + 8045139581671731368, + 11369126945536873679, + 469549910005852030, + ]), + Fq::from_montgomery_limbs([ + 16001389245048329705, + 14343919283544642008, + 8770282828186128872, + 609282374273682689, + ]), + Fq::from_montgomery_limbs([ + 3823216797063303082, + 1094417965873836739, + 128140664081656267, + 505393735803371332, + ]), + Fq::from_montgomery_limbs([ + 11607694328136514560, + 15466463320091898450, + 1284330480161723488, + 523170093647820661, + ]), + Fq::from_montgomery_limbs([ + 6591976781647884526, + 13155313999173994351, + 5534892153549946238, + 596288575025257402, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11245287468508932221, + 6475072057356916286, + 8955917100198612964, + 906270931915685321, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 15725649958168108419, + 4885330408482380508, + 6484207300414290657, + 1056573086606426860, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16437212199268506264, + 15424576221688158299, + 13027006101536779850, + 608117920425829987, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 17697959731033747413, + 881277620659586097, + 12999020138550792084, + 218994748484938916, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12187347033384567067, + 17834331425991885966, + 8111171543195993305, + 1237278747760332198, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 11540996079264122621, + 2083205448185058166, + 346303233664255773, + 67570065514985214, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10393932313960189738, + 17658417030509504989, + 4494310414388827903, + 1083916009420136201, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2630959439345449795, + 1305013099304121044, + 14958893064556663587, + 502133670161114876, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13496177055604370316, + 12107925075218853848, + 10893831346139387200, + 735686689798442157, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 12364352345596204590, + 12473718848164928984, + 2425158662567034925, + 904357473540167435, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14250114029266561642, + 9657963390342822389, + 16617255202449702017, + 52229193358824331, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3393942568576243306, + 15201405507578251139, + 6434177138638406256, + 116816845492109945, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14360127524315233155, + 4631991403443744392, + 10826720762323261633, + 1154614674523717146, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 14829610837565210361, + 7693159893394777397, + 13277623225200387185, + 263905793180518944, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4366690825327685189, + 15770582084981330795, + 9277162666554299542, + 1073180600510589318, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 16303997479448678802, + 7666294877889688289, + 2209941188570371640, + 1162514781528013202, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1444309609555002006, + 10573827461364748619, + 2213854418060563275, + 401298293463815465, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 13603143649902644173, + 267673648604347469, + 14770735498081352270, + 897064240488864979, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8455439882916778200, + 7244379144226653693, + 4901050804550540073, + 742531378918583129, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9638569098999723413, + 8668710516732565855, + 12439587172429553092, + 769864205315111320, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 10577866480500504509, + 15180092538013446632, + 5047010252898418108, + 950851917894966177, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 3189260863075829869, + 10864458126965265163, + 3908173847970795616, + 372196369105917792, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 2051981355439501951, + 5174689290614735930, + 13076787589476369050, + 248791600711156417, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 18083408695123027967, + 12620252496424532716, + 15225720090085185173, + 1087409511851215366, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 1151518846415312778, + 2617847070972026268, + 11920538756871768189, + 372494371299109617, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 8129021687746030207, + 5089594247705352277, + 13404536729495455227, + 996268291797137887, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9082481642086184012, + 16123562957232930427, + 113453873016526172, + 1171240835007212511, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 9619017927874739465, + 12861346968534199922, + 6474341695138246789, + 329774666529093679, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 4828844673239990367, + 9237140426585666270, + 4472429349292670700, + 1211740921942321738, + ]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([0, 0, 0, 0]), + Fq::from_montgomery_limbs([ + 6374588877936433558, + 11607665174546753642, + 15847675340170713041, + 474145143590361300, + ]), + Fq::from_montgomery_limbs([ + 4088002413776997222, + 16030858922743461837, + 4313473177343544055, + 817302900123673764, + ]), + Fq::from_montgomery_limbs([ + 18216186189548814543, + 5687648301273358200, + 6564098766262925833, + 235647764529877689, + ]), + Fq::from_montgomery_limbs([ + 1421650618584051851, + 9669410210003093316, + 15430467067773365518, + 994269415526604309, + ]), + Fq::from_montgomery_limbs([ + 7574559796775011993, + 9643962694113220666, + 1013275434882478619, + 543427156325963008, + ]), + Fq::from_montgomery_limbs([ + 4532353768594877907, + 2433286855157726742, + 15167390808651362948, + 914159030044677082, + ]), + Fq::from_montgomery_limbs([ + 14155199821083030453, + 3642619697360819367, + 7765405773737076472, + 1202115259646869817, + ]), + Fq::from_montgomery_limbs([ + 16335533268534142579, + 4358492749042076660, + 16385044626223358243, + 847268434257421024, + ]), + Fq::from_montgomery_limbs([ + 726136436292617217, + 4735276118883290434, + 6495677390337301519, + 1007951275499954400, + ]), + Fq::from_montgomery_limbs([ + 1441892049918589996, + 16125120862288806381, + 5244917656153261337, + 108755599353706277, + ]), + Fq::from_montgomery_limbs([ + 9330223445766086137, + 9406197553353640417, + 13281468059023600014, + 500503138812404763, + ]), + Fq::from_montgomery_limbs([ + 5355456155777194776, + 15418542913049291849, + 7681885321566295504, + 1188094463923126996, + ]), + Fq::from_montgomery_limbs([ + 11882193142358058793, + 4624069509548102427, + 6735235437551193554, + 962114122876706035, + ]), + Fq::from_montgomery_limbs([ + 1819083831857771980, + 8349663267034291058, + 14403983179525206765, + 942284040773068417, + ]), + Fq::from_montgomery_limbs([ + 7024062436534453440, + 15203692147142724388, + 17082973923084045231, + 1191890185052815108, + ]), + Fq::from_montgomery_limbs([ + 6672719206476059341, + 18362672287252020084, + 3555226216430454216, + 300718449399370145, + ]), + Fq::from_montgomery_limbs([ + 5828458911011841758, + 9271852277477872143, + 18378348640149073615, + 591074353691784318, + ]), + Fq::from_montgomery_limbs([ + 15397757499179479361, + 1878199828613873660, + 4164621900891789384, + 558990401377082502, + ]), + Fq::from_montgomery_limbs([ + 11069496558892348093, + 10253211614498485032, + 11458203419889384673, + 575447664584685933, + ]), + Fq::from_montgomery_limbs([ + 9808353214047792416, + 4805184465312945639, + 3985871967202506787, + 1229730183276593449, + ]), + Fq::from_montgomery_limbs([ + 8420435996312062450, + 11100705514596499443, + 1523101111273631766, + 639557004587150270, + ]), + Fq::from_montgomery_limbs([ + 15630012259368829028, + 15079774099427294323, + 16765804689810369633, + 834886070512612798, + ]), + Fq::from_montgomery_limbs([ + 2000344807995355152, + 8654391083188520616, + 13301563010992444431, + 490951127405891771, + ]), + Fq::from_montgomery_limbs([ + 11761875542266860374, + 709339183471929228, + 17682621289319303167, + 570040706396372700, + ]), + Fq::from_montgomery_limbs([ + 3366481512891059038, + 12720609556939839584, + 1707138651265172645, + 36940608792331559, + ]), + Fq::from_montgomery_limbs([ + 2427334396528044490, + 10170194639028880515, + 18243990154741074229, + 607502491270396977, + ]), + Fq::from_montgomery_limbs([ + 6267947100515031640, + 14520122887125811439, + 6695614471931546770, + 251319533602819784, + ]), + Fq::from_montgomery_limbs([ + 7663026857490478572, + 15777701966597798170, + 10617198553182548195, + 642318201966621785, + ]), + Fq::from_montgomery_limbs([ + 9959998770754152632, + 13119241263216166622, + 6328810982306793729, + 571460896430554998, + ]), + Fq::from_montgomery_limbs([ + 12042605027273090048, + 14859482580111939906, + 11509134713697889199, + 561895216440235106, + ]), + Fq::from_montgomery_limbs([ + 1156916933025613310, + 4529329408550568088, + 14286907616576238972, + 1309540780962817079, + ]), + Fq::from_montgomery_limbs([ + 7510365353910652337, + 14538991928012962248, + 4644117500717216624, + 1340316749461135700, + ]), + ]), + } +} diff --git a/poseidon377/src/r1cs.rs b/poseidon377/src/r1cs.rs index 7dd1cd6..0c0c48c 100644 --- a/poseidon377/src/r1cs.rs +++ b/poseidon377/src/r1cs.rs @@ -12,7 +12,7 @@ pub fn hash_1( Ok(InstanceVar::n_to_1_fixed_hash( crate::RATE_1_PARAMS.clone(), cs.clone(), - vec![domain_separator.clone(), value], + [domain_separator.clone(), value], )) } @@ -24,7 +24,7 @@ pub fn hash_2( Ok(InstanceVar::n_to_1_fixed_hash( crate::RATE_2_PARAMS.clone(), cs.clone(), - vec![domain_separator.clone(), value.0, value.1], + [domain_separator.clone(), value.0, value.1], )) } @@ -36,7 +36,7 @@ pub fn hash_3( Ok(InstanceVar::n_to_1_fixed_hash( crate::RATE_3_PARAMS.clone(), cs.clone(), - vec![domain_separator.clone(), value.0, value.1, value.2], + [domain_separator.clone(), value.0, value.1, value.2], )) } @@ -48,7 +48,7 @@ pub fn hash_4( Ok(InstanceVar::n_to_1_fixed_hash( crate::RATE_4_PARAMS.clone(), cs.clone(), - vec![domain_separator.clone(), value.0, value.1, value.2, value.3], + [domain_separator.clone(), value.0, value.1, value.2, value.3], )) } @@ -60,7 +60,7 @@ pub fn hash_5( Ok(InstanceVar::n_to_1_fixed_hash( crate::RATE_5_PARAMS.clone(), cs.clone(), - vec![ + [ domain_separator.clone(), value.0, value.1, @@ -79,7 +79,7 @@ pub fn hash_6( Ok(InstanceVar::n_to_1_fixed_hash( crate::RATE_6_PARAMS.clone(), cs.clone(), - vec![ + [ domain_separator.clone(), value.0, value.1, @@ -99,7 +99,7 @@ pub fn hash_7( Ok(InstanceVar::n_to_1_fixed_hash( crate::RATE_7_PARAMS.clone(), cs.clone(), - vec![ + [ domain_separator.clone(), value.0, value.1,